Menu
Coddy logo textTech

BookクラスとUserクラス

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

challenge icon

チャレンジ

簡単

前回のレッスンで作成した Book クラスと User クラスを拡張して、図書館管理システムの構築を続けましょう。今回は、ユーザーが本を借りる機能を追加し、これら2つのエンティティ間に実際のつながりを作成します。

コードは以下の3つのファイルに整理します:

  • Book.java: 前回のチャレンジで作成した Book クラスを強化します。既存のすべての機能(isbn、title、author、ゲッター/セッター付きの isAvailable、および getDetails())を保持してください。新たに、本を借りたユーザーのIDを格納する String 型のプライベートフィールド borrowedBy を追加します(借りられていない場合は null)。borrowedBy のゲッターと、isAvailable も適切に更新するセッターを追加してください。本が借りられたとき(borrowedBy に null 以外の値がセットされたとき)は利用不可になり、返却されたとき(null がセットされたとき)は再び利用可能になります。
  • User.java: 借りた本を追跡できるように User クラスを拡張します。既存の id、name、コンストラクタ、ゲッター、および toString() を保持してください。borrowedBooks という名前のプライベートな ArrayList<Book> フィールドを追加します(コンストラクタで初期化してください)。本をユーザーのリストに追加し、その本の borrowedBy をこのユーザーの ID に設定する borrowBook(Book book) メソッドを作成します。リストから本を削除し、borrowedBy を null に設定する returnBook(Book book) メソッドを作成します。ユーザーが現在何冊の本を持っているかを返す getBorrowedCount() メソッドを追加します。
  • Main.java: 貸出システムの動作を実演します。ISBN、タイトル、本の著者、次にユーザーIDと名前の5つの入力を受け取ります。

    これらの入力を使用して Book と User を作成します。本の詳細と利用可能ステータスを出力してください。次に、ユーザーに本を借りさせます。本の利用可能性を再度出力し、続いて Borrowed by: [userId] の形式で誰が借りたかを出力します。[name] has [count] book(s) の形式でユーザーが何冊の本を持っているかを出力します。最後に、ユーザーに本を返却させ、利用可能性をもう一度出力します。

入力は、ISBN (String)、タイトル (String)、著者 (String)、ユーザー ID (String)、ユーザー名 (String) の順に5つ受け取ります。

例えば、入力が 978-0-13-468599-1Effective JavaJoshua BlochU001Alice の場合、出力は以下のようになります:

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

このチャレンジは前回の作業を直接ベースにしており、図書館システムを機能させるために不可欠な本とユーザーの間の関係を追加します。コンポジション(User が Books を「持っている」)を使用し、適切に設計されたメソッドを通じて、あるオブジェクトへの変更が別のオブジェクトにどのように影響するかを確認してください!

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 本の情報を読み込む
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // ユーザー情報を読み込む
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // isbn、タイトル、著者を使用してBookオブジェクトを作成する
        Book book = new Book(isbn, title, author);
        
        // userIdとuserNameを使用してUserオブジェクトを作成する
        User user = new User(userId, userName);
        
        // getDetails()を使用して本の詳細を表示する
        System.out.println(book.getDetails());
        
        // 本が利用可能かどうかを表示する(形式: "Available: true" または "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // ユーザーに本を借りさせる
        user.borrowBook(book);
        
        // 本の利用可能性を再度表示する
        System.out.println("Available: " + book.isAvailable());
        
        // 誰が借りたかを表示する
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // ユーザーが何冊の本を持っているかを表示する
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // ユーザーに本を返却させる
        user.returnBook(book);
        
        // 利用可能性をもう一度表示する
        System.out.println("Available: " + book.isAvailable());
    }
}

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