Menu
Coddy logo textTech

Interfejs administratora

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

challenge icon

Wyzwanie

Łatwy

Rozszerzmy nasz system zarządzania biblioteką, dodając funkcje administracyjne. Utworzysz klasę Admin, która dziedziczy po klasie User, ale ma specjalne uprawnienia do zarządzania księgozbiorem: dodawania nowych książek i usuwania istniejących.

Rozmieścisz swój kod w pięciu plikach:

  • Book.php: Twoja klasa Book 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. Twoja klasa Library z dotychczasowymi funkcjami, w tym addBook(), findBook(), borrowBook(), returnBook() oraz metodami wyszukiwania. Dodaj nową metodę:
    • removeBook(string $isbn): void: usuwa książkę z kolekcji za pomocą unset()
  • Admin.php: Dołącz plik Library. Utwórz klasę Admin, która rozszerza klasę User. Administratorzy dziedziczą wszystkie możliwości użytkowników, a dodatkowo mają dwie metody administracyjne:
    • addBookToLibrary(Library $library, Book $book): string: dodaje książkę do biblioteki i zwraca "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: próbuje usunąć książkę, wykonując następujące sprawdzenia:
      • Jeśli książka nie istnieje, zwróć "Book not found"
      • Jeśli książka jest aktualnie wypożyczona, zwróć "Cannot remove: book is currently borrowed"
      • W przeciwnym razie usuń ją i zwróć "Removed: [title]"
  • main.php: Dołącz plik Admin. Otrzymasz dwa dane wejściowe: ISBN i tytuł książki.

    Utwórz obiekt Library oraz obiekt Admin o identyfikatorze 1 i nazwie "AdminUser". Utwórz również zwykłego użytkownika User o identyfikatorze 2 i nazwie "RegularUser".

    Utwórz obiekt Book z podanym ISBN-em, tytułem i autorem "Test Author". Wykonaj poniższe operacje i wypisz wynik każdej z nich w nowej linii:

    1. Poleć administratorowi dodać książkę do biblioteki
    2. Poleć zwykłemu użytkownikowi wypożyczyć książkę
    3. Poleć administratorowi spróbować usunąć książkę (powinno się nie udać: książka jest wypożyczona)
    4. Poleć zwykłemu użytkownikowi zwrócić książkę
    5. Poleć administratorowi usunąć książkę (tym razem powinno się udać)
    6. Poleć administratorowi ponownie spróbować usunąć tę samą książkę (powinno się nie udać: książka nie została znaleziona)

To wyzwanie pokazuje, jak dziedziczenie tworzy naturalną hierarchię: administratorzy to użytkownicy z dodatkowymi uprawnieniami. Kontrole bezpieczeństwa w metodzie removeBookFromLibrary zapewniają integralność danych, zapobiegając usuwaniu książek, które są nadal w obiegu.

Spróbuj swoich sił

<?php
require_once 'Admin.php';

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

// TODO: Utwórz obiekt Library

// TODO: Utwórz obiekt Admin o ID 1 i nazwie "AdminUser"

// TODO: Utwórz obiekt User o ID 2 i nazwie "RegularUser"

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

// TODO: Wykonaj poniższe operacje i wypisz każdy wynik w nowym wierszu:
// 1. Niech administrator doda książkę do biblioteki
// 2. Niech zwykły użytkownik wypożyczy książkę
// 3. Niech administrator spróbuje usunąć książkę (operacja powinna się nie powieść — książka jest wypożyczona)
// 4. Niech zwykły użytkownik zwróci książkę
// 5. Niech administrator usunie książkę (teraz operacja powinna się powieść)
// 6. Niech administrator ponownie spróbuje usunąć tę samą książkę (operacja powinna się nie powieść — nie znaleziono książki)

?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online