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.
Desafio
FácilVamos 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 comId,Title,Author,IsAvailablee os métodosBorrow()eReturn().User.cs: Mantenha sua classe User com o controle de empréstimos, a constanteMaxBooks,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étodoGetAllBooks()que retorne todos os livros da biblioteca eGetAllUsers()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 imprimeAdded: {Title}ADD_USER|name|memberId- Registra um novo usuário e imprimeRegistered: {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,availableouborrowedSTATUS- 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
STATUSA 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: 2Sua 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
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos12Projeto: Sistema de Biblioteca
Estrutura do ProjetoModelos de Livro e UsuárioLógica do Sistema de EmpréstimosLINQ para BuscasInterface de Console / Interface de AdminTestes de Unidade (NUnit/xUnit)Pratique por conta própria: Compilador de C# online