Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[이건우]과제 제출합니다. #1

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/Book.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class Book {
private String title;
private String author;
private String isbn;
private boolean isAvailable;
private String borrower;

public Book(String title, String author, String isbn) {
this.title = title;
this.author = author;
this.isbn = isbn;
this.isAvailable = true;
this.borrower = null;
}

public String getTitle() {
return title;
}

public String getAuthor() {
return author;
}

public String getIsbn() {
return isbn;
}

public boolean isAvailable() {
return isAvailable;
}

public String getBorrower() {
return borrower;
}

public void borrow(String borrower) {
this.isAvailable = false;
this.borrower = borrower;
}

public void returnBook() {
this.isAvailable = true;
this.borrower = null;
}
}

60 changes: 60 additions & 0 deletions src/Library.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
class Library {
private Book[] books;
private int bookCount;

public Library(int capacity) {
this.books = new Book[capacity];
this.bookCount = 0;
}

public void addBook(Book book) {
if (bookCount < books.length) {
books[bookCount++] = book;
} else {
System.out.println("도서관이 꽉 차서 책을 추가할 수 없습니다.");
}
}

public void borrowBook(String isbn, User user) {
for (int i = 0; i < bookCount; i++) {
if (books[i].getIsbn().equals(isbn) && books[i].isAvailable()) {
if (user.borrowBook(books[i])) {
books[i].borrow(user.getName());
System.out.println(user.getName() + " 대출 " + books[i].getTitle());
} else {
System.out.println(user.getName() + " 대출 한도입니다. ");
}
return;
}
}
System.out.println("도서번호 " + isbn + " 대출불가.");
}

public void returnBook(String isbn, User user) {
for (int i = 0; i < bookCount; i++) {
if (books[i].getIsbn().equals(isbn) && !books[i].isAvailable() && books[i].getBorrower().equals(user.getName())) {
books[i].returnBook();
user.returnBook(books[i]);
System.out.println(user.getName() + " 반납함 " + books[i].getTitle());
return;
}
}
System.out.println(user.getName() + " 대출하지 않음 " + isbn);
}

public void printBooks() {
System.out.println("대출가능 책:");
for (int i = 0; i < bookCount; i++) {
if (books[i].isAvailable()) {
System.out.println(books[i].getTitle() + " by " + books[i].getAuthor() + " (ISBN: " + books[i].getIsbn() + ")");
}
}
System.out.println("\n대출 불가 책:");
for (int i = 0; i < bookCount; i++) {
if (!books[i].isAvailable()) {
System.out.println(books[i].getTitle() + " by " + books[i].getAuthor() + " (ISBN: " + books[i].getIsbn() + ") - 대출한사람: " + books[i].getBorrower());
}
}
}
}

70 changes: 27 additions & 43 deletions src/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,69 +2,53 @@ public class Main {
public static void main(String[] args) {

// TODO-1 도서관 생성
// 부산소프트웨어마이스터고등학교 도서관(이하 도서관)을 생성합니다. 도서관에는 다음과 같은 책들이 있습니다.
// 자바의 정석 저자 남궁성 ISBN 9788994492032
// 객체지향의 사실과 오해 저자 조영호 ISBN 9788998139766
// 모던 자바 인 액션 저자 라울 게이브리얼 우르마 ISBN 9791162242025

Library library = new Library(10);
Book book1 = new Book("자바의 정석", "남궁성", "9788994492032");
Book book2 = new Book("객체지향의 사실과 오해", "조영호", "9788998139766");
Book book3 = new Book("모던 자바 인 액션", "라울 게이브리얼 우르마", "9791162242025");
Book book5 = new Book("서정현의 인생", "이건우", "999123999");
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
library.addBook(book5);

// TODO-2 이용자 생성
// 도서관 이용자 이밤돌을 생성합니다.

// 도서관 이용자 김이로를 생성합니다.

User user1 = new User("이밤돌");
User user2 = new User("김이로");

// TODO-3 도서 추가
// 도서관에 모던 자바 인 액션 저자 라울-게이브리얼-우르마 ISBN 9791162242025 이 한권 더 들어옵니다.

Book book4 = new Book("모던 자바 인 액션", "라울 게이브리얼 우르마", "9791162242025");
library.addBook(book4);

// TODO-4 도서 대출
// 이밤돌이 도서관에서 자바의 정석을 대출합니다.

// 이밤돌이 도서관에서 모던 자바 인 액션을 대출합니다.

// 김이로가 도서관에서 모던 자바 인 액션을 대출합니다.

library.borrowBook("9788994492032", user1); // 이밤돌이 자바의 정석 대출
library.borrowBook("9791162242025", user1); // 이밤돌이 모던 자바 인 액션 대출
library.borrowBook("9791162242025", user2); // 김이로가 모던 자바 인 액션 대출

// TODO-5 이밤돌 도서 초과 대출 시도
// 이밤돌이 도서관에서 객체지향의 사실과 오해를 대출합니다.

// 대출은 정상적으로 처리되지 않고, 최대 2권이 책까지만 대출할 수 있다는 메시지를 출력합니다.

library.borrowBook("9788998139766", user1); // 이밤돌이 객체지향의 사실과 오해 대출 시도

// TODO-6 이밤돌 도서 반납
// 이밤돌이 도서관에 자바의 정석을 반납합니다.

library.returnBook("9788994492032", user1); // 이밤돌이 자바의 정석 반납

// TODO-7 이밤돌 도서 대출
// 이밤돌이 도서관에서 객체지향의 사실과 오해를 대출합니다.

library.borrowBook("9788998139766", user1); // 이밤돌이 객체지향의 사실과 오해 대출

// TODO-8 김이로 이미 대출된 도서 대출 시도
// 김이로가 도서관에서 객체지향의 사실과 오해를 대출합니다.

// 이밤돌이 이미 대출했으므로 대출은 정상적으로 처리되지 않고, 다른 사람이 대출한 책은 대출할 수 없다는 메시지를 출력합니다.

library.borrowBook("9788998139766", user2); // 김이로가 객체지향의 사실과 오해 대출 시도

// TODO-9 이밤돌 도서 반납
// 이밤돌이 도서관에 객체지향의 사실과 오해를 반납합니다.

library.returnBook("9788998139766", user1); // 이밤돌이 객체지향의 사실과 오해 반납

// TODO-10 김이로 도서 대출
// 김이로가 도서관에서 객체지향의 사실과 오해를 대출합니다.

library.borrowBook("9788998139766", user2); // 김이로가 객체지향의 사실과 오해 대출

// TODO-11 김이로 대출하지 않은 책 반납 시도
// 김이로가 도서관에 자바의 정석 반납합니다.

// 반납은 정상적으로 처리되지 않고, 대출하지 않은 책은 반납할 수 없다는 메시지를 출력합니다.

library.returnBook("9788994492032", user2); // 김이로가 자바의 정석 반납 시도

// TODO-12 전체 조회
// 도서관에서 도서 목록을 조회합니다.

// 이밤돌이 본인이 대출한 도서를 조회합니다.

// 김이로가 본인이 대출한 도서를 조회합니다.
library.printBooks(); // 도서 목록 조회
user1.printBorrowedBooks(); // 이밤돌이 대출한 도서 조회
user2.printBorrowedBooks(); // 김이로가 대출한 도서 조회
}
}
}
40 changes: 40 additions & 0 deletions src/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
class User {
private String name;
private Book[] borrowedBooks;
private int borrowedCount;

public User(String name) {
this.name = name;
this.borrowedBooks = new Book[2]; // 2권
this.borrowedCount = 0;
}

public String getName() {
return name;
}

public boolean borrowBook(Book book) {
if (borrowedCount < 2) {
borrowedBooks[borrowedCount++] = book;
return true;
}
return false;
}

public void returnBook(Book book) {
for (int i = 0; i < borrowedCount; i++) {
if (borrowedBooks[i] == book) {
borrowedBooks[i] = borrowedBooks[--borrowedCount];
borrowedBooks[borrowedCount] = null;
return;
}
}
}

public void printBorrowedBooks() {
System.out.println(name + " 대출함:");
for (int i = 0; i < borrowedCount; i++) {
System.out.println(borrowedBooks[i].getTitle() + " by " + borrowedBooks[i].getAuthor());
}
}
}