Book Class
package com.kh.library.model.vo;
public class Book {
private String bNo;
private String title;
private String author;
private String publisher;
private int price;
private String description;
public Book() {}
// 단축키로 생성해보기
public Book(String bNo, String title, String author, String publisher, int price, String description) {
super();
this.bNo = bNo;
this.title = title;
this.author = author;
this.publisher = publisher;
this.price = price;
this.description = description;
}
public String getbNo() {
return bNo;
}
public void setbNo(String bNo) {
this.bNo = bNo;
}
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;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Book [bNo=" + bNo + ", title=" + title + ", author=" + author + ", publisher=" + publisher + ", price="
+ price + ", description=" + description + "]";
}
}
Magazine Class
package com.kh.library.model.vo;
// Book 상속받아서 작성
public class Magazine extends Book{
private int year;
private int month;
public Magazine() {}
// 단축키로 생성해보기
public Magazine(String bNo, String title, String author, String publisher, int price, String description, int year,
int month) {
super(bNo, title, author, publisher, price, description);
this.year = year;
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
@Override
public String toString() {
return "Magazine [" + super.toString() + ", year=" + year + ", month=" + month + "]";
}
}
BookManager interface
package com.kh.library.controller;
import java.util.ArrayList;
import com.kh.library.model.vo.Book;
/*
* BookManager 인터페이스는 다양한 Book 객체들을 핸들링하는 템플릿 기능을 가지고 있다.
*/
public interface BookManager {
// 무조건 해당 인터페이스에 있는 함수로 BookController.java 구현할 것
void addBook(Book nBook);
ArrayList<Book> getAllBook();
Book searchBookBybNo(String bNo);
ArrayList<Book> searchBookByTitle(String title);
ArrayList<Book> onlySearchBook();
ArrayList<Book> onlySearchMagazine();
ArrayList<Book> magazineOfThisYearInfo(int year);
ArrayList<Book> searchBookByPublisher(String publisher);
ArrayList<Book> searchBookByPrice(int price);
int getTotalPrice();
int getAvgPrice();
}
BookController Class
package com.kh.library.controller;
import java.util.ArrayList;
import com.kh.library.model.vo.Book;
import com.kh.library.model.vo.Magazine;
//BookManager 인터페이스 구현
public class BookController implements BookManager {
public ArrayList<Book> list = new ArrayList<>();
@Override
public void addBook(Book nBook) {
list.add(nBook);
}
@Override
public ArrayList<Book> getAllBook() {
return list;
}
@Override
public Book searchBookBybNo(String bNo) {
Book b = null;
for(Book sb : list) {
if(sb.getbNo().equals(bNo)) {
b = sb;
}
}
return b;
// for(int i = 0; i < list.size(); i++) {
// if(list.get(i).getbNo().equals(bNo)) {
// b = list.get(i);
// }
// }
// return b;
}
@Override
public ArrayList<Book> searchBookByTitle(String title) {
ArrayList<Book> TitleList = new ArrayList<>();
for(Book b : list) {
if(b.getTitle().contains(title)) {
TitleList.add(b);
}
}
//
// for(int i = 0; i < list.size(); i++) {
// if(list.get(i).getTitle().contains(title)) {
// TitleList.add(list.get(i));
// }
// }
return TitleList;
}
@Override
public ArrayList<Book> onlySearchBook() {
ArrayList<Book> bookList = new ArrayList<>();
for(Book b : list) {
if(b instanceof Magazine == false){ // Book == true 는 안된다. 왜냐 ? Magazine이 Book에게 상속받고 있기 때문에 Magazine 도 true라고 나온다.
bookList.add(b);
}
}
return bookList;
}
@Override
public ArrayList<Book> onlySearchMagazine() {
ArrayList<Book> magazineList = new ArrayList<Book>();
for(Book b : list) {
if(b instanceof Magazine) {
magazineList.add(b);
}
}
return magazineList;
}
@Override
public ArrayList<Book> magazineOfThisYearInfo(int year) {
ArrayList<Book> yearList = new ArrayList<>();
/*
for(int i = 0; i < onlySearchMagazine().size(); i++) {
if( ((Magazine)(onlySearchMagazine().get(i))).getYear() == year) {
yearList.add(onlySearchMagazine().get(i));
}
}
*/
for(Book b : onlySearchMagazine()) {
if(((Magazine)(b)).getYear() == year) {
yearList.add(b);
}
}
return yearList;
}
@Override
public ArrayList<Book> searchBookByPublisher(String publisher) {
ArrayList<Book> publishList = new ArrayList<>();
for(Book b : list) {
if(b.getPublisher().contains(publisher)) {
publishList.add(b);
}
}
return publishList;
}
@Override
public ArrayList<Book> searchBookByPrice(int price) {
ArrayList<Book> priceList = new ArrayList<>();
for(Book b : list) {
if(b.getPrice() < price) {
priceList.add(b);
}
}
return priceList;
}
@Override
public int getTotalPrice() {
int sum = 0;
for(int i = 0; i < list.size(); i++) {
sum += list.get(i).getPrice();
}
return sum;
}
@Override
public int getAvgPrice() {
return getTotalPrice() / list.size();
}
}
LibraryRun Class
package com.kh.library.run;
import java.util.ArrayList;
import java.util.Scanner;
import com.kh.library.controller.BookController;
import com.kh.library.model.vo.Book;
import com.kh.library.model.vo.Magazine;
public class LibraryRun {
public static void main(String[] args) {// 소장책 DB
ArrayList<Book> bList = new ArrayList<>();
/* 생성 DB
bList.add(new Book("100", "잃어버린 민준이를 찾아서", "저자 고서준", "도윤 출판사", 8500, "『예준스』, 『르 몽드』 선정 20세기 최고의 책"));
bList.add(new Book("101", "시우의 자서전", "하준이가 옮김", "빛나는 주원출판사", 8500, "영화배우 민지호가 추천한 젊음에 바치는 영혼의 자서전"));
bList.add(new Magazine("102", "박지후 과학동아", "편집부 박준우 선생", "준서 사이언스", 8500, "건우의 유튜브에 소개된 과학만화 잡지", 2023,3));
bList.add(new Book("103", "도현이의 코딩스쿨", "코딩천재 윤현우", "지훈이네 동네", 9900, "제 13회 우진이가 주는 문학상 수상작"));
bList.add(new Magazine("104", "선우와 서진이의 여행일기", "서울대 이유준 교수", "연우21", 3800, "영화감독 이원종pd가 집필한 영화 전문 잡지", 2023, 4));
bList.add(new Magazine("105", "민재의 OOTD", "인플루언서 장현준", "은우네 책방", 12000, "핫가이 조정우의 샤라웃을 받은 잡지", 2022,11));
bList.add(new Book("106", "조시윤의 미라클모닝", "샤이걸 승우찡", "승현 출판사", 6300, "준혁이도 2번이나 성공한 미라클모닝"));
bList.add(new Book("107", "지환이의 백만가지 요리레시피", "제주도에서 온 윤우", "우리반 출판사", 6300, "제주에서 밥해먹고 사는 일상"));
*/
bList.add(new Book("100", "잃어버린 민준이를 찾아서", "저자 고서준", "도윤 출판사", 8500, "『예준스』, 『르 몽드』 선정 20세기 최고의 책"));
bList.add(new Book("101", "시우의 자서전", "하준이가 옮김", "빛나는 주원출판사", 8500, "영화배우 민지호가 추천한 젊음에 바치는 영혼의 자서전"));
bList.add(new Magazine("102", "박지후 과학동아", "편집부 박준우 선생", "준서 사이언스", 8500, "건우의 유튜브에 소개된 과학만화 잡지", 2023,3));
bList.add(new Book("103", "도현이의 코딩스쿨", "코딩천재 윤현우", "지훈이네 동네", 9900, "제 13회 우진이가 주는 문학상 수상작"));
bList.add(new Magazine("104", "선우와 서진이의 여행일기", "서울대 이유준 교수", "연우21", 3800, "영화감독 이원종pd가 집필한 영화 전문 잡지", 2023, 4));
bList.add(new Magazine("105", "민재의 OOTD", "인플루언서 장현준", "은우네 책방", 12000, "핫가이 조정우의 샤라웃을 받은 잡지", 2022,11));
bList.add(new Book("106", "조시윤의 미라클모닝", "샤이걸 승우찡", "승현 출판사", 6300, "준혁이도 2번이나 성공한 미라클모닝"));
bList.add(new Book("107", "지환이의 백만가지 요리레시피", "제주도에서 온 윤우", "우리반 출판사", 6300, "제주에서 밥해먹고 사는 일상"));
printBooks(bList);
}
public static void printBooks(ArrayList<Book> bs) {
// 여기서 메뉴열고 구현 시작
BookController bc = new BookController();
/*
for(int i = 0 ; i < bs.size(); i++) {
System.out.println(bs.get(i));
bc.addBook(bs.get(i));
}
System.out.println("-------------------------------");
*/
for(Book allbs : bs) {
System.out.println(allbs);
bc.addBook(allbs);
}
boolean flag = true; // 메뉴 스위치
while (flag == true) { // 메뉴 스위치가 켜져있는 동안 무한반복
System.out.println("===============================");
System.out.println("KH 우리반전용 도서관 관리 페이지입니다.");
System.out.println("1. 조회하기");
System.out.println("2. 추가하기");
System.out.println("3. 책 찾기");
System.out.println("4. 전체책 가격 합계 및 평균 조회");
System.out.println("5. 프로그램 종료");
System.out.println("===============================");
Scanner sc = new Scanner(System.in);
System.out.print("메뉴번호를 입력해주세요 : ");
int menu = sc.nextInt(); // 메뉴 번호 입력
sc.nextLine();
switch (menu) {
case 1: // 1. 조회하기
System.out.println("===============================");
System.out.println("어떤 방법으로 책을 조회하겠습니까?");
System.out.println("1. 도서관 전체 소장책 조회하기");
System.out.println("2. 일반도서만 조회하기(잡지 제외)");
System.out.println("3. 잡지만 조회하기(일반도서 제외)");
System.out.println("4. 이전으로");
System.out.println("===============================");
System.out.print("메뉴번호를 입력해주세요 : ");
int search = sc.nextInt();
if (search == 1) {
ArrayList<Book> selectBook = bc.getAllBook();
for(Book b : selectBook) {
System.out.println(b);
}
}
else if (search == 2) {
ArrayList<Book> bookList = bc.onlySearchBook();
for(Book b : bookList) {
System.out.println(b);
}
}
else if (search == 3) {
ArrayList<Book> magazineList = bc.onlySearchMagazine();
for(Book b : magazineList) {
System.out.println(b);
}
}
else if (search == 4) {
// 이전으로 가야함
flag = true;
;
}
break;
case 2: // 2. 추가하기
System.out.print("bNo을 입력하세요 : ");
String bNo = sc.nextLine();
System.out.print("책 제목을 입력하세요 : ");
String title = sc.nextLine();
System.out.print("작가를 입력하세요 : ");
String author = sc.nextLine();
System.out.print("출판사를 입력하세요 : ");
String publisher = sc.nextLine();
System.out.print("가격을 입력하세요 : ");
int price = sc.nextInt();
sc.nextLine();
System.out.print("간단한 설명을 입력하세요 : ");
String description = sc.nextLine();
System.out.print("일반도서이면 true, 잡지이면 false를 입력하세요 : ");
Boolean bkOrMaga = sc.nextBoolean();
System.out.println("===============================================");
Book tmpBook = null;
if (bkOrMaga.equals(true)) {
tmpBook = new Book(bNo, title, author, publisher, price, description);
} else if (bkOrMaga.equals(false)) {
System.out.print("출간연도를 입력하세요 : ");
int year = sc.nextInt();
System.out.print("출간월을 입력하세요 : ");
int month = sc.nextInt();
tmpBook = new Magazine(bNo, title, author, publisher, price, description, year, month);
}
boolean duplication = false;
for(Book b : bc.list) {
if(b.getbNo().equals(tmpBook.getbNo())) {
duplication = true;
}
}
// for(int i = 0 ; i < bc.list.size(); i++) {
//
// if(bc.list.get(i).getbNo().equals(tmpBook.getbNo())) {
// duplication = true;
//
// }
// }
if(duplication == false) {
bc.addBook(tmpBook);
System.out.println("성공적으로 일반도서가 추가되었습니다!");
}else {
System.out.println("해당 도서는 이미 소장하고 있는 책입니다.");
}
break;
case 3:// 3. 책 찾기
System.out.println("===============================");
System.out.println("어떤 방법으로 책을 찾겠습니까?");
System.out.println("1. bNo으로 책 찾기");
System.out.println("2. 책 제목으로 책 찾기");
System.out.println("3. 출간연도로 잡지 찾기");
System.out.println("4. 출판사로 책 찾기");
System.out.println("5. 특정 가격 밑으로 책 찾기");
System.out.println("6. 이전으로");
System.out.println("===============================");
System.out.print("메뉴번호를 입력해주세요 : ");
search = sc.nextInt();
sc.nextLine();
if (search == 1) { // bNo으로 책 찾기
System.out.print("bNo을 입력하세요 : ");
bNo = sc.nextLine();
Book b = bc.searchBookBybNo(bNo);
if(b == null) {
System.out.println("존재하지 않는 책입니다.");
}else {
System.out.println(b);
}
} else if (search == 2) { // 책 제목으로 책 찾기
System.out.print("책 제목을 입력하세요 : ");
title = sc.nextLine();
ArrayList<Book> TitleList = bc.searchBookByTitle(title);
if(TitleList.isEmpty()) {
System.out.println("존재하지 않는 책입니다.");
}else {
for(Book b : TitleList) {
System.out.println(b);
}
}
} else if (search == 3) { // 출간연도로 잡지 찾기
System.out.print("출간연도를 입력하세요 : (올해 --> 2022) : ");
int year = sc.nextInt();
ArrayList<Book> yearList = bc.magazineOfThisYearInfo(year);
if(yearList.isEmpty()) {
System.out.println("존재하지 않는 책입니다.");
}else {
for(Book b : yearList) {
System.out.println(b);
}
}
} else if (search == 4) { // 4. 출판사로 책 찾기
System.out.print("출판사를 입력하세요 : ");
publisher = sc.nextLine();
ArrayList<Book> publishList = bc.searchBookByPublisher(publisher);
if(publishList.isEmpty()) {
System.out.println("존재하지 않는 책입니다.");
}else {
for(Book b : publishList) {
System.out.println(b);
}
}
} else if (search == 5) { // 5. 특정 가격 밑으로 책 찾기
System.out.print("가격을 입력하세요 : ");
price = sc.nextInt();
sc.nextLine();
ArrayList<Book> priceList = bc.searchBookByPrice(price);
if(priceList.isEmpty()) {
System.out.println("존재하지 않는 책입니다.");
}else {
for(Book b : priceList) {
System.out.println(b);
}
}
} else if (search == 6)
flag = true; // 6. 이전으로
else
System.out.println("잘못 입력하셨습니다.");
break;
case 4:// 4. 전체책 가격 합계 및 평균 조회
System.out.println("전체책 가격 합계 : " + bc.getTotalPrice());
System.out.println("전체책 가격 평균 : " + bc.getAvgPrice());
break;
case 5:
System.out.println("프로그램을 종료합니다");
return;
default:
break;
}
}
}
}
실행 결과