Menu
Coddy logo textTech

Suchfunktionalität

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 80 von 87.

challenge icon

Aufgabe

Einfach

Lassen 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ür title und author haben, 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 eine ArrayList<Book> zurück, die alle Bücher enthält, deren Titel das Schlüsselwort enthält (unabhängig von Groß- und Kleinschreibung). Verwenden Sie toLowerCase() sowohl für den Titel als auch für das Schlüsselwort zum Vergleich.

    searchByAuthor(String keyword) - gibt eine ArrayList<Book> zurück, die alle Bücher enthält, deren Autorenname das Schlüsselwort enthält (unabhängig von Groß- und Kleinschreibung).

    getAvailableBooks() - gibt eine ArrayList<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 Sie No books found aus
    • Geben Sie Author search '[keyword]': aus, gefolgt von den Details jedes passenden Buches. Wenn keine Treffer gefunden werden, geben Sie No books found aus
    • 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 Four

Beachten 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