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 completar o seu Sistema de Biblioteca construindo uma interface de console que une todos os seus componentes! Você criará uma interface de administrador que processa comandos para gerenciar a biblioteca - adicionando livros, registrando usuários, lidando com operações de empréstimo e pesquisando no catálogo.

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

  • 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 rastreamento de empréstimos, a constante MaxBooks, CanBorrow() e métodos para gerenciar livros emprestados.
  • Library.cs: Mantenha sua classe Library com toda a lógica de empréstimo e métodos de busca LINQ que você construiu. Adicione um novo método GetAllBooks() que retorna todos os livros na biblioteca, e GetAllUsers() que retorna todos os usuários registrados.
  • Program.cs: É aqui que sua interface de console ganha vida! Você construirá um processador de comandos que lê comandos e executa as operações de biblioteca apropriadas. 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 BorrowBook existente)
  • RETURN|bookId|memberId - Processa uma solicitação de devolução (use sua lógica ReturnBook existente)
  • SEARCH|type|value - Pesquisa no catálogo onde o tipo é title, author, available ou borrowed
  • STATUS - Imprime um resumo mostrando o total de livros, livros disponíveis, total de usuários e 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 resultados de busca, 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 serem processados
  • 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 seus componentes de biblioteca bem organizados. Cada comando delega para o método apropriado em sua classe Library, demonstrando como uma arquitetura limpa torna a construção de interfaces de usuário direta!

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