検索機能
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 80/87。
チャレンジ
簡単強力な検索機能を備えた図書館管理システムをさらに強化しましょう!ユーザーが探している本を見つけられなければ、図書館はあまり役に立ちません。タイトルと著者で検索するメソッドを追加して、図書館を真に機能的なものにします。
4つのファイルにわたる既存のコードを引き続き構築していきます:
Book.java: isbn、title、author、isAvailable、borrowedBy、getDetails()、および適切なゲッター/セッターを含む、既存のすべての機能を備えた Book クラスを保持します。まだ追加していない場合は、titleとauthorのゲッターメソッドがあることを確認してください。User.java: id、name、borrowedBooks ArrayList、borrowBook()、returnBook()、getBorrowedCount()、および toString() を含む User クラスをそのまま保持します。Library.java: 検索機能を使用して Library クラスを拡張します。既存のすべてのメソッド(addBook、registerUser、findBookByIsbn、findUserById、borrowBook、returnBook)を保持し、以下の新しい検索メソッドを追加します。searchByTitle(String keyword)- タイトルにキーワードが含まれるすべての本を含むArrayList<Book>を返します(大文字と小文字を区別しません)。比較には、タイトルとキーワードの両方でtoLowerCase()を使用してください。searchByAuthor(String keyword)- 著者名にキーワードが含まれるすべての本を含むArrayList<Book>を返します(大文字と小文字を区別しません)。getAvailableBooks()- 現在貸出可能な本のみを含むArrayList<Book>を返します。Main.java: 検索システムを実演しましょう!3冊の本(それぞれのISBN、タイトル、著者)、次にユーザー(ID、名前)、続いて貸出操作と2つの検索クエリの入力を受け取ります。Library を作成し、3冊すべての本を追加し、ユーザーを登録します。貸出操作(
userId:isbnの形式)を処理します。次に、2つの検索を実行します。最初の入力はタイトルのキーワード、2番目は著者のキーワードです。結果を次の順序で出力します:
- 貸出後、貸出確認メッセージを出力します。
Title search '[keyword]':を出力し、続いて一致する各本の詳細を個別の行に出力します(getDetails() を使用)。一致するものがない場合は、No books foundと出力します。Author search '[keyword]':を出力し、続いて一致する各本の詳細を出力します。一致するものがない場合は、No books foundと出力します。Available books:を出力し、続いて利用可能な各本の詳細を出力します。
入力は次の順序で受け取ります:book1 ISBN、book1 title、book1 author、book2 ISBN、book2 title、book2 author、book3 ISBN、book3 title、book3 author、user ID、user name、貸出操作、タイトル検索キーワード、著者検索キーワード。
例えば、入力が ISBN-001, Clean Code, Robert Martin, ISBN-002, The Clean Coder, Robert Martin, ISBN-003, Design Patterns, Gang of Four, U001, Alice, U001:ISBN-001, clean, martin の場合、出力は次のようになります:
Alice borrowed Clean Code
Title search 'clean':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Author search 'martin':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Available books:
[ISBN-002] The Clean Coder by Robert Martin
[ISBN-003] Design Patterns by Gang of Four検索メソッドが大文字と小文字を区別しないマッチングを使用していることに注目してください。"clean" で検索すると、"Clean Code" と "The Clean Coder" の両方が見つかります。利用可能な本のリストは、貸出中の本を正しく除外しています。これらの検索機能により、あなたの図書館は単なるコレクションから、真に使いやすいシステムへと生まれ変わります!
自分で試してみよう
import java.util.Scanner;
import java.util.ArrayList;
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();
// 本3の情報を読み込む
String isbn3 = scanner.nextLine();
String title3 = scanner.nextLine();
String author3 = scanner.nextLine();
// ユーザー情報を読み込む
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// 貸出操作を読み込む
String borrowOp = scanner.nextLine();
// 検索キーワードを読み込む
String titleKeyword = scanner.nextLine();
String authorKeyword = scanner.nextLine();
// Bookオブジェクトを作成する
Book book1 = new Book(isbn1, title1, author1);
Book book2 = new Book(isbn2, title2, author2);
Book book3 = new Book(isbn3, title3, author3);
// Userオブジェクトを作成する
User user = new User(userId, userName);
// Libraryを作成し、本とユーザーを追加する
Library library = new Library();
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
library.registerUser(user);
// 貸出操作を処理する
String[] parts = borrowOp.split(":");
String opUserId = parts[0];
String opIsbn = parts[1];
library.borrowBook(opUserId, opIsbn);
// TODO: タイトル検索
// "Title search '[titleKeyword]':" を出力する
// library.searchByTitle(titleKeyword) を使用する
// 各本の getDetails() を出力する。空の場合は "No books found" を出力する
// TODO: 著者検索
// "Author search '[authorKeyword]':" を出力する
// library.searchByAuthor(authorKeyword) を使用する
// 各本の getDetails() を出力する。空の場合は "No books found" を出力する
// TODO: 利用可能な本
// "Available books:" を出力する
// library.getAvailableBooks() を使用する
// 各本の getDetails() を出力する
}
}オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造