Menu
Coddy logo textTech

Suchfunktionalität

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

challenge icon

Aufgabe

Einfach

Erweitern wir dein Bibliotheksverwaltungssystem um leistungsstarke Suchfunktionen! Eine Bibliothek ist nicht besonders nützlich, wenn Benutzer die gesuchten Bücher nicht finden können. Du wirst Methoden zur Suche nach Titel und Autor hinzufügen und deine Bibliothek dadurch wirklich funktional machen.

Du wirst deinen vorhandenen Code über vier Dateien hinweg weiter ausbauen:

  • Book.java: Behalte deine Book-Klasse mit allen bestehenden Funktionen bei: isbn, title, author, isAvailable, borrowedBy, getDetails() sowie den entsprechenden Gettern/Settern. Stelle sicher, dass du Getter-Methoden für title und author hast, falls du sie noch nicht hinzugefügt hast.
  • User.java: Behalte deine User-Klasse unverändert bei, mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString().
  • Library.java: Erweitere deine Library-Klasse um Suchfunktionen. Behalte alle vorhandenen Methoden (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) bei und füge 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 (ohne Beachtung der Groß- und Kleinschreibung). Verwende 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 (ohne Beachtung der 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: Führe dein Suchsystem vor! Du erhältst Eingaben für drei Bücher (ISBN, Titel, Autor für jedes Buch), anschließend für einen Benutzer (ID, Name), gefolgt von einem Ausleihvorgang und zwei Suchanfragen.

    Erstelle eine Library, füge alle drei Bücher hinzu und registriere den Benutzer. Verarbeite den Ausleihvorgang (formatiert als userId:isbn). Führe anschließend die beiden Suchen durch: Die erste Eingabe ist ein Titel-Schlüsselwort, die zweite ein Autoren-Schlüsselwort.

    Gib die Ergebnisse in dieser Reihenfolge aus:

    • Gib nach dem Ausleihen die Bestätigung des Ausleihvorgangs aus
    • Gib Title search '[keyword]': aus, gefolgt von den Details jedes passenden Buchs in separaten Zeilen (mit getDetails()). Wenn es keine Treffer gibt, gib No books found aus
    • Gib Author search '[keyword]': aus, gefolgt von den Details jedes passenden Buchs. Wenn es keine Treffer gibt, gib No books found aus
    • Gib Available books: aus, gefolgt von den Details jedes verfügbaren Buchs

Du erhältst die Eingaben in dieser Reihenfolge: book1 ISBN, book1 Titel, book1 Autor, book2 ISBN, book2 Titel, book2 Autor, book3 ISBN, book3 Titel, book3 Autor, Benutzer-ID, Benutzername, Ausleihvorgang, Titel-Suchschlüsselwort, Autoren-Suchschlüsselwort.

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ürde deine Ausgabe beispielsweise so aussehen:

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

Beachte, wie die Suchmethoden eine Suche ohne Beachtung der Groß- und 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 deine 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();
        
        // Suchschlüsselwörter lesen
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Book-Objekte erstellen
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // User-Objekt erstellen
        User user = new User(userId, userName);
        
        // Library erstellen und Bücher und 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
        // Print "Title search '[titleKeyword]':"
        // library.searchByTitle(titleKeyword) verwenden
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Author search
        // Print "Author search '[authorKeyword]':"
        // Verwende library.searchByAuthor(authorKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Available books
        // Print "Available books:"
        // Use library.getAvailableBooks()
        // Gib getDetails() jedes Buches aus
    }
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler