Menu
Coddy logo textTech

貸出システム

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 79/87。

challenge icon

チャレンジ

簡単

本のコレクションとユーザーを管理する Library クラスを使用して、適切な貸出システムを作成し、図書館管理システムの構築を続けましょう。ここから、誰が何を所有しているかを追跡し、貸出ルールを適用するという、システムが本物の図書館らしく感じられるようになります!

コードは4つのファイルに分けて構成します:

  • 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 オブジェクト用の2つの 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: 図書館システムをまとめましょう!2冊の本(それぞれ ISBN、タイトル、著者)、1人のユーザー(ID、名前)、そして一連の操作の入力を受け取ります。

    Library を作成し、両方の本を追加し、ユーザーを登録します。次に、操作を処理します。操作は borrow:userId:isbn または return:userId:isbn の形式で、カンマ区切りの文字列として受け取ります。

    すべての操作を処理した後、各本のステータスを [isbn]: [Available/Borrowed] の形式で示すサマリーを出力します。

入力は、book1 ISBN、book1 title、book1 author、book2 ISBN、book2 title、book2 author、user ID、user name、そして最後に操作文字列の順で受け取ります。

例えば、入力が 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

このチャレンジでは、コンポジション、カプセル化、およびメソッド設計を組み合わせて、まとまりのあるシステムを作成します。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]」の形式で出力する
    }
}

オブジェクト指向プログラミングのすべてのレッスン