貸出システム
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:すべてを管理する中心的なLibraryclass を作成します。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-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このチャレンジでは、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]"形式で出力する
}
}オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造自分で練習してみよう: Javaオンラインコンパイラ