Interface Console / Interface d'administration
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 66 sur 70.
Défi
FacileTerminons votre Library System en construisant une interface console qui réunit tous vos composants ! Vous allez créer une interface d’administration qui traite les commandes pour gérer la bibliothèque : ajouter des livres, inscrire des utilisateurs, gérer les opérations d’emprunt et rechercher dans le catalogue.
Vous allez continuer à vous appuyer sur la structure existante de votre projet :
Book.cs: Conservez votre classe Book avecId,Title,Author,IsAvailable, ainsi que les méthodesBorrow()etReturn().User.cs: Conservez votre classe User avec le suivi des emprunts, la constanteMaxBooks,CanBorrow()et les méthodes de gestion des livres empruntés.Library.cs: Conservez votre classe Library avec toute la logique d’emprunt et les méthodes de recherche LINQ que vous avez créées. Ajoutez une nouvelle méthodeGetAllBooks()qui renvoie tous les livres de la bibliothèque, ainsi queGetAllUsers()qui renvoie tous les utilisateurs inscrits.Program.cs: C’est ici que votre interface console prend vie ! Vous allez construire un processeur de commandes qui lit les commandes et exécute les opérations appropriées de la bibliothèque. Considérez-le comme le tableau de bord d’administration de votre système de bibliothèque.
Votre interface console doit gérer les commandes suivantes :
ADD_BOOK|id|title|author- Ajoute un nouveau livre et afficheAdded: {Title}ADD_USER|name|memberId- Inscrit un nouvel utilisateur et afficheRegistered: {Name}BORROW|bookId|memberId- Traite une demande d’emprunt (utilisez votre logique BorrowBook existante)RETURN|bookId|memberId- Traite une demande de retour (utilisez votre logique ReturnBook existante)SEARCH|type|value- Recherche dans le catalogue lorsque type esttitle,author,availableouborrowedSTATUS- Affiche un résumé indiquant le nombre total de livres, le nombre de livres disponibles, le nombre total d’utilisateurs et le nombre total de livres empruntés
Pour la commande STATUS, affichez le résumé dans ce format :
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}Pour les résultats de recherche, affichez chaque livre sous la forme {Title} by {Author} sur sa propre ligne, ou No books found si aucun résultat n’est trouvé.
Vous recevrez les entrées suivantes :
- Le nom de la bibliothèque
- Le nombre de commandes à traiter
- Chaque commande sur sa propre ligne, selon les formats décrits ci-dessus
Par exemple, si les entrées sont les suivantes :
Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUSLa sortie devrait être la suivante :
Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2Votre interface console joue le rôle de lien entre les entrées de l’utilisateur et vos composants de bibliothèque bien organisés. Chaque commande délègue son traitement à la méthode appropriée de votre classe Library, démontrant ainsi comment une architecture propre facilite la création d’interfaces utilisateur !
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 commandes
int numCommands = Convert.ToInt32(Console.ReadLine());
// Traiter chaque commande
for (int i = 0; i < numCommands; i++)
{
string commandLine = Console.ReadLine();
string[] parts = commandLine.Split('|');
string command = parts[0];
// TODO: Gérer la commande ADD_BOOK
// Format : ADD_BOOK|id|title|author
// Afficher : Added: {title}
// TODO: Gérer la commande ADD_USER
// Format : ADD_USER|name|memberId
// Afficher : Registered: {name}
// TODO: Gérer la commande BORROW
// Format : BORROW|bookId|memberId
// Afficher le résultat de library.BorrowBook()
// TODO: Gérer la commande RETURN
// Format : RETURN|bookId|memberId
// Afficher le résultat de library.ReturnBook()
// TODO: Gérer la commande SEARCH
// Format : SEARCH|type|value (type peut être title, author, available, borrowed)
// Afficher chaque livre comme "{Title} by {Author}" ou "No books found"
// TODO: Gérer la commande STATUS
// Afficher :
// --- Library Status ---
// Total Books: {count}
// Available: {count}
// Total Users: {count}
// Books Borrowed: {count}
}
}
}
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne