Menu
Coddy logo textTech

대출 시스템

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

challenge icon

챌린지

쉬움

Library 클래스가 도서와 사용자의 컬렉션을 관리하는 적절한 대출 시스템을 만들어 Library Management System 구축을 계속해 봅시다. 이제 시스템이 실제 도서관처럼 느껴지기 시작합니다. 누가 무엇을 가지고 있는지 추적하고 대출 규칙을 적용하기 때문입니다!

코드를 네 개의 파일로 구성합니다:

  • Book.java: 이전 challenge의 Book 클래스를 모든 기능과 함께 유지합니다: isbn, title, author, isAvailable, borrowedBy, getDetails(), 그리고 적절한 getter/setter.
  • User.java: id, name, borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount(), toString()을 포함한 User 클래스를 유지합니다.
  • Library.java: 모든 것을 관리하는 중심 Library 클래스를 Create합니다. Library는 두 개의 ArrayList를 유지해야 합니다. 하나는 Book 객체용이고, 다른 하나는 User 객체용입니다. 다음 메서드를 포함하세요:

    addBook(Book book) - 도서를 Library의 collection에 adds.

    registerUser(User user) - 사용자를 Library의 등록된 사용자 목록에 adds.

    findBookByIsbn(String isbn) - 도서 목록을 검색하여 일치하는 ISBN의 Book을 반환하며, found되지 않으면 null을 반환합니다.

    findUserById(String id) - 사용자 목록을 검색하여 일치하는 ID의 User를 반환하며, found되지 않으면 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: Library 시스템을 하나로 결합합니다! 두 권의 도서(각각 ISBN, title, author), 한 명의 사용자(ID, name), 그리고 일련의 작업을 입력으로 받습니다.

    Library를 Create하고 두 도서를 모두 add한 다음 사용자를 등록합니다. 그런 다음 작업을 처리합니다. 각 작업이 borrow:userId:isbn 또는 return:userId:isbn 형식으로 작성된 쉼표로 구분된 문자열을 받습니다.

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

입력은 다음 순서로 받습니다: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, 사용자 ID, 사용자 name, 마지막으로 operations 문자열입니다.

예를 들어 입력이 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

이 challenge에서는 composition, encapsulation, method design을 결합하여 일관된 시스템을 만듭니다. Library 클래스는 coordinator 역할을 하며, 전체 collection을 관리하는 동시에 실제 borrowing logic을 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]" 형식으로 출력
    }
}

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

직접 연습해 보세요: 온라인 Java 컴파일러