Menu
Coddy logo textTech

Clases de Libro y Usuario

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 78 de 87.

challenge icon

Desafío

Fácil

Continuemos construyendo el Sistema de Gestión de Biblioteca expandiendo las clases Book y User de la lección anterior. Ahora agregarás la capacidad para que los usuarios tomen prestados libros, creando una conexión real entre estas dos entidades.

Organizarás tu código en tres archivos:

  • Book.java: Mejora tu clase Book del desafío anterior. Mantén toda la funcionalidad existente (isbn, title, author, isAvailable con getters/setters, y getDetails()). Ahora agrega un campo privado borrowedBy de tipo String que almacene el ID del usuario que tomó prestado el libro (o null si no ha sido prestado). Agrega un getter para borrowedBy y un setter que también actualice isAvailable en consecuencia: cuando se presta un libro (borrowedBy se establece en un valor no nulo), este deja de estar disponible; cuando se devuelve (se establece en null), vuelve a estar disponible.
  • User.java: Expande tu clase User para rastrear los libros prestados. Mantén los campos id, name, el constructor, los getters y toString() existentes. Agrega un campo privado ArrayList<Book> llamado borrowedBooks (inicialízalo en el constructor). Crea un método borrowBook(Book book) que agregue el libro a la lista del usuario y establezca el borrowedBy del libro con el ID de este usuario. Crea un método returnBook(Book book) que elimine el libro de la lista y establezca borrowedBy en null. Agrega un método getBorrowedCount() que devuelva cuántos libros tiene el usuario actualmente.
  • Main.java: Demuestra el sistema de préstamos en acción. Recibirás cinco entradas: ISBN, título, autor de un libro, luego el ID y el nombre del usuario.

    Crea un Book y un User con estas entradas. Imprime los detalles del libro y su estado de disponibilidad. Luego, haz que el usuario tome prestado el libro. Imprime la disponibilidad del libro nuevamente, seguido de quién lo tomó prestado en el formato Borrowed by: [userId]. Imprime cuántos libros tiene el usuario en el formato [name] has [count] book(s). Finalmente, haz que el usuario devuelva el libro e imprime la disponibilidad una vez más.

Recibirás cinco entradas en orden: ISBN (String), título (String), autor (String), ID de usuario (String) y nombre de usuario (String).

Por ejemplo, con las entradas 978-0-13-468599-1, Effective Java, Joshua Bloch, U001, y Alice, tu salida sería:

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

Este desafío se basa directamente en tu trabajo anterior, agregando la relación crucial entre libros y usuarios que hace que un sistema de biblioteca sea funcional. ¡Usarás composición (User "tiene" Books) y verás cómo los cambios en un objeto pueden afectar a otro a través de métodos bien diseñados!

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer la información del libro
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Leer la información del usuario
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Crear un objeto Book con isbn, título y autor
        Book book = new Book(isbn, title, author);
        
        // Crear un objeto User con userId y userName
        User user = new User(userId, userName);
        
        // Imprimir los detalles del libro usando getDetails()
        System.out.println(book.getDetails());
        
        // Imprimir si el libro está disponible (formato: "Available: true" o "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Hacer que el usuario pida prestado el libro
        user.borrowBook(book);
        
        // Imprimir la disponibilidad del libro nuevamente
        System.out.println("Available: " + book.isAvailable());
        
        // Imprimir quién lo pidió prestado
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Imprimir cuántos libros tiene el usuario
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Hacer que el usuario devuelva el libro
        user.returnBook(book);
        
        // Imprimir la disponibilidad una vez más
        System.out.println("Available: " + book.isAvailable());
    }
}

Todas las lecciones de Programación Orientada a Objetos