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 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 comId,Title,Author,IsAvailablee os métodosBorrow()eReturn().User.cs: Mantenha sua classe User com o rastreamento de empréstimos, a constanteMaxBooks,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étodoGetAllBooks()que retorna todos os livros na biblioteca, eGetAllUsers()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 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ógicaBorrowBookexistente)RETURN|bookId|memberId- Processa uma solicitação de devolução (use sua lógicaReturnBookexistente)SEARCH|type|value- Pesquisa no catálogo onde o tipo étitle,author,availableouborrowedSTATUS- 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
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 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
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ário