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 class を作成します。library では2つの ArrayLists を保持します。1つは Book オブジェクト用、もう1つは User オブジェクト用です。次のメソッドを含めてください。

    addBook(Book book) - library のコレクションに書籍を追加します。

    registerUser(User user) - library に登録されているユーザーにユーザーを追加します。

    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:library システムをまとめます。2冊の書籍(それぞれ ISBN、title、author)、1人のユーザー(ID、name)、そして一連の操作を入力として受け取ります。

    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、最後に operations string です。

たとえば、入力が ISBN-001Clean CodeRobert MartinISBN-002Design PatternsGang of FourU001Alice、および 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、method design を組み合わせて、まとまりのあるシステムを作成します。Library class は coordinator として機能し、全体のコレクションを管理しながら、実際の貸出ロジックを User class と Book class に委任します。

自分で試してみよう

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オンラインコンパイラ