Menu
Coddy logo textTech

Ausleihsystem

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 84 von 91.

challenge icon

Aufgabe

Einfach

Lassen Sie uns unser Bibliotheksverwaltungssystem zum Leben erwecken, indem wir die Klasse Library erstellen, die alle Ausleihvorgänge orchestriert. Dieser zentrale Koordinator wird die Buchsammlung verwalten und die Regeln durchsetzen, die unsere Bibliothek reibungslos am Laufen halten.

Sie werden Ihren Code über vier Dateien organisieren:

  • Book.php — Ihre Klasse Book aus der vorherigen Lektion mit Readonly-Eigenschaften (isbn, title, author), einer privaten Eigenschaft $isAvailable, die als true beginnt, und den Methoden: isAvailable(), markAsBorrowed() und markAsReturned().
  • User.php — Binden Sie die Datei Book ein. Ihre Klasse User mit Readonly-Eigenschaften (id, name), einem privaten Array $borrowedBooks, einer Konstante MAX_BOOKS von 3 und den Methoden: getBorrowedBooks(), canBorrow(), addBook(Book $book) und removeBook(string $isbn).
  • Library.php — Binden Sie die Datei User ein. Erstellen Sie eine Klasse Library, die die Buchsammlung verwaltet. Ihre Bibliothek sollte Folgendes haben:
    • Ein privates Array $books, um Bücher indiziert nach ISBN zu speichern
    • addBook(Book $book): void — fügt ein Buch zur Sammlung hinzu
    • findBook(string $isbn): ?Book — gibt das Buch zurück oder null, falls es nicht gefunden wurde
    • borrowBook(User $user, string $isbn): string — validiert und verarbeitet die Ausleihe und gibt entsprechende Meldungen zurück
    • returnBook(User $user, string $isbn): string — verarbeitet Rückgaben und aktualisiert sowohl den Buch- als auch den Benutzerstatus

    Die Methode borrowBook sollte drei Bedingungen in der angegebenen Reihenfolge prüfen und genau diese Meldungen zurückgeben:

    • "Book not found" — wenn das Buch nicht existiert
    • "Book is not available" — wenn es bereits ausgeliehen ist
    • "Borrowing limit reached" — wenn der Benutzer bereits 3 Bücher hat
    • "Successfully borrowed: [title]" — bei Erfolg

    Die Methode returnBook sollte "Book not found" zurückgeben, wenn das Buch nicht existiert, oder "Successfully returned: [title]" bei Erfolg.

  • main.php — Binden Sie die Datei Library ein. Sie erhalten zwei Eingaben: eine ISBN und einen Buchtitel.

    Erstellen Sie eine Library, einen User mit der ID 1 und dem Namen "Alice" sowie ein Book mit der angegebenen ISBN, dem Titel und dem Autor "Unknown". Fügen Sie das Buch der Bibliothek hinzu, führen Sie dann diese Operationen aus und geben Sie jedes Ergebnis in einer neuen Zeile aus:

    1. Leihen Sie das Buch aus
    2. Versuchen Sie, dasselbe Buch erneut auszuleihen
    3. Geben Sie das Buch zurück
    4. Leihen Sie das Buch noch einmal aus

Diese Herausforderung zeigt, wie die Klasse Library die Geschäftslogik zentralisiert — sie validiert Bedingungen, koordiniert Statusänderungen über Book- und User-Objekte hinweg und gibt aussagekräftiges Feedback für jede Operation zurück.

Probier es selbst

<?php
require_once 'Library.php';

// Eingabe lesen
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Eine Library-Instanz erstellen

// TODO: Einen User mit der ID 1 und dem Namen "Alice" erstellen

// TODO: Ein Book mit der angegebenen ISBN, dem Titel und dem Autor "Unknown" erstellen

// TODO: Das Buch zur Bibliothek hinzufügen

// TODO: Diese Operationen ausführen und jedes Ergebnis in einer neuen Zeile ausgeben:
// 1. Das Buch ausleihen
// 2. Versuchen, dasselbe Buch erneut auszuleihen
// 3. Das Buch zurückgeben
// 4. Das Buch noch einmal ausleihen

?>

Alle Lektionen in Objektorientierte Programmierung