Menu
Coddy logo textTech

Modelos de Libro y Usuario

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 63 de 70.

challenge icon

Desafío

Fácil

Vamos a expandir tu Sistema de Biblioteca construyendo los modelos Book y User con una funcionalidad más rica. Agregarás seguimiento de estado para los libros, capacidades de préstamo para los usuarios y una encapsulación adecuada para mantener tus datos seguros.

Continuarás trabajando con tu estructura de cuatro archivos:

  • Book.cs: Mejora tu clase Book con un identificador único y seguimiento de estado. Cada libro debe tener un Id (string), Title (string), Author (string) e IsAvailable (bool, por defecto true). Agrega los métodos Borrow() y Return() que cambien el estado de disponibilidad y devuelvan un mensaje indicando éxito o fallo. Si alguien intenta pedir prestado un libro no disponible, devuelve "{Title} is not available". Si intentan devolver un libro que ya está disponible, devuelve "{Title} was not borrowed". Las operaciones exitosas deben devolver "{Title} has been borrowed" o "{Title} has been returned".
  • User.cs: Expande tu clase User para rastrear los libros prestados. Incluye Name (string), MemberId (int) y una lista privada para almacenar los IDs de los libros prestados. Agrega una propiedad de solo lectura BorrowedCount que devuelva cuántos libros tiene el usuario actualmente. Incluye los métodos AddBorrowedBook(string bookId) y RemoveBorrowedBook(string bookId) para gestionar los libros prestados del usuario. También agrega un método HasBook(string bookId) que devuelva true si el usuario ha pedido prestado ese libro específico.
  • Library.cs: Tu clase Library debe mantener colecciones de libros y usuarios. Incluye los métodos AddBook(Book book) y RegisterUser(User user) para poblar la biblioteca. Agrega un método GetBookById(string id) que devuelva el libro con ese ID (o null si no se encuentra), y GetUserById(int memberId) que funcione de manera similar para los usuarios.
  • Program.cs: Une todo procesando las operaciones de la biblioteca basadas en la entrada.

Recibirás las siguientes entradas:

  • Nombre de la biblioteca
  • Número de libros a agregar
  • Para cada libro: id|title|author
  • Número de usuarios a registrar
  • Para cada usuario: name|memberId
  • Número de operaciones a realizar
  • Para cada operación: action|bookId|memberId donde action es borrow o return

Para cada operación, imprime el resultado de la acción de préstamo o devolución. Después de todas las operaciones, imprime un resumen para cada usuario mostrando su nombre y cuántos libros tiene prestados actualmente en el formato {Name}: {BorrowedCount} book(s).

Por ejemplo, si las entradas son:

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

La salida debería 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)

Observa cómo Alice pide prestados con éxito dos libros, pero cuando Bob intenta pedir prestado Clean Code (que Alice ya tiene), la operación falla. Después de que Alice devuelve Clean Code, su cuenta baja a 1. ¡Esto demuestra cómo tus modelos trabajan juntos para hacer cumplir las reglas de la biblioteca!

Pruébalo tú mismo

using System;

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

            // Analizar la entrada del libro (formato: title|author)
            string[] bookParts = bookInput.Split('|');
            string bookTitle = bookParts[0];
            string bookAuthor = bookParts[1];

            // Analizar la entrada del usuario (formato: name|memberId)
            string[] userParts = userInput.Split('|');
            string userName = userParts[0];
            int memberId = Convert.ToInt32(userParts[1]);

            // Crear una instancia de Library con el nombre de la biblioteca
            Library library = new Library(libraryName);

            // Crear una instancia de Book con el título y el autor
            Book book = new Book(bookTitle, bookAuthor);

            // Crear una instancia de User con el nombre y el ID de miembro
            User user = new User(userName, memberId);

            // Imprimir la información de la biblioteca usando GetInfo()
            Console.WriteLine(library.GetInfo());

            // Imprimir la información del libro en formato: Book: {Title} by {Author} - Available: {IsAvailable}
            Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");

            // Imprimir la información del usuario en formato: User: {Name} (ID: {MemberId})
            Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
        }
    }
}

Todas las lecciones de Programación Orientada a Objetos