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 fera respecter les règles qui permettent à notre bibliothèque de fonctionner correctement.

Vous organiserez votre code dans 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 suivantes : 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 valant 3, et les méthodes suivantes : 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 : renvoie le livre ou null s'il n'est pas trouvé
    • borrowBook(User $user, string $isbn): string : vérifie et traite l'emprunt, en renvoyant 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 renvoyer 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 possède 3 livres
    • "Successfully borrowed: [title]" : en cas de réussite

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

  • main.php : incluez le fichier Library. Vous recevrez deux entrées : un ISBN et le titre d'un livre.

    Créez une Library, un User avec l'identifiant 1 et le nom "Alice", ainsi qu'un Book avec l'ISBN et le titre fournis, 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 à nouveau d'emprunter le même livre
    3. Retourner le livre
    4. Emprunter à nouveau le livre

Ce défi montre comment la classe Library centralise la logique métier. Elle vérifie les conditions, coordonne les changements d'état entre les objets Book et User, et renvoie des informations utiles 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 library

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

?>

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne