Menu
Coddy logo textTech

Système d'emprunt

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 84 sur 91.

challenge icon

Défi

Facile

Donnons vie à notre système de gestion de bibliothèque en créant la classe Library qui orchestre toutes les opérations d'emprunt. Ce coordinateur central gérera la collection de livres et appliquera les règles qui permettent à notre bibliothèque de fonctionner correctement.

Vous organiserez votre code sur quatre fichiers :

  • Book.php — Votre classe Book de la leçon précédente avec des propriétés en lecture seule (isbn, title, author), une propriété privée $isAvailable initialisée à true, et les méthodes : isAvailable(), markAsBorrowed(), et markAsReturned().
  • User.php — Incluez le fichier Book. Votre classe User avec des propriétés en lecture seule (id, name), un tableau privé $borrowedBooks, une constante MAX_BOOKS de 3, et les méthodes : getBorrowedBooks(), canBorrow(), addBook(Book $book), et removeBook(string $isbn).
  • Library.php — Incluez le fichier User. Créez une classe Library qui gère la collection de livres. Votre bibliothèque doit avoir :
    • Un tableau privé $books pour stocker les livres indexés par ISBN
    • addBook(Book $book): void — ajoute un livre à la collection
    • findBook(string $isbn): ?Book — retourne le livre ou null s'il n'est pas trouvé
    • borrowBook(User $user, string $isbn): string — valide et traite l'emprunt, en retournant les messages appropriés
    • returnBook(User $user, string $isbn): string — traite les retours et met à jour l'état du livre et de l'utilisateur

    La méthode borrowBook doit vérifier trois conditions dans l'ordre et retourner ces messages exacts :

    • "Book not found" — si le livre n'existe pas
    • "Book is not available" — s'il est déjà emprunté
    • "Borrowing limit reached" — si l'utilisateur a déjà 3 livres
    • "Successfully borrowed: [title]" — en cas de succès

    La méthode returnBook doit retourner "Book not found" si le livre n'existe pas, ou "Successfully returned: [title]" en cas de succès.

  • main.php — Incluez le fichier Library. Vous recevrez deux entrées : un ISBN et un titre de livre.

    Créez une Library, un User avec l'ID 1 et le nom "Alice", et un Book avec l'ISBN fourni, le titre fourni, et l'auteur "Unknown". Ajoutez le livre à la bibliothèque, puis effectuez ces opérations et affichez chaque résultat sur une nouvelle ligne :

    1. Emprunter le livre
    2. Essayer d'emprunter à nouveau le même livre
    3. Retourner le livre
    4. Emprunter le livre une fois de plus

Ce défi démontre comment la classe Library centralise la logique métier — elle valide les conditions, coordonne les changements d'état entre les objets Book et User, et fournit un retour d'information significatif pour chaque opération.

Essayez vous-même

<?php
require_once 'Library.php';

// Lire l'entrée
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Créer une instance de Library

// TODO: Créer un User avec l'ID 1 et le nom "Alice"

// TODO: Créer un Book avec l'ISBN fourni, le titre, et l'auteur "Unknown"

// TODO: Ajouter le livre à la bibliothèque

// TODO: Effectuer ces opérations et afficher chaque résultat sur une nouvelle ligne :
// 1. Emprunter le livre
// 2. Essayer d'emprunter à nouveau le même livre
// 3. Retourner le livre
// 4. Emprunter le livre une fois de plus

?>

Toutes les leçons de Programmation Orientée Objet