diff --git a/src/Book.java b/src/Book.java new file mode 100644 index 0000000..d6dcce6 --- /dev/null +++ b/src/Book.java @@ -0,0 +1,66 @@ + +public class Book { + private String bookname; + private String author; + private String isbn; + private int total_books; + private int availablebooks; + + //책의 속성을 입력하기 위한 코드 + public void setBook(String bookname, String author, String isbn, int total_Books,boolean loan) { + this.bookname = bookname; + this.author = author; + this.isbn = isbn; + this.total_books = total_Books; + this.availablebooks = total_Books; + } + + //책 이름 반환 + public String getBookname() { + return bookname; + } + + //책 저자 반환 + public String getAuthor() { + return author; + } + + //책 ISBN번호 반환 + public String getIsbn() { + return isbn; + } + + //책 전체 갯수 반환 + public int getTotal_books() { + return total_books; + } + + //대출 가능한 책 수 반환 + public int getAvailablebooks() { + return availablebooks; + } + + //책 갯수 추가 + public void addBook(int count) { + this.total_books += count; + this.availablebooks += count; + } + + //책 대출, 대출이 된다면 대출 가능한 책 수가 1씩 빠진다. + public boolean borrowBook() { + if(availablebooks > 0) { + availablebooks--; + return true; + } + return false; + } + + //책 반납, 반납이 되면 대출 가능한 책 수가 1씩 더해진다 + public boolean returnBook() { + if(availablebooks < total_books) { + availablebooks++; + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/Library.java b/src/Library.java new file mode 100644 index 0000000..89382e8 --- /dev/null +++ b/src/Library.java @@ -0,0 +1,105 @@ +public class Library { + private String libraryName; + private Book book1; + private Book book2; + private Book book3; + + private User bamdol; + private User iro; + + public void setUsers(User bamdol, User iro) { + this.bamdol = bamdol; + this.iro = iro; + } + + //도서관 제목을 받음 + public Library(String libraryName) { + this.libraryName = libraryName; + } + + //첫번째 책의 속성을 입력 + public void addBook1() { + this.book1 = new Book(); + this.book1.setBook("자바의 정석","남궁성","9788994492032",1,true); + } + + //두번째 책의 속성을 입력 + public void addBook2() { + this.book2 = new Book(); + this.book2.setBook("객체지향의 사실과 오해", "조영호","9788998139766",1,true); + } + + //세번째 책의 속성을 입력 + public void addBook3() { + this.book3 = new Book(); + this.book3.setBook("모던 자바 인 액션", "라울 게이브리얼 우르마", "9791162242025",1,true); + } + + //책 제목으로 해당하는 책 찾기 + public Book findBook(String bookname) { + if(book1.getBookname() == bookname) { return book1;} + if(book2.getBookname() == bookname) { return book2;} + if(book3.getBookname() == bookname) { return book3;} + return null; + } + + //대출자의 이름을 출력하는 메소드 + public void printBorrower(String bookname) { + if(bamdol.checkBorrow(bookname)) System.out.print(bamdol.getName() + ","); + if(iro.checkBorrow(bookname)) System.out.print(iro.getName() + ","); + } + //도서관에 있는 책 모두 조회, availablebooks가 0보다 크다면 대출 가능한 책이 있으므로 대출 가능합니다를 출력 + //아니라면 대출이 불가능합니다. 라는 메세지를 출력 + public void printUnavailableBook() { + System.out.print("대출 불가능한 책 : "); + if(book1.getAvailablebooks()==0) { + System.out.print(book1.getBookname() + ","); + System.out.print(book1.getAuthor() + ","); + System.out.print(book1.getIsbn() + ","); + printBorrower("자바의 정석"); + System.out.println("대출이 불가능합니다."); + } + + if(book2.getAvailablebooks()==0) { + System.out.print(book2.getBookname() + ","); + System.out.print(book2.getAuthor() + ","); + System.out.print(book2.getIsbn() + ","); + printBorrower("객체지향의 사실과 오해"); + System.out.println("대출이 불가능합니다."); + } + + if(book3.getAvailablebooks()==0) { + System.out.print(book3.getBookname() + ","); + System.out.print(book3.getAuthor() + ","); + System.out.print(book3.getIsbn() + ","); + printBorrower("모던 자바 인 액션"); + System.out.println("대출이 불가능합니다."); + } + } + public void printavailableBook() { + System.out.print("대출 가능한 책 : "); + if(book1.getAvailablebooks() > 0) { + System.out.print(book1.getBookname() + ","); + System.out.print(book1.getAuthor() + ","); + System.out.print(book1.getIsbn() + ","); + printBorrower("자바의 정석"); + System.out.println("대출이 가능합니다."); + } + + if(book2.getAvailablebooks() > 0) { + System.out.print(book2.getBookname() + ","); + System.out.print(book2.getAuthor() + ","); + System.out.print(book2.getIsbn() + ","); + printBorrower("객체지향의 사실과 오해"); + System.out.println("대출이 가능합니다."); + } + + if(book3.getAvailablebooks() > 0) { + System.out.print(book3.getBookname() + ","); + System.out.print(book3.getAuthor() + ","); + System.out.print(book3.getIsbn() + ","); + printBorrower("모던 자바 인 액션"); + System.out.println("대출이 가능합니다."); + } + } +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index c4d8849..b71a6a3 100644 --- a/src/Main.java +++ b/src/Main.java @@ -6,65 +6,74 @@ public static void main(String[] args) { // 자바의 정석 저자 남궁성 ISBN 9788994492032 // 객체지향의 사실과 오해 저자 조영호 ISBN 9788998139766 // 모던 자바 인 액션 저자 라울 게이브리얼 우르마 ISBN 9791162242025 - - + Library library = new Library("부산소프트웨어마이스터고등학교 도서관"); + library.addBook1(); + library.addBook2(); + library.addBook3(); // TODO-2 이용자 생성 // 도서관 이용자 이밤돌을 생성합니다. - + User bamdol = new User("이밤돌"); // 도서관 이용자 김이로를 생성합니다. - - + User iro = new User("iro"); + //도서관에 이용자를 추가 + library.setUsers(bamdol, iro); // TODO-3 도서 추가 // 도서관에 모던 자바 인 액션 저자 라울-게이브리얼-우르마 ISBN 9791162242025 이 한권 더 들어옵니다. - + Book modern = library.findBook("모던 자바 인 액션"); + modern.addBook(1); // TODO-4 도서 대출 // 이밤돌이 도서관에서 자바의 정석을 대출합니다. - + bamdol.borrowBook(library.findBook("자바의 정석")); // 이밤돌이 도서관에서 모던 자바 인 액션을 대출합니다. - + bamdol.borrowBook(library.findBook("모던 자바 인 액션")); // 김이로가 도서관에서 모던 자바 인 액션을 대출합니다. + iro.borrowBook(library.findBook("모던 자바 인 액션")); // TODO-5 이밤돌 도서 초과 대출 시도 // 이밤돌이 도서관에서 객체지향의 사실과 오해를 대출합니다. - + bamdol.borrowBook(library.findBook("객체지향의 사실과 오해")); // 대출은 정상적으로 처리되지 않고, 최대 2권이 책까지만 대출할 수 있다는 메시지를 출력합니다. - + //유저 클래스에 있는 borrowBook에서 출력도 같이 됩니다. // TODO-6 이밤돌 도서 반납 // 이밤돌이 도서관에 자바의 정석을 반납합니다. - - + bamdol.returnBook(library.findBook("자바의 정석")); // TODO-7 이밤돌 도서 대출 // 이밤돌이 도서관에서 객체지향의 사실과 오해를 대출합니다. - + bamdol.borrowBook(library.findBook("객체지향의 사실과 오해")); // TODO-8 김이로 이미 대출된 도서 대출 시도 // 김이로가 도서관에서 객체지향의 사실과 오해를 대출합니다. - + iro.borrowBook(library.findBook("객체지향의 사실과 오해")); // 이밤돌이 이미 대출했으므로 대출은 정상적으로 처리되지 않고, 다른 사람이 대출한 책은 대출할 수 없다는 메시지를 출력합니다. - + //유저 클래스에 있는 borrowBook에서 출력도 같이 됩니다. // TODO-9 이밤돌 도서 반납 // 이밤돌이 도서관에 객체지향의 사실과 오해를 반납합니다. - + bamdol.returnBook(library.findBook("객체지향의 사실과 오해")); // TODO-10 김이로 도서 대출 // 김이로가 도서관에서 객체지향의 사실과 오해를 대출합니다. - + iro.borrowBook(library.findBook("객체지향의 사실과 오해")); // TODO-11 김이로 대출하지 않은 책 반납 시도 // 김이로가 도서관에 자바의 정석 반납합니다. + iro.returnBook(library.findBook("자바의 정석")); // 반납은 정상적으로 처리되지 않고, 대출하지 않은 책은 반납할 수 없다는 메시지를 출력합니다. - + //유저 클래스에 있는 returnBook에서 출력도 같이 됩니다. // TODO-12 전체 조회 // 도서관에서 도서 목록을 조회합니다. - + //대출이 불가능한 책 조회 + library.printUnavailableBook(); + //대출이 가능한 책 조회 + library.printavailableBook(); // 이밤돌이 본인이 대출한 도서를 조회합니다. - + bamdol.printBorrowBook(); // 김이로가 본인이 대출한 도서를 조회합니다. + iro.printBorrowBook(); } } \ No newline at end of file diff --git a/src/User.java b/src/User.java new file mode 100644 index 0000000..fa2980d --- /dev/null +++ b/src/User.java @@ -0,0 +1,69 @@ + +public class User { + private String name; + private Book borrow_book = null; + private Book borrow_book2 = null; + + //도서관 이용자 이름을 받음 + public User(String name) { + this.name = name; + } + + //이용자 이름을 반환 + public String getName() { + return name; + } + + //대출 여부를 판단, 빌릴 수 있으면 borrow_book이나 borrow_book2에 저장 + //책을 2개 초과로 대출하려 할 시 메세지 출력, 다른 사람이 대출 중인 책을 대출하려해도 메세지 출력 + public boolean borrowBook(Book book) { // 책 대출 + if (borrow_book != null && borrow_book2 != null) { + System.out.println("책은 최대 두 권까지만 대출할 수 있습니다."); + return false; + } + if(book.borrowBook()) { + if(borrow_book == null) borrow_book = book; + else if(borrow_book2 == null) borrow_book2 = book; + return true; + } + else { + System.out.println("다른 사람이 대출 중인 책은 대출할 수 없습니다."); + return false; + } + } + + //책 반납하는 코드 + //borrow_book,borrow_book2에 책이 있다면 null이 되고 Book 클래스에 책 반납 코드가 실행됨(반납했으므로 대출 가능한 책 수가 늘어남) + //borrow_book,borrow_book2에 없는 책을 반납하려 하면 대출하지 않은 책은 반납할 수 없습니다.라는 메세지가 출력 + public boolean returnBook(Book book) { + if (borrow_book == book) { + borrow_book = null; + book.returnBook(); + return true; + } + else if(borrow_book2 == book) { + borrow_book2 = null; + book.returnBook(); + return true; + } + else { + System.out.println("대출하지 않은 책은 반납할 수 없습니다."); + return false; + } + } + + //이용자가 대출한 책을 조회 + public void printBorrowBook() { + if (borrow_book != null) { + System.out.println(name + ":" + borrow_book.getBookname()); + } + if (borrow_book2 != null) { + System.out.println(name + ":" + borrow_book2.getBookname()); + } + } + + //대출 여부 확인 + public boolean checkBorrow(String bookname) { + return (borrow_book != null && borrow_book.getBookname().equals(bookname)) || (borrow_book2 != null && borrow_book2.getBookname().equals(bookname)); + } +} \ No newline at end of file