Menu
Coddy logo textTech

Interfaccia amministratore

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 86 di 91.

challenge icon

Sfida

Facile

Estendiamo il nostro Sistema di gestione della biblioteca aggiungendo funzionalità amministrative. Creerai una classe Admin che eredita da User, ma dispone di privilegi speciali per gestire l'inventario della biblioteca: aggiungere nuovi libri e rimuovere quelli esistenti.

Organizzerai il codice in cinque file:

  • Book.php: la tua classe Book con proprietà di sola lettura (isbn, title, author), una proprietà privata $isAvailable inizializzata a true e i metodi: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php: includi il file Book. La tua classe User con proprietà di sola lettura (id, name), un array privato $borrowedBooks, una costante MAX_BOOKS con valore 3 e i metodi: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php: includi il file User. La tua classe Library con le funzionalità esistenti, tra cui addBook(), findBook(), borrowBook(), returnBook() e i metodi di ricerca. Aggiungi un nuovo metodo:
    • removeBook(string $isbn): void: rimuove un libro dalla raccolta usando unset()
  • Admin.php: includi il file Library. Crea una classe Admin che estende User. Gli amministratori ereditano tutte le funzionalità degli utenti, ma acquisiscono due metodi amministrativi:
    • addBookToLibrary(Library $library, Book $book): string: aggiunge il libro alla biblioteca e restituisce "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: tenta di rimuovere un libro con questi controlli:
      • Se il libro non esiste, restituisce "Book not found"
      • Se il libro è attualmente in prestito, restituisce "Cannot remove: book is currently borrowed"
      • Altrimenti, lo rimuove e restituisce "Removed: [title]"
  • main.php: includi il file Admin. Riceverai due input: un ISBN e il titolo di un libro.

    Crea una Library e un Admin con ID 1 e nome "AdminUser". Crea anche un normale User con ID 2 e nome "RegularUser".

    Crea un Book con l'ISBN e il titolo forniti e l'autore "Test Author". Esegui queste operazioni e stampa ogni risultato su una nuova riga:

    1. Fai aggiungere il libro alla biblioteca dall'amministratore
    2. Fai prendere in prestito il libro all'utente normale
    3. Fai provare all'amministratore a rimuovere il libro (dovrebbe fallire: è in prestito)
    4. Fai restituire il libro all'utente normale
    5. Fai rimuovere il libro all'amministratore (ora dovrebbe riuscirci)
    6. Fai provare all'amministratore a rimuovere di nuovo lo stesso libro (dovrebbe fallire: il libro non è stato trovato)

Questa sfida dimostra come l'ereditarietà crei una gerarchia naturale: gli amministratori sono utenti con privilegi aggiuntivi. I controlli di sicurezza in removeBookFromLibrary garantiscono l'integrità dei dati impedendo la rimozione dei libri ancora in circolazione.

Provalo tu

<?php
require_once 'Admin.php';

// Leggi l'input
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Crea una Library

// TODO: Crea un Admin con ID 1 e nome "AdminUser"

// TODO: Crea un User normale con ID 2 e nome "RegularUser"

// TODO: Crea un Book con l'ISBN fornito, il titolo e l'autore "Test Author"

// TODO: Esegui queste operazioni e stampa ogni risultato su una nuova riga:
// 1. Fai aggiungere il libro alla biblioteca dall'amministratore
// 2. Fai prendere in prestito il libro all'utente normale
// 3. Fai provare all'amministratore a rimuovere il libro (l'operazione dovrebbe fallire perché è in prestito)
// 4. Fai restituire il libro all'utente normale
// 5. Fai rimuovere il libro all'amministratore (ora l'operazione dovrebbe riuscire)
// 6. Fai provare all'amministratore a rimuovere di nuovo lo stesso libro (l'operazione dovrebbe fallire perché il libro non viene trovato)

?>

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online