Menu
Coddy logo textTech

Sistema di prestito

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

challenge icon

Sfida

Facile

Diamo vita al nostro sistema di gestione della biblioteca creando la classe Library, che coordina tutte le operazioni di prestito. Questo coordinatore centrale gestirà la collezione di libri e farà rispettare le regole che consentono alla nostra biblioteca di funzionare senza intoppi.

Organizzerai il codice in quattro file:

  • Book.php: la tua classe Book della lezione precedente, con proprietà readonly (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 avrà proprietà readonly (id, name), un array privato $borrowedBooks, una costante MAX_BOOKS impostata a 3 e i metodi: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php: includi il file User. Crea una classe Library che gestisca la collezione di libri. La tua biblioteca dovrà avere:
    • Un array privato $books per memorizzare i libri indicizzati per ISBN
    • addBook(Book $book): void: aggiunge un libro alla collezione
    • findBook(string $isbn): ?Book: restituisce il libro oppure null se non viene trovato
    • borrowBook(User $user, string $isbn): string: convalida ed elabora il prestito, restituendo i messaggi appropriati
    • returnBook(User $user, string $isbn): string: elabora le restituzioni e aggiorna lo stato sia del libro sia dell'utente

    Il metodo borrowBook dovrà controllare tre condizioni, nell'ordine indicato, e restituire questi messaggi esatti:

    • "Book not found": se il libro non esiste
    • "Book is not available": se è già stato preso in prestito
    • "Borrowing limit reached": se l'utente ha 3 libri
    • "Successfully borrowed: [title]": in caso di successo

    Il metodo returnBook dovrà restituire "Book not found" se il libro non esiste oppure "Successfully returned: [title]" in caso di successo.

  • main.php: includi il file Library. Riceverai due input: un ISBN e il titolo di un libro.

    Crea una Library, un User con ID 1 e nome "Alice" e un Book con l'ISBN, il titolo e l'autore forniti, "Unknown". Aggiungi il libro alla biblioteca, quindi esegui queste operazioni e stampa ogni risultato su una nuova riga:

    1. Prendi in prestito il libro
    2. Prova a prendere di nuovo in prestito lo stesso libro
    3. Restituisci il libro
    4. Prendi in prestito il libro ancora una volta

Questa sfida mostra come la classe Library centralizzi la logica aziendale. Convalida le condizioni, coordina le modifiche di stato tra gli oggetti Book e User e restituisce un riscontro significativo per ogni operazione.

Provalo tu

<?php
require_once 'Library.php';

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

// TODO: Crea un'istanza di Library

// TODO: Crea un User con ID 1 e nome "Alice"

// TODO: Crea un Book con l'ISBN e il titolo forniti e con autore "Unknown"

// TODO: Aggiungi il libro alla libreria

// TODO: Esegui queste operazioni e stampa ogni risultato su una nuova riga:
// 1. Prendi in prestito il libro
// 2. Prova a prendere di nuovo in prestito lo stesso libro
// 3. Restituisci il libro
// 4. Prendi ancora una volta in prestito il libro

?>

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online