貸出システム
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 79/87。
チャレンジ
簡単本のコレクションとユーザーを管理する 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]」の形式で出力する
}
}オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造