Menu
Coddy logo textTech

Ausleihsystem

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

challenge icon

Aufgabe

Einfach

Lassen wir unser Bibliotheksverwaltungssystem zum Leben erwachen, indem wir die Klasse Library erstellen, die alle Ausleihvorgänge koordiniert. Diese zentrale Koordinationsstelle verwaltet die Büchersammlung und setzt die Regeln durch, die dafür sorgen, dass unsere Bibliothek reibungslos funktioniert.

Du organisierst deinen Code über vier Dateien:

  • Book.php: Deine Book-Klasse aus der vorherigen Lektion mit readonly-Eigenschaften (isbn, title, author), einer privaten $isAvailable-Eigenschaft, die mit true beginnt, und den Methoden: isAvailable(), markAsBorrowed() und markAsReturned().
  • User.php: Binde die Book-Datei ein. Deine User-Klasse mit readonly-Eigenschaften (id, name), einem privaten $borrowedBooks-Array, einer MAX_BOOKS-Konstante mit dem Wert 3 und den Methoden: getBorrowedBooks(), canBorrow(), addBook(Book $book) und removeBook(string $isbn).
  • Library.php: Binde die User-Datei ein. Erstelle eine Library-Klasse, die die Büchersammlung verwaltet. Deine Bibliothek sollte Folgendes enthalten:
    • Ein privates $books-Array zum Speichern von Büchern, indiziert nach ISBN
    • addBook(Book $book): void: fügt ein Buch zur Sammlung hinzu
    • findBook(string $isbn): ?Book: gibt das Buch zurück oder null, wenn es nicht gefunden wurde
    • borrowBook(User $user, string $isbn): string: validiert und verarbeitet die Ausleihe und gibt entsprechende Nachrichten zurück
    • returnBook(User $user, string $isbn): string: verarbeitet die Rückgabe und aktualisiert sowohl den Zustand des Buchs als auch den des Benutzers

    Die Methode borrowBook sollte drei Bedingungen in der angegebenen Reihenfolge prüfen und diese exakten Nachrichten 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 3 Bücher hat
    • "Successfully borrowed: [title]": bei Erfolg

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

  • main.php: Binde die Library-Datei ein. Du erhältst zwei Eingaben: eine ISBN und einen Buchtitel.

    Erstelle eine Library, einen User mit der ID 1 und dem Namen "Alice" sowie ein Book mit der angegebenen ISBN, dem angegebenen Titel und dem Autor "Unknown". Füge das Buch zur Bibliothek hinzu, führe anschließend die folgenden Vorgänge aus und gib jedes Ergebnis in einer neuen Zeile aus:

    1. Leihe das Buch aus
    2. Versuche, dasselbe Buch erneut auszuleihen
    3. Gib das Buch zurück
    4. Leihe das Buch ein weiteres Mal aus

Diese Herausforderung zeigt, wie die Klasse Library die Geschäftslogik zentralisiert. Sie validiert Bedingungen, koordiniert Zustandsänderungen über Book- und User-Objekte hinweg und gibt für jeden Vorgang aussagekräftige Rückmeldungen zurück.

Probier es selbst

<?php
require_once 'Library.php';

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

// TODO: Erstelle eine Library-Instanz

// TODO: Erstelle einen User mit ID 1 und Namen "Alice"

// TODO: Erstelle ein Book mit der angegebenen ISBN, dem Titel und dem Autor "Unknown"

// TODO: Füge das Buch zur Library hinzu

// TODO: Führe diese Operationen aus und gib jedes Ergebnis in einer neuen Zeile aus:
// 1. Leihe das Buch aus
// 2. Versuche, dasselbe Buch erneut auszuleihen
// 3. Gib das Buch zurück
// 4. Leihe das Buch noch einmal aus

?>

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler