Interfaccia console / interfaccia amministratore
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 66 di 70.
Sfida
FacileCompletiamo il tuo sistema bibliotecario creando un’interfaccia console che riunisce tutti i tuoi componenti! Creerai un’interfaccia di amministrazione che elabora i comandi per gestire la biblioteca: aggiungere libri, registrare utenti, gestire le operazioni di prestito e cercare nel catalogo.
Continuerai a sviluppare la struttura del tuo progetto esistente:
Book.cs: mantieni la tua classe Book conId,Title,Author,IsAvailablee i metodiBorrow()eReturn().User.cs: mantieni la tua classe User con il tracciamento dei prestiti, la costanteMaxBooks,CanBorrow()e i metodi per gestire i libri presi in prestito.Library.cs: mantieni la tua classe Library con tutta la logica dei prestiti e i metodi di ricerca LINQ che hai creato. Aggiungi un nuovo metodoGetAllBooks()che restituisca tutti i libri della biblioteca eGetAllUsers()che restituisca tutti gli utenti registrati.Program.cs: è qui che la tua interfaccia console prende vita! Creerai un elaboratore di comandi che legge i comandi ed esegue le operazioni appropriate sulla biblioteca. Considerala come il pannello di amministrazione del tuo sistema bibliotecario.
La tua interfaccia console dovrebbe gestire questi comandi:
ADD_BOOK|id|title|author- Aggiunge un nuovo libro e stampaAdded: {Title}ADD_USER|name|memberId- Registra un nuovo utente e stampaRegistered: {Name}BORROW|bookId|memberId- Elabora una richiesta di prestito (usa la logica esistente di BorrowBook)RETURN|bookId|memberId- Elabora una richiesta di restituzione (usa la logica esistente di ReturnBook)SEARCH|type|value- Cerca nel catalogo, dove il tipo ètitle,author,availableoppureborrowedSTATUS- Stampa un riepilogo con il numero totale di libri, i libri disponibili, gli utenti totali e i libri presi in prestito
Per il comando STATUS, stampa il riepilogo in questo formato:
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}Per i risultati della ricerca, stampa ogni libro su una riga a sé stante nel formato {Title} by {Author}, oppure No books found se non ci sono risultati.
Riceverai i seguenti input:
- Nome della biblioteca
- Numero di comandi da elaborare
- Ogni comando su una riga a sé stante, nei formati descritti sopra
Per esempio, se gli input sono:
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
STATUSL’output dovrebbe essere:
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: 2La tua interfaccia console funge da collante tra l’input dell’utente e i componenti ben organizzati della tua biblioteca. Ogni comando delega l’operazione al metodo appropriato della tua classe Library, dimostrando come un’architettura pulita renda semplice creare interfacce utente!
Provalo tu
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Leggi il nome della biblioteca
string libraryName = Console.ReadLine();
// Crea un'istanza di Library con il nome della biblioteca
Library library = new Library(libraryName);
// Leggi il numero di comandi
int numCommands = Convert.ToInt32(Console.ReadLine());
// Elabora ogni comando
for (int i = 0; i < numCommands; i++)
{
string commandLine = Console.ReadLine();
string[] parts = commandLine.Split('|');
string command = parts[0];
// TODO: Gestisci il comando ADD_BOOK
// Formato: ADD_BOOK|id|title|author
// Stampa: Added: {title}
// TODO: Gestisci il comando ADD_USER
// Formato: ADD_USER|name|memberId
// Stampa: Registered: {name}
// TODO: Gestisci il comando BORROW
// Formato: BORROW|bookId|memberId
// Stampa il risultato di library.BorrowBook()
// TODO: Gestisci il comando RETURN
// Formato: RETURN|bookId|memberId
// Stampa il risultato di library.ReturnBook()
// TODO: Gestisci il comando SEARCH
// Formato: SEARCH|type|value (type può essere title, author, available, borrowed)
// Stampa ogni libro come "{Title} by {Author}" oppure "No books found"
// TODO: Gestisci il comando STATUS
// Stampa:
// --- Library Status ---
// Total Books: {count}
// Disponibili: {count}
// Total Users: {count}
// Books Borrowed: {count}
}
}
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studenti9Argomenti variabili
La parola chiave 'params'Parametri opzionaliArgomenti con nomeOverloading dei metodi12Progetto: Sistema bibliotecario
Struttura del progettoModelli di libri e utentiLogica del sistema di prestitoRicerca con LINQInterfaccia console / interfaccia amministratoreTest unitari (NUnit/xUnit)Esercitati da solo: Compilatore C# online