Menu
Coddy logo textTech

Interfaccia console / interfaccia amministratore

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 66 di 70.

challenge icon

Sfida

Facile

Completiamo 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 con Id, Title, Author, IsAvailable e i metodi Borrow() e Return().
  • User.cs: mantieni la tua classe User con il tracciamento dei prestiti, la costante MaxBooks, 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 metodo GetAllBooks() che restituisca tutti i libri della biblioteca e GetAllUsers() 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 stampa Added: {Title}
  • ADD_USER|name|memberId - Registra un nuovo utente e stampa Registered: {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, available oppure borrowed
  • STATUS - 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
STATUS

L’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: 2

La 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

Esercitati da solo: Compilatore C# online