Menu
Coddy logo textTech

Modèles Livre et Utilisateur

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

challenge icon

Défi

Facile

Élargissons votre système de bibliothèque en développant les modèles Book et User avec des fonctionnalités plus riches. Vous ajouterez le suivi du statut des livres, des capacités d'emprunt pour les utilisateurs et une encapsulation appropriée pour protéger vos données.

Vous continuerez à travailler avec votre structure à quatre fichiers :

  • Book.cs : Améliorez votre classe Book avec un identifiant unique et un suivi de statut. Chaque livre doit avoir un Id (string), Title (string), Author (string), et IsAvailable (bool, par défaut à true). Ajoutez des méthodes Borrow() et Return() qui modifient le statut de disponibilité et renvoient un message indiquant le succès ou l'échec. Si quelqu'un essaie d'emprunter un livre indisponible, renvoyez "{Title} is not available". S'il essaie de retourner un livre déjà disponible, renvoyez "{Title} was not borrowed". Les opérations réussies doivent renvoyer "{Title} has been borrowed" ou "{Title} has been returned".
  • User.cs : Élargissez votre classe User pour suivre les livres empruntés. Incluez Name (string), MemberId (int), et une liste privée pour stocker les ID des livres empruntés. Ajoutez une propriété en lecture seule BorrowedCount qui renvoie le nombre de livres que l'utilisateur possède actuellement. Incluez les méthodes AddBorrowedBook(string bookId) et RemoveBorrowedBook(string bookId) pour gérer les livres empruntés de l'utilisateur. Ajoutez également une méthode HasBook(string bookId) qui renvoie true si l'utilisateur a emprunté ce livre spécifique.
  • Library.cs : Votre classe Library doit maintenir des collections de livres et d'utilisateurs. Incluez les méthodes AddBook(Book book) et RegisterUser(User user) pour alimenter la bibliothèque. Ajoutez une méthode GetBookById(string id) qui renvoie le livre avec cet ID (ou null si non trouvé), et GetUserById(int memberId) qui fonctionne de manière similaire pour les utilisateurs.
  • Program.cs : Rassemblez le tout en traitant les opérations de la bibliothèque en fonction des entrées.

Vous recevrez les entrées suivantes :

  • Nom de la bibliothèque
  • Nombre de livres à ajouter
  • Pour chaque livre : id|title|author
  • Nombre d'utilisateurs à enregistrer
  • Pour chaque utilisateur : name|memberId
  • Nombre d'opérations à effectuer
  • Pour chaque opération : action|bookId|memberId où action est soit borrow soit return

Pour chaque opération, affichez le résultat de l'action d'emprunt ou de retour. Après toutes les opérations, affichez un résumé pour chaque utilisateur indiquant son nom et le nombre de livres qu'il a actuellement empruntés au format {Name}: {BorrowedCount} book(s).

Par exemple, si les entrées sont :

Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101

La sortie doit être :

Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)

Remarquez comment Alice emprunte avec succès deux livres, mais lorsque Bob essaie d'emprunter Clean Code (qu'Alice possède déjà), l'opération échoue. Après qu'Alice a retourné Clean Code, son nombre tombe à 1. Cela démontre comment vos modèles fonctionnent ensemble pour appliquer les règles de la bibliothèque !

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 les 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 les utilisateurs
            List<User> usersList = new List<User>();
            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);
                usersList.Add(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]);
                
                Book book = library.GetBookById(bookId);
                User user = library.GetUserById(memberId);
                
                if (action == "borrow")
                {
                    string result = book.Borrow();
                    Console.WriteLine(result);
                    if (result.Contains("has been borrowed"))
                    {
                        user.AddBorrowedBook(bookId);
                    }
                }
                else if (action == "return")
                {
                    string result = book.Return();
                    Console.WriteLine(result);
                    if (result.Contains("has been returned"))
                    {
                        user.RemoveBorrowedBook(bookId);
                    }
                }
            }
            
            // Afficher le résumé pour chaque utilisateur
            foreach (User user in usersList)
            {
                Console.WriteLine($"{user.Name}: {user.BorrowedCount} book(s)");
            }
        }
    }
}

Toutes les leçons de Programmation Orientée Objet