Menu
Coddy logo textTech

Logique du système d'emprunt

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 64 sur 70.

challenge icon

Défi

Facile

Donnons vie à votre système de bibliothèque en implémentant la logique de prêt principale ! Vous allez créer un système centralisé qui coordonne les livres et les utilisateurs, en appliquant les règles de la bibliothèque comme les limites de prêt et en garantissant que les livres ne peuvent être empruntés que lorsqu'ils sont disponibles.

Vous continuerez à construire sur votre structure existante de quatre fichiers :

  • Book.cs : Conservez votre classe Book avec les propriétés Id, Title, Author et IsAvailable, ainsi que les méthodes Borrow() et Return() de la leçon précédente.
  • User.cs : Conservez votre classe User avec Name, MemberId, BorrowedCount et les méthodes de gestion des livres empruntés. Ajoutez une constante MaxBooks fixée à 3 qui représente le nombre maximum de livres qu'un utilisateur peut emprunter à la fois. Ajoutez une méthode CanBorrow() qui renvoie true uniquement si l'utilisateur a emprunté moins de MaxBooks.
  • Library.cs : C'est ici que la logique de votre système de prêt se rejoint. Votre classe Library doit avoir des collections de livres et d'utilisateurs, ainsi que des méthodes pour les ajouter. Implémentez deux méthodes clés :
    • BorrowBook(string bookId, int memberId) - Coordonne le processus de prêt. Elle doit vérifier si le livre existe, si l'utilisateur existe, si le livre est disponible et si l'utilisateur peut emprunter plus de livres. Renvoyez les messages appropriés pour chaque cas d'échec ou de succès.
    • ReturnBook(string bookId, int memberId) - Gère les retours en vérifiant que l'utilisateur possède réellement le livre avant de traiter le retour.
  • Program.cs : Traite les opérations de la bibliothèque et affiche les résultats.

Votre méthode BorrowBook doit renvoyer ces messages selon la situation :

  • Book not found - quand l'ID du livre n'existe pas
  • User not found - quand l'ID du membre n'existe pas
  • {Title} is not available - quand le livre est déjà emprunté
  • {Name} has reached the borrowing limit - quand l'utilisateur a déjà 3 livres
  • {Name} borrowed {Title} - lors d'un prêt réussi

Votre méthode ReturnBook doit renvoyer :

  • Book not found ou User not found - pour des IDs invalides
  • {Name} did not borrow {Title} - quand l'utilisateur essaie de rendre un livre qu'il n'a pas
  • {Name} returned {Title} - lors d'un retour réussi

Vous recevrez les entrées suivantes :

  • Nom de la bibliothèque
  • Nombre de livres, puis chaque livre sous la forme id|title|author
  • Nombre d'utilisateurs, puis chaque utilisateur sous la forme name|memberId
  • Nombre d'opérations, puis chaque opération sous la forme action|bookId|memberId

Affichez le résultat de chaque opération sur sa propre ligne.

Par exemple, si les entrées sont :

Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101

La sortie devrait être :

Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984

Remarquez comment la classe Library agit comme coordinateur - elle valide toutes les conditions avant d'autoriser les opérations, gardant vos classes Book et User concentrées sur leurs propres responsabilités. Cette séparation rend votre code plus facile à maintenir et à tester !

Essayez vous-même

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Lire le nom de la bibliothèque
            string libraryName = Console.ReadLine();
            
            // Créer une instance de Library avec le nom de la bibliothèque
            Library library = new Library(libraryName);
            
            // Lire le nombre de livres
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Lire et ajouter des livres
            for (int i = 0; i < numBooks; i++)
            {
                string bookInput = Console.ReadLine();
                string[] bookParts = bookInput.Split('|');
                string bookId = bookParts[0];
                string bookTitle = bookParts[1];
                string bookAuthor = bookParts[2];
                
                Book book = new Book(bookId, bookTitle, bookAuthor);
                library.AddBook(book);
            }
            
            // Lire le nombre d'utilisateurs
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // Lire et enregistrer des utilisateurs
            for (int i = 0; i < numUsers; i++)
            {
                string userInput = Console.ReadLine();
                string[] userParts = userInput.Split('|');
                string userName = userParts[0];
                int memberId = Convert.ToInt32(userParts[1]);
                
                User user = new User(userName, memberId);
                library.RegisterUser(user);
            }
            
            // Lire le nombre d'opérations
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // Traiter les opérations
            for (int i = 0; i < numOperations; i++)
            {
                string operationInput = Console.ReadLine();
                string[] opParts = operationInput.Split('|');
                string action = opParts[0];
                string bookId = opParts[1];
                int memberId = Convert.ToInt32(opParts[2]);
                
                if (action == "borrow")
                {
                    string result = library.BorrowBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (action == "return")
                {
                    string result = library.ReturnBook(bookId, memberId);
                    Console.WriteLine(result);
                }
            }
        }
    }
}

Toutes les leçons de Programmation Orientée Objet