Menu
Coddy logo textTech

대출 시스템

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 79번째.

challenge icon

챌린지

쉬움

도서 컬렉션과 사용자를 관리하는 Library 클래스를 사용하여 적절한 대출 시스템을 구축함으로써 도서 관리 시스템을 계속 만들어 봅시다. 이것은 누가 무엇을 가지고 있는지 추적하고 대출 규칙을 시행하는, 실제 도서관과 같은 시스템의 시작입니다!

코드는 네 개의 파일로 구성됩니다:

  • Book.java: 이전 챌린지의 Book 클래스를 그대로 유지하며 모든 기능(isbn, title, author, isAvailable, borrowedBy, getDetails() 및 적절한 getter/setter)을 포함합니다.
  • User.java: id, name, borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() 및 toString()을 포함하는 User 클래스를 유지합니다.
  • Library.java: 모든 것을 관리하는 중심 Library 클래스를 생성합니다. 도서관은 Book 객체용과 User 객체용의 두 가지 ArrayList를 유지해야 합니다. 다음 메서드들을 포함하세요:

    addBook(Book book) - 도서관 컬렉션에 책을 추가합니다.

    registerUser(User user) - 도서관의 등록된 사용자 목록에 사용자를 추가합니다.

    findBookByIsbn(String isbn) - 도서 목록을 검색하여 일치하는 ISBN을 가진 Book을 반환하거나, 찾지 못한 경우 null을 반환합니다.

    findUserById(String id) - 사용자 목록을 검색하여 일치하는 ID를 가진 User를 반환하거나, 찾지 못한 경우 null을 반환합니다.

    borrowBook(String userId, String isbn) - 사용자와 도서를 찾은 후, 둘 다 존재하고 도서가 대출 가능한 상태라면 사용자가 도서를 대출하게 하고 [userName] borrowed [bookTitle]를 출력합니다. 도서가 대출 가능하지 않다면 Book not available를 출력합니다. 사용자나 도서를 찾을 수 없다면 Invalid user or book를 출력합니다.

    returnBook(String userId, String isbn) - 사용자와 도서를 찾은 후, 사용자가 도서를 반납하게 하고 [userName] returned [bookTitle]를 출력합니다. 사용자나 도서를 찾을 수 없다면 Invalid user or book를 출력합니다.

  • Main.java: 도서관 시스템을 하나로 합칩니다! 두 권의 도서 정보(각각 ISBN, 제목, 저자), 한 명의 사용자 정보(ID, 이름), 그리고 일련의 작업들을 입력받습니다.

    Library를 생성하고, 두 권의 도서를 추가하고, 사용자를 등록합니다. 그런 다음 작업을 처리합니다. 각 작업이 borrow:userId:isbn 또는 return:userId:isbn 형식으로 된 쉼표로 구분된 문자열을 받게 됩니다.

    모든 작업을 처리한 후, 각 도서의 상태를 [isbn]: [Available/Borrowed] 형식으로 보여주는 요약을 출력합니다.

입력은 book1 ISBN, book1 제목, book1 저자, book2 ISBN, book2 제목, book2 저자, 사용자 ID, 사용자 이름, 그리고 마지막으로 작업 문자열 순서로 받게 됩니다.

예를 들어, 입력값이 ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice, 그리고 borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001인 경우, 출력은 다음과 같습니다:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

이 챌린지는 구성(composition), 캡슐화(encapsulation) 및 메서드 설계를 결합하여 응집력 있는 시스템을 만듭니다. Library 클래스는 코디네이터 역할을 하여 전체 컬렉션을 관리하면서 실제 대출 로직을 User 및 Book 클래스에 위임합니다!

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 도서 1 정보 읽기
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // 도서 2 정보 읽기
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // 사용자 정보 읽기
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // 작업 문자열 읽기 (쉼표로 구분됨, 형식: borrow:userId:isbn 또는 return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: book1과 book2에 대한 Book 객체 생성
        
        // TODO: User 객체 생성
        
        // TODO: Library를 생성하고, 두 도서를 추가한 후 사용자를 등록
        
        // TODO: operationsStr을 ","로 분리하고 각 작업을 처리
        //       각 작업에 대해 ":"로 분리하여 action, userId, isbn을 가져옴
        //       상황에 맞게 library.borrowBook() 또는 library.returnBook() 호출
        
        // TODO: 각 도서에 대해 "[isbn]: [Available/Borrowed]" 형식으로 요약 출력
    }
}

객체 지향 프로그래밍의 모든 레슨