Menu
Coddy logo textTech

Testen und Integration

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

challenge icon

Aufgabe

Einfach

Herzlichen Glückwunsch zum Aufbau Ihres Bibliotheksverwaltungssystems! Es ist an der Zeit, alles zusammenzuführen und zu verifizieren, dass alle Komponenten als integriertes System korrekt funktionieren. Sie werden ein umfassendes Testszenario erstellen, das alle Funktionen nutzt, die Sie im Laufe dieses Projekts entwickelt haben.

Sie werden mit allen sieben Dateien aus Ihrem fertigen System arbeiten:

  • Book.java: Ihre Book-Klasse mit isbn, title, author, isAvailable, borrowedBy und allen zugehörigen Methoden einschließlich getDetails().
  • User.java: Ihre User-Klasse mit id, name, der Liste borrowedBooks und Methoden zum Ausleihen/Zurückgeben von Büchern.
  • LibraryException.java: Ihre benutzerdefinierte Basis-Exception-Klasse.
  • BookNotAvailableException.java: Ihre Exception für nicht verfügbare Bücher.
  • LibraryAdmin.java: Ihr Admin-Interface und die AdminService-Implementierung.
  • Library.java: Ihre vollständige Library-Klasse mit allen Methoden – Hinzufügen/Entfernen von Büchern, Registrieren von Benutzern, Ausleihen/Zurückgeben, Suchen und Exception-Handling.
  • Main.java: Ihr Integrationstest, der das gesamte System im Zusammenspiel demonstriert.

In Ihrer Main-Klasse werden Sie eine Reihe von Befehlen verarbeiten, die jede wichtige Funktion Ihres Bibliothekssystems testen. Die Befehle werden als ein einziger, durch Kommas getrennter String in diesen Formaten übergeben:

  • ADD_BOOK:isbn:title:author - Ein Buch über den AdminService hinzufügen
  • REGISTER_USER:id:name - Einen Benutzer über den AdminService registrieren
  • BORROW:userId:isbn - Ein Buch ausleihen (mit Exception-Handling)
  • RETURN:userId:isbn - Ein Buch zurückgeben
  • SEARCH_TITLE:keyword - Bücher nach Titel suchen
  • SEARCH_AUTHOR:keyword - Bücher nach Autor suchen
  • REMOVE_BOOK:isbn - Ein Buch über den AdminService entfernen

Verarbeiten Sie jeden Befehl und geben Sie die entsprechende Meldung aus:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: Geben Sie die Erfolgsmeldung oder Error: [exception message] aus
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Geben Sie Search '[keyword]': gefolgt von den Details jedes passenden Buches aus, oder No results
  • SEARCH_AUTHOR: Gleiches Format wie die Titelsuche
  • REMOVE_BOOK: Removed: [isbn] oder Cannot remove: [isbn]

Geben Sie nach allen Befehlen eine abschließende Zusammenfassung aus:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Geben Sie für jeden Benutzer [name]: [borrowedCount] book(s) aus

Sie erhalten eine Eingabe: den durch Kommas getrennten Befehls-String.

Zum Beispiel würde bei der Eingabe ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001 Ihre Ausgabe wie folgt aussehen:

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

Diese abschließende Herausforderung bestätigt, dass alle Ihre Komponenten – Klassen, Interfaces, Exceptions und die Bibliothekslogik – nahtlos zusammenarbeiten. Sie haben ein vollständiges, robustes Bibliotheksverwaltungssystem aufgebaut!

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);
        
        // Liest die durch Kommas getrennten Befehle
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Erstelle Library und AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Verarbeite jeden Befehl
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: Verarbeitung für RETURN-Befehl hinzufügen
            // TODO: Verarbeitung für SEARCH_TITLE-Befehl hinzufügen
            // TODO: Verarbeitung für SEARCH_AUTHOR-Befehl hinzufügen
        }
        
        // TODO: Finalen Status ausgeben
        // --- Finaler Status ---
        // Bücher: [count]
        // Benutzer: [count]
        // Für jeden Benutzer: [name]: [borrowedCount] Buch/Bücher
        System.out.println("Operations completed");
    }
}

Alle Lektionen in Objektorientierte Programmierung