Menu
Coddy logo textTech

System wypożyczania

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 84 z 91.

challenge icon

Wyzwanie

Łatwy

Tchnijmy życie w nasz System zarządzania biblioteką, tworząc klasę Library, która koordynuje wszystkie operacje wypożyczania. Ten centralny koordynator będzie zarządzać kolekcją książek i egzekwować zasady, dzięki którym nasza biblioteka działa sprawnie.

Rozmieścisz swój kod w czterech plikach:

  • Book.php: Twoja klasa Book z poprzedniej lekcji, z właściwościami tylko do odczytu (isbn, title, author), prywatną właściwością $isAvailable, której początkową wartością jest true, oraz metodami: isAvailable(), markAsBorrowed() i markAsReturned().
  • User.php: Dołącz plik Book. Twoja klasa User z właściwościami tylko do odczytu (id, name), prywatną tablicą $borrowedBooks, stałą MAX_BOOKS o wartości 3 oraz metodami: getBorrowedBooks(), canBorrow(), addBook(Book $book) i removeBook(string $isbn).
  • Library.php: Dołącz plik User. Utwórz klasę Library, która zarządza kolekcją książek. Twoja biblioteka powinna mieć:
    • Prywatną tablicę $books do przechowywania książek indeksowanych według ISBN
    • addBook(Book $book): void: dodaje książkę do kolekcji
    • findBook(string $isbn): ?Book: zwraca książkę lub null, jeśli jej nie znaleziono
    • borrowBook(User $user, string $isbn): string: sprawdza warunki i przetwarza wypożyczenie, zwracając odpowiednie komunikaty
    • returnBook(User $user, string $isbn): string: przetwarza zwroty i aktualizuje stan zarówno książki, jak i użytkownika

    Metoda borrowBook powinna sprawdzać po kolei trzy warunki i zwracać dokładnie te komunikaty:

    • "Book not found": jeśli książka nie istnieje
    • "Book is not available": jeśli została już wypożyczona
    • "Borrowing limit reached": jeśli użytkownik ma 3 książki
    • "Successfully borrowed: [title]": w przypadku powodzenia

    Metoda returnBook powinna zwracać "Book not found", jeśli książka nie istnieje, albo "Successfully returned: [title]" w przypadku powodzenia.

  • main.php: Dołącz plik Library. Otrzymasz dwa dane wejściowe: ISBN i tytuł książki.

    Utwórz obiekt Library, obiekt User o identyfikatorze 1 i nazwie "Alice" oraz obiekt Book z podanym ISBN-em, tytułem i autorem "Unknown". Dodaj książkę do biblioteki, a następnie wykonaj te operacje i wypisz każdy wynik w nowej linii:

    1. Wypożycz książkę
    2. Spróbuj ponownie wypożyczyć tę samą książkę
    3. Zwróć książkę
    4. Wypożycz książkę jeszcze raz

To wyzwanie pokazuje, jak klasa Library centralizuje logikę biznesową. Sprawdza warunki, koordynuje zmiany stanu w obiektach Book i User oraz zwraca zrozumiałe informacje zwrotne dla każdej operacji.

Spróbuj swoich sił

<?php
require_once 'Library.php';

// Odczytaj dane wejściowe
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Utwórz instancję Library

// TODO: Utwórz obiekt User o ID 1 i nazwie "Alice"

// TODO: Utwórz obiekt Book z podanym ISBN, tytułem i autorem "Unknown"

// TODO: Dodaj książkę do biblioteki

// TODO: Wykonaj te operacje i wypisz każdy wynik w nowej linii:
// 1. Wypożycz książkę
// 2. Spróbuj ponownie wypożyczyć tę samą książkę
// 3. Zwróć książkę
// 4. Wypożycz książkę jeszcze raz

?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online