Suchfunktionalität
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 80 von 87.
Aufgabe
EinfachLassen Sie uns Ihr Bibliotheksverwaltungssystem mit leistungsstarken Suchfunktionen erweitern! Eine Bibliothek ist nicht sehr nützlich, wenn Benutzer die gesuchten Bücher nicht finden können. Sie werden Methoden hinzufügen, um nach Titel und Autor zu suchen, wodurch Ihre Bibliothek wirklich funktional wird.
Sie werden auf Ihrem bestehenden Code in vier Dateien weiter aufbauen:
Book.java: Behalten Sie Ihre Book-Klasse mit allen vorhandenen Funktionen bei—isbn, title, author, isAvailable, borrowedBy, getDetails() und die entsprechenden Getter/Setter. Stellen Sie sicher, dass Sie Getter-Methoden fürtitleundauthorhaben, falls Sie diese noch nicht hinzugefügt haben.User.java: Behalten Sie Ihre User-Klasse unverändert bei mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString().Library.java: Erweitern Sie Ihre Library-Klasse um Suchfunktionen. Behalten Sie alle vorhandenen Methoden bei (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) und fügen Sie diese neuen Suchmethoden hinzu:searchByTitle(String keyword)- gibt eineArrayList<Book>zurück, die alle Bücher enthält, deren Titel das Schlüsselwort enthält (unabhängig von Groß- und Kleinschreibung). Verwenden SietoLowerCase()sowohl für den Titel als auch für das Schlüsselwort zum Vergleich.searchByAuthor(String keyword)- gibt eineArrayList<Book>zurück, die alle Bücher enthält, deren Autorenname das Schlüsselwort enthält (unabhängig von Groß- und Kleinschreibung).getAvailableBooks()- gibt eineArrayList<Book>zurück, die nur die Bücher enthält, die derzeit zum Ausleihen verfügbar sind.Main.java: Demonstrieren Sie Ihr Suchsystem! Sie erhalten Eingaben für drei Bücher (jeweils ISBN, Titel, Autor), dann einen Benutzer (ID, Name), gefolgt von einem Ausleihvorgang und zwei Suchanfragen.Erstellen Sie eine Library, fügen Sie alle drei Bücher hinzu und registrieren Sie den Benutzer. Verarbeiten Sie den Ausleihvorgang (formatiert als
userId:isbn). Führen Sie dann die beiden Suchvorgänge durch – die erste Eingabe ist ein Titel-Schlüsselwort, die zweite ein Autoren-Schlüsselwort.Geben Sie die Ergebnisse in dieser Reihenfolge aus:
- Geben Sie nach dem Ausleihen die Ausleihbestätigung aus
- Geben Sie
Title search '[keyword]':aus, gefolgt von den Details jedes passenden Buches in separaten Zeilen (unter Verwendung von getDetails()). Wenn keine Treffer gefunden werden, geben SieNo books foundaus - Geben Sie
Author search '[keyword]':aus, gefolgt von den Details jedes passenden Buches. Wenn keine Treffer gefunden werden, geben SieNo books foundaus - Geben Sie
Available books:aus, gefolgt von den Details jedes verfügbaren Buches
Sie erhalten die Eingaben in dieser Reihenfolge: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, user ID, user name, Ausleihvorgang, Titel-Suchschlüsselwort, Autoren-Suchschlüsselwort.
Zum Beispiel, bei den Eingaben 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, wäre Ihre Ausgabe:
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 FourBeachten Sie, wie die Suchmethoden den Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung verwenden – die Suche nach "clean" findet sowohl "Clean Code" als auch "The Clean Coder". Die Liste der verfügbaren Bücher schließt das ausgeliehene Buch korrekt aus. Diese Suchfunktionen verwandeln Ihre Bibliothek von einer einfachen Sammlung in ein wirklich nutzbares System!
Probier es selbst
import java.util.Scanner;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Informationen zu Buch 1 lesen
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Informationen zu Buch 2 lesen
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// Informationen zu Buch 3 lesen
String isbn3 = scanner.nextLine();
String title3 = scanner.nextLine();
String author3 = scanner.nextLine();
// Benutzerinformationen lesen
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Ausleihvorgang lesen
String borrowOp = scanner.nextLine();
// Suchbegriffe lesen
String titleKeyword = scanner.nextLine();
String authorKeyword = scanner.nextLine();
// Buch-Objekte erstellen
Book book1 = new Book(isbn1, title1, author1);
Book book2 = new Book(isbn2, title2, author2);
Book book3 = new Book(isbn3, title3, author3);
// Benutzer-Objekt erstellen
User user = new User(userId, userName);
// Bibliothek erstellen und Bücher sowie Benutzer hinzufügen
Library library = new Library();
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
library.registerUser(user);
// Ausleihvorgang verarbeiten
String[] parts = borrowOp.split(":");
String opUserId = parts[0];
String opIsbn = parts[1];
library.borrowBook(opUserId, opIsbn);
// TODO: Titelsuche
// "Title search '[titleKeyword]':" ausgeben
// library.searchByTitle(titleKeyword) verwenden
// getDetails() für jedes Buch ausgeben, oder "No books found", falls leer
// TODO: Autorensuche
// "Author search '[authorKeyword]':" ausgeben
// library.searchByAuthor(authorKeyword) verwenden
// getDetails() für jedes Buch ausgeben, oder "No books found", falls leer
// TODO: Verfügbare Bücher
// "Available books:" ausgeben
// library.getAvailableBooks() verwenden
// getDetails() für jedes Buch ausgeben
}
}Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren10Ausnahmebehandlung in OOP
Exception-KlassenhierarchieBenutzerdefinierte ExceptionsChecked vs. Unchecked ErrorsTry-With-Resources-PatternRecap – Validierter Benutzer13Projekt: Bibliotheksverwaltung
Projektübersicht & UML-DesignBuch- und Benutzerklassen2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem