Menu
Coddy logo textTech

Interface de Console / Interface de Admin

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy. Lição 66 de 70.

challenge icon

Desafio

Fácil

Vamos concluir seu Library System construindo uma interface de console que reúna todos os seus componentes! Você criará uma interface de administrador que processa comandos para gerenciar a biblioteca — adicionar livros, registrar usuários, processar operações de empréstimo e pesquisar o catálogo.

Você continuará desenvolvendo sobre a estrutura existente do seu projeto:

  • Book.cs: Mantenha sua classe Book com Id, Title, Author, IsAvailable e os métodos Borrow() e Return().
  • User.cs: Mantenha sua classe User com o controle de empréstimos, a constante MaxBooks, CanBorrow() e os métodos para gerenciar livros emprestados.
  • Library.cs: Mantenha sua classe Library com toda a lógica de empréstimos e os métodos de pesquisa com LINQ que você desenvolveu. Adicione um novo método GetAllBooks() que retorne todos os livros da biblioteca e GetAllUsers() que retorne todos os usuários registrados.
  • Program.cs: É aqui que sua interface de console ganhará vida! Você criará um processador de comandos que lê os comandos e executa as operações apropriadas da biblioteca. Pense nisso como o painel de administração do seu sistema de biblioteca.

Sua interface de console deve lidar com estes comandos:

  • ADD_BOOK|id|title|author - Adiciona um novo livro e imprime Added: {Title}
  • ADD_USER|name|memberId - Registra um novo usuário e imprime Registered: {Name}
  • BORROW|bookId|memberId - Processa uma solicitação de empréstimo (use sua lógica existente de BorrowBook)
  • RETURN|bookId|memberId - Processa uma solicitação de devolução (use sua lógica existente de ReturnBook)
  • SEARCH|type|value - Pesquisa o catálogo quando type é title, author, available ou borrowed
  • STATUS - Imprime um resumo mostrando o total de livros, os livros disponíveis, o total de usuários e o total de livros emprestados

Para o comando STATUS, imprima o resumo neste formato:

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

Para os resultados da pesquisa, imprima cada livro como {Title} by {Author} em sua própria linha ou No books found se estiver vazio.

Você receberá as seguintes entradas:

  • Nome da biblioteca
  • Número de comandos a processar
  • Cada comando em sua própria linha, nos formatos descritos acima

Por exemplo, se as entradas forem:

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

A saída deve 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

Sua interface de console atua como a cola que conecta a entrada do usuário aos componentes bem organizados da sua biblioteca. Cada comando delega à função apropriada na sua classe Library, demonstrando como uma arquitetura limpa torna simples a criação de interfaces de usuário!

Experimente você mesmo

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Ler o nome da biblioteca
            string libraryName = Console.ReadLine();
            
            // Criar uma instância de Library com o nome da biblioteca
            Library library = new Library(libraryName);
            
            // Ler o número de comandos
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // Processar cada comando
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: Lidar com o comando ADD_BOOK
                // Formato: ADD_BOOK|id|title|author
                // Imprimir: Added: {title}
                
                // TODO: Lidar com o comando ADD_USER
                // Formato: ADD_USER|name|memberId
                // Imprimir: Registered: {name}
                
                // TODO: Lidar com o comando BORROW
                // Formato: BORROW|bookId|memberId
                // Imprimir o resultado de library.BorrowBook()
                
                // TODO: Lidar com o comando RETURN
                // Formato: RETURN|bookId|memberId
                // Imprimir o resultado de library.ReturnBook()
                
                // TODO: Lidar com o comando SEARCH
                // Formato: SEARCH|type|value (type pode ser title, author, available, borrowed)
                // Imprimir cada livro como "{Title} by {Author}" ou "No books found"
                
                // TODO: Lidar com o comando STATUS
                // Imprimir:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C# online