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
FacileComplétons votre système de bibliothèque en construisant une interface console qui rassemble tous vos composants ! Vous allez créer une interface d'administration qui traite des commandes pour gérer la bibliothèque : ajouter des livres, enregistrer des utilisateurs, gérer les opérations d'emprunt et effectuer des recherches dans le catalogue.
Vous continuerez à construire sur la structure de votre projet existant :
Book.cs: Conservez votre classe Book avecId,Title,Author,IsAvailable, et 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 construites. Ajoutez une nouvelle méthodeGetAllBooks()qui retourne tous les livres de la bibliothèque, etGetAllUsers()qui retourne tous les utilisateurs enregistrés.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 de bibliothèque appropriées. Considérez cela comme le tableau de bord d'administration de votre système de bibliothèque.
Votre interface console doit gérer ces commandes :
ADD_BOOK|id|title|author- Ajoute un nouveau livre et afficheAdded: {Title}ADD_USER|name|memberId- Enregistre un nouvel utilisateur et afficheRegistered: {Name}BORROW|bookId|memberId- Traite une demande d'emprunt (utilisez votre logiqueBorrowBookexistante)RETURN|bookId|memberId- Traite une demande de retour (utilisez votre logiqueReturnBookexistante)SEARCH|type|value- Recherche dans le catalogue où le type esttitle,author,available, ouborrowedSTATUS- Affiche un résumé montrant le total des livres, les livres disponibles, le total des utilisateurs et le total des 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 la liste est vide.
Vous recevrez les entrées suivantes :
- Le nom de la bibliothèque
- Le nombre de commandes à traiter
- Chaque commande sur sa propre ligne dans les formats décrits ci-dessus
Par exemple, si les entrées sont :
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 :
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 agit comme le lien qui connecte l'entrée utilisateur à vos composants de bibliothèque bien organisés. Chaque commande délègue à la méthode appropriée de votre classe Library, démontrant comment une architecture propre rend la construction d'interfaces utilisateur simple !
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 Utilisateur