고래씌
[JAVA] 10-2. 다형성 객체 배열 실습 2(Book객체) 본문
package com.kh.practice.chap01_poly.vo.model.vo;
public class Member {
private String name;
private int age;
private char gender;
private int couponCount = 0; // 요리학원 쿠폰 개수
public Member() {
}
public Member(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public int getCouponCount() {
return couponCount;
}
public void setCouponCount(int couponCount) {
this.couponCount = couponCount;
}
@Override
public String toString() {
return "Member [name=" + name + ", age=" + age + ", gender=" + gender + ", couponCount=" + couponCount + "]";
}
}
package com.kh.practice.chap01_poly.vo.model.vo;
public class Book {
private String title;
private String author;
private String publisher;
public Book() {
}
public Book(String title, String author, String publisher) {
this.title = title;
this.author = author;
this.publisher = publisher;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
@Override
public String toString() {
return title + " / "+ author + " / " + publisher ;
}
}
package com.kh.practice.chap01_poly.vo.model.vo;
public class AniBook extends Book{
private int accessAge;
public AniBook() {
}
public AniBook(String title, String author, String publisher, int accessAge) {
super(title, author, publisher);
this.accessAge = accessAge;
}
public int getAccessAge() {
return accessAge;
}
public void setAccessAge(int accessAge) {
this.accessAge = accessAge;
}
@Override
public String toString() {
return super.toString() + " / " + accessAge;
}
}
package com.kh.practice.chap01_poly.vo.model.vo;
public class CookBook extends Book{
private boolean coupon;
public CookBook() {
}
public CookBook(String title, String author, String publisher, boolean coupon) {
super(title, author, publisher);
this.coupon = coupon;
}
public boolean isCoupon() { // boolean만의 특징. isCoupon
return coupon;
}
public void setCoupon(boolean coupon) {
this.coupon = coupon;
}
@Override
public String toString() {
return super.toString() + " / " + coupon;
}
}
package com.kh.practice.chap01_poly.controller;
import com.kh.practice.chap01_poly.vo.model.vo.AniBook;
import com.kh.practice.chap01_poly.vo.model.vo.Book;
import com.kh.practice.chap01_poly.vo.model.vo.CookBook;
import com.kh.practice.chap01_poly.vo.model.vo.Member;
public class LibraryController {
private Member mem = null;
private Book[] bList = new Book[5];
{
bList[0] = new CookBook("백종원의 집밥", "백종원", "tvN", true);
bList[1] = new AniBook("한번 더 해요", "미티", "원모어", 19);
bList[2] = new AniBook("루피의 원피스", "루피", "japan", 12);
bList[3] = new CookBook("이혜정의 얼마나 맛있게요", "이혜정", "문학", false);
bList[4] = new CookBook("최현석 날 따라해봐", "최현석", "소금책", true);
}
public void insertMember(Member mem) {
// 전달받은 mem 주소값을 통해
// LibraryController의 mem에 대입
this.mem = mem;
}
public Member myInfo() {
// 회원 레퍼런스(mem)주소값 리턴
return mem;
}
public Book[] selectAll() {
// Book 객체의 주소값 리턴
return bList;
}
public Book[] searchBook(String keyword) {
// 검색 결과를 담아줄 새로운 Book 객체 배열 생성
// 검색 결과 도서목록이 최대 5개일 수 있으니 임의로 크기 5 생성
// for문을 이용하여 bList 도서 목록들의 도서명과 전달받은 keyword비교
// keyword.equals("a") / contains() 포함 "문자열".contains("비교문자열")
// 문자열 내부에서 비교문자열과 비교를 했을때 비교문자열이 포함되어있다면 true / false 반환
// 검색결과의 도서목록에 담기 -> HINT : count 이용
// 해당 검색결과의 도소목록 주소 값 리턴
Book[] bList = new Book [5];
int count = 0;
for(int i=0; i<bList.length; i++) {
if(this.bList[i].getTitle().contains(keyword)) {
bList[count++] = this.bList[i];
}
}
return bList;
}
public int rentBook(int index) {
// int result = 0;
// 전달 받은 index의 bList 객체가 만화책을 참조하고 있고
// 해당 만화책의 제한 나이와 회원의 나이를 비교하여 회원 나이가 적을 경우
// result를 1로 초기화 → 나이제한으로 대여 불가
// 전달 받은 index의 bList 객체가 요리책을 참조하고 있고
// 해당 요리책의 쿠폰유무가 “유”일 경우
// 회원의 couponCount 1 증가 처리 후
// result를 2로 초기화 → 성공적으로 대여 완료, 요리학원 쿠폰 발급
// result 값 리턴
int result = 0;
if(bList[index] instanceof AniBook) {
if(((AniBook)bList[index]).getAccessAge() > mem.getAge()) {
result = 1;
}
}else {
if(((CookBook)bList[index]).isCoupon()) {
mem.setCouponCount(mem.getCouponCount()+1);
result = 2;
}
}
return result;
}
}
package com.kh.practice.chap01_poly.view;
import java.util.Scanner;
import com.kh.practice.chap01_poly.controller.LibraryController;
import com.kh.practice.chap01_poly.vo.model.vo.Book;
import com.kh.practice.chap01_poly.vo.model.vo.Member;
public class LibraryMenu {
private LibraryController lc = new LibraryController();
private Scanner sc = new Scanner(System.in);
public void mainMenu() {
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("나이 : ");
int age = sc.nextInt();
sc.nextLine();
System.out.println("성별 : ");
char gender = sc.nextLine().charAt(0);
lc.insertMember(new Member(name, age, gender));
while(true) {
System.out.println("==== 메뉴 ====");
System.out.println("1. 마이페이지");
System.out.println("2. 도서 전체 조회");
System.out.println("3. 도서 검색");
System.out.println("4. 도서 대여하기");
System.out.println("9. 프로그램 종료하기");
System.out.print("메뉴 번호 : ");
int menu = sc.nextInt();
switch(menu) {
case 1 : System.out.println(lc.myInfo()); break;
case 2 : selectAll(); break;
case 3 : searchBook(); break;
case 4 : rentBook(); break;
case 9 : System.out.println("프로그램을 종료합니다."); return;
default: System.out.println("잘못 입력하셨습니다.");
}
}
}
public void selectAll() {
Book [] bList = lc.selectAll();
for(int i=0; i<bList.length; i++) {
System.out.println(i+"번도서 : " + bList[i]);
// 출력문을 재정의했기 때문에 원하는 값이 출력됨. 뒤에 toString()을 안써도!
}
}
public void searchBook() {
// “검색할 제목 키워드 : “ >> 입력 받음 (keyword)
// LibraryController의 searchBook() 에 전달
// 그 결과 값을 Book[] 자료형 searchList에 담아 검색 결과인 도서 목록 출력
sc.nextLine();
System.out.print("검색할 제목 키워드 : ");
String keyword = sc.nextLine();
Book [] searchList = lc.searchBook(keyword);
Book [] bList = lc.selectAll();
for(int i=0; i<searchList.length; i++) {
if(searchList[i] != null) {
System.out.println(searchList[i]);
}
}
}
public void rentBook() {
// 도서대여를 위해 도서번호를 알아야 하기 때문에 selectAll() 메소드 호출
// “대여할 도서 번호 선택 : ” >> 입력 받음 (index)
// LibraryController의 rentBook() 에 전달
// 그 결과 값을 result로 받고 그 result가
// 0일 경우 → “성공적으로 대여되었습니다.” 출력
// 1일 경우 → “나이 제한으로 대여 불가능입니다.” 출력
// 2일 경우 → “성공적으로 대여되었습니다. 요리학원 쿠폰이 발급되었으니
// 마이페이지에서 확인하세요” 출력
selectAll();
System.out.print("대여할 도서 번호 선택 : ");
int num = sc.nextInt();
int result = lc.rentBook(num);
switch(result) {
case 0: System.out.println("성공적으로 대여되었습니다."); break;
case 1: System.out.println("나이 제한으로 대여 불가능입니다."); break;
case 2: System.out.println("성공적으로 대여되었습니다. 요리학원 쿠폰이 발급되었으니 "
+ "마이페이지에서 확인하세요");
}
}
}
package com.kh.practice.chap01_poly.run;
import com.kh.practice.chap01_poly.view.LibraryMenu;
public class Run {
public static void main(String[] args) {
new LibraryMenu().mainMenu();
}
}
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 다형성(추상 클래스, 인터페이스 실습) (0) | 2023.10.18 |
---|---|
[JAVA] 10-3. 다형성(추상클래스 abstract 와 인터페이스) (0) | 2023.10.18 |
[JAVA] 10-1. 다형성 실습 (0) | 2023.10.17 |
[JAVA] 10. 다형성 (0) | 2023.10.16 |
[JAVA] 상속 실습 문제 (0) | 2023.10.16 |