Menu
Coddy logo textTech

Admin-Interface

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns Ihr Bibliotheksverwaltungssystem um ein Admin-Interface erweitern! Eine echte Bibliothek benötigt administrative Funktionen – das Hinzufügen neuer Bücher zur Sammlung, das Entfernen veralteter Bücher und das Registrieren neuer Mitglieder. Sie werden ein Interface erstellen, das diese administrativen Operationen definiert, und diese in einer speziellen Admin-Klasse implementieren.

Sie werden die Arbeit an Ihrem bestehenden Code in fünf Dateien fortsetzen:

  • Book.java: Behalten Sie Ihre Book-Klasse mit allen vorhandenen Funktionen bei – isbn, title, author, isAvailable, borrowedBy, getDetails() und den entsprechenden Gettern/Settern.
  • User.java: Behalten Sie Ihre User-Klasse unverändert bei mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString().
  • Library.java: Behalten Sie Ihre Library-Klasse mit allen vorhandenen Methoden bei. Fügen Sie eine neue Methode removeBook(String isbn) hinzu, die ein Buch anhand seiner ISBN in der Sammlung findet und entfernt. Die Methode sollte true zurückgeben, wenn das Buch gefunden und entfernt wurde, andernfalls false. Ein Buch kann nur entfernt werden, wenn es derzeit verfügbar ist (nicht ausgeliehen).
  • LibraryAdmin.java: Erstellen Sie ein Interface namens LibraryAdmin, das den Vertrag für administrative Operationen definiert. Ihr Interface sollte drei Methoden deklarieren:
    • addBook(String isbn, String title, String author) - gibt einen booleschen Wert zurück, der den Erfolg anzeigt
    • removeBook(String isbn) - gibt einen booleschen Wert zurück, der den Erfolg anzeigt
    • registerUser(String id, String name) - gibt einen booleschen Wert zurück, der den Erfolg anzeigt

    Erstellen Sie dann eine Klasse namens AdminService, die dieses Interface implementiert. Der AdminService sollte eine Referenz auf eine Library halten (übergeben durch seinen Konstruktor) und alle drei Methoden implementieren, indem er an die Library delegiert und entsprechendes Feedback hinzufügt. Wenn ein Buch hinzugefügt wird, erstellen Sie ein neues Book und fügen Sie es der Bibliothek hinzu. Wenn ein Benutzer registriert wird, erstellen Sie einen neuen User und registrieren Sie ihn.

  • Main.java: Demonstrieren Sie Ihr Admin-System! Sie erhalten eine Reihe von Admin-Befehlen als einen einzelnen, durch Kommas getrennten String. Jeder Befehl folgt einem dieser Formate:
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Erstellen Sie eine Library und einen AdminService. Verarbeiten Sie jeden Befehl und geben Sie das Ergebnis aus:

    • Für ADD_BOOK: geben Sie Added: [title] bei Erfolg aus
    • Für REMOVE_BOOK: geben Sie Removed: [isbn] bei Erfolg aus, oder Cannot remove: [isbn], wenn das Buch nicht existiert oder ausgeliehen ist
    • Für REGISTER_USER: geben Sie Registered: [name] aus
    • Für BORROW: verwenden Sie die vorhandene Ausleihfunktion der Bibliothek

    Geben Sie nach der Verarbeitung aller Befehle Library status: aus, gefolgt von den Details jedes Buches und dem Verfügbarkeitsstatus im Format [details] - [Available/Borrowed].

Sie erhalten eine Eingabe: einen durch Kommas getrennten String von Befehlen.

Zum Beispiel bei der Eingabe REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002 wäre Ihre Ausgabe:

Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - Borrowed

Beachten Sie, wie das Admin-Interface einen sauberen Vertrag für administrative Operationen bietet, während die AdminService-Implementierung die eigentliche Logik übernimmt. Das System verhindert korrekt das Entfernen eines ausgeliehenen Buches, während es das Entfernen verfügbarer Bücher erlaubt. Diese Trennung von Interface und Implementierung ist ein zentrales OOP-Prinzip, das Ihren Code wartbarer und testbarer macht!

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);
        
        // Lies 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];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Gib den Bibliotheksstatus aus
        System.out.println("Library status:");
        ArrayList<Book> allBooks = library.getAllBooks();
        for (Book book : allBooks) {
            String status = book.isAvailable() ? "Available" : "Borrowed";
            System.out.println(book.getDetails() + " - " + status);
        }
    }
}

Alle Lektionen in Objektorientierte Programmierung