Menu
Coddy logo textTech

Modelos de Livro e Usuário

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 63 de 70.

challenge icon

Desafio

Fácil

Vamos expandir seu Sistema de Biblioteca construindo os modelos Book e User com funcionalidades mais ricas. Você adicionará rastreamento de status para livros, recursos de empréstimo para usuários e encapsulamento adequado para manter seus dados seguros.

Você continuará trabalhando com sua estrutura de quatro arquivos:

  • Book.cs: Aprimore sua classe Book com um identificador exclusivo e rastreamento de status. Cada livro deve ter um Id (string), Title (string), Author (string) e IsAvailable (bool, com padrão true). Adicione os métodos Borrow() e Return() que alteram o status de disponibilidade e retornam uma mensagem indicando sucesso ou falha. Se alguém tentar emprestar um livro indisponível, retorne "{Title} is not available". Se tentarem devolver um livro que já está disponível, retorne "{Title} was not borrowed". Operações bem-sucedidas devem retornar "{Title} has been borrowed" ou "{Title} has been returned".
  • User.cs: Expanda sua classe User para rastrear livros emprestados. Inclua Name (string), MemberId (int) e uma lista privada para armazenar os IDs dos livros emprestados. Adicione uma propriedade somente leitura BorrowedCount que retorna quantos livros o usuário possui atualmente. Inclua os métodos AddBorrowedBook(string bookId) e RemoveBorrowedBook(string bookId) para gerenciar os livros emprestados do usuário. Adicione também um método HasBook(string bookId) que retorna true se o usuário tiver emprestado aquele livro específico.
  • Library.cs: Sua classe Library deve manter coleções de livros e usuários. Inclua os métodos AddBook(Book book) e RegisterUser(User user) para popular a biblioteca. Adicione um método GetBookById(string id) que retorna o livro com esse ID (ou null se não for encontrado) e GetUserById(int memberId) que funciona de forma semelhante para usuários.
  • Program.cs: Reúna tudo processando as operações da biblioteca com base na entrada.

Você receberá as seguintes entradas:

  • Nome da biblioteca
  • Número de livros a serem adicionados
  • Para cada livro: id|title|author
  • Número de usuários a serem registrados
  • Para cada usuário: name|memberId
  • Número de operações a serem realizadas
  • Para cada operação: action|bookId|memberId onde action é borrow ou return

Para cada operação, imprima o resultado da ação de empréstimo ou devolução. Após todas as operações, imprima um resumo para cada usuário mostrando seu nome e quantos livros ele tem emprestados no momento no formato {Name}: {BorrowedCount} book(s).

Por exemplo, se as entradas forem:

Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101

A saída deve ser:

Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)

Observe como Alice empresta com sucesso dois livros, mas quando Bob tenta emprestar Clean Code (que Alice já possui), a operação falha. Depois que Alice devolve Clean Code, sua contagem cai para 1. Isso demonstra como seus modelos trabalham juntos para aplicar as regras da biblioteca!

Experimente você mesmo

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Lê as entradas
            string libraryName = Console.ReadLine();
            string bookInput = Console.ReadLine();
            string userInput = Console.ReadLine();

            // Analisa a entrada do livro (formato: title|author)
            string[] bookParts = bookInput.Split('|');
            string bookTitle = bookParts[0];
            string bookAuthor = bookParts[1];

            // Analisa a entrada do usuário (formato: name|memberId)
            string[] userParts = userInput.Split('|');
            string userName = userParts[0];
            int memberId = Convert.ToInt32(userParts[1]);

            // Cria uma instância de Library com o nome da biblioteca
            Library library = new Library(libraryName);

            // Cria uma instância de Book com o título e o autor
            Book book = new Book(bookTitle, bookAuthor);

            // Cria uma instância de User com o nome e o ID de membro
            User user = new User(userName, memberId);

            // Imprime as informações da biblioteca usando GetInfo()
            Console.WriteLine(library.GetInfo());

            // Imprime as informações do livro no formato: Book: {Title} by {Author} - Available: {IsAvailable}
            Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");

            // Imprime as informações do usuário no formato: User: {Name} (ID: {MemberId})
            Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
        }
    }
}

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