Menu
Coddy logo textTech

Interfaz de Consola / Interfaz de Administrador

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 66 de 70.

challenge icon

Desafío

Fácil

¡Vamos a completar tu Sistema de Biblioteca construyendo una interfaz de consola que reúna todos tus componentes! Crearás una interfaz de administrador que procese comandos para gestionar la biblioteca: añadir libros, registrar usuarios, manejar operaciones de préstamo y buscar en el catálogo.

Continuarás construyendo sobre la estructura de tu proyecto existente:

  • Book.cs: Mantén tu clase Book con Id, Title, Author, IsAvailable, y los métodos Borrow() y Return().
  • User.cs: Mantén tu clase User con el seguimiento de préstamos, la constante MaxBooks, CanBorrow(), y los métodos para gestionar los libros prestados.
  • Library.cs: Mantén tu clase Library con toda la lógica de préstamos y los métodos de búsqueda LINQ que has construido. Añade un nuevo método GetAllBooks() que devuelva todos los libros de la biblioteca, y GetAllUsers() que devuelva todos los usuarios registrados.
  • Program.cs: ¡Aquí es donde tu interfaz de consola cobra vida! Construirás un procesador de comandos que lea comandos y ejecute las operaciones de biblioteca apropiadas. Piensa en esto como el panel de administración de tu sistema de biblioteca.

Tu interfaz de consola debe manejar estos comandos:

  • ADD_BOOK|id|title|author - Añade un nuevo libro e imprime Added: {Title}
  • ADD_USER|name|memberId - Registra un nuevo usuario e imprime Registered: {Name}
  • BORROW|bookId|memberId - Procesa una solicitud de préstamo (usa tu lógica BorrowBook existente)
  • RETURN|bookId|memberId - Procesa una solicitud de devolución (usa tu lógica ReturnBook existente)
  • SEARCH|type|value - Busca en el catálogo donde el tipo es title, author, available, o borrowed
  • STATUS - Imprime un resumen que muestra el total de libros, libros disponibles, total de usuarios y total de libros prestados

Para el comando STATUS, imprime el resumen en este formato:

--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}

Para los resultados de búsqueda, imprime cada libro como {Title} by {Author} en su propia línea, o No books found si está vacío.

Recibirás las siguientes entradas:

  • Nombre de la biblioteca
  • Número de comandos a procesar
  • Cada comando en su propia línea en los formatos descritos anteriormente

Por ejemplo, si las entradas son:

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

La salida debería ser:

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

Tu interfaz de consola actúa como el pegamento que conecta la entrada del usuario con tus componentes de biblioteca bien organizados. Cada comando delega en el método apropiado de tu clase Library, ¡demostrando cómo una arquitectura limpia hace que la construcción de interfaces de usuario sea sencilla!

Pruébalo tú mismo

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Leer el nombre de la biblioteca
            string libraryName = Console.ReadLine();
            
            // Crear una instancia de Library con el nombre de la biblioteca
            Library library = new Library(libraryName);
            
            // Leer el número de comandos
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // Procesar cada comando
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: Manejar el comando ADD_BOOK
                // Formato: ADD_BOOK|id|title|author
                // Imprimir: Added: {title}
                
                // TODO: Manejar el comando ADD_USER
                // Formato: ADD_USER|name|memberId
                // Imprimir: Registered: {name}
                
                // TODO: Manejar el comando BORROW
                // Formato: BORROW|bookId|memberId
                // Imprimir el resultado de library.BorrowBook()
                
                // TODO: Manejar el comando RETURN
                // Formato: RETURN|bookId|memberId
                // Imprimir el resultado de library.ReturnBook()
                
                // TODO: Manejar el comando SEARCH
                // Formato: SEARCH|type|value (type puede ser title, author, available, borrowed)
                // Imprimir cada libro como "{Title} by {Author}" o "No books found"
                
                // TODO: Manejar el comando STATUS
                // Imprimir:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

Todas las lecciones de Programación Orientada a Objetos