Menu
Coddy logo textTech

Sistema de préstamos

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

challenge icon

Desafío

Fácil

Continuemos construyendo el Sistema de Gestión de Biblioteca creando un sistema de préstamo adecuado con una clase Library que gestione la colección de libros y usuarios. Aquí es donde tu sistema empieza a sentirse como una biblioteca real: ¡rastreando quién tiene qué y aplicando reglas de préstamo!

Organizarás tu código en cuatro archivos:

  • Book.java: Mantén tu clase Book del desafío anterior con toda su funcionalidad: isbn, title, author, isAvailable, borrowedBy, getDetails() y los getters/setters apropiados.
  • User.java: Mantén tu clase User con id, name, el ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() y toString().
  • Library.java: Crea la clase central Library que gestiona todo. Tu biblioteca debe mantener dos ArrayLists: uno para objetos Book y otro para objetos User. Incluye estos métodos:

    addBook(Book book) - añade un libro a la colección de la biblioteca.

    registerUser(User user) - añade un usuario a los usuarios registrados de la biblioteca.

    findBookByIsbn(String isbn) - busca a través de los libros y devuelve el Book con el ISBN coincidente, o null si no se encuentra.

    findUserById(String id) - busca a través de los usuarios y devuelve el User con el ID coincidente, o null si no se encuentra.

    borrowBook(String userId, String isbn) - busca al usuario y al libro, luego, si ambos existen y el libro está disponible, hace que el usuario tome prestado el libro e imprime [userName] borrowed [bookTitle]. Si el libro no está disponible, imprime Book not available. Si no se encuentra el usuario o el libro, imprime Invalid user or book.

    returnBook(String userId, String isbn) - busca al usuario y al libro, luego hace que el usuario devuelva el libro e imprime [userName] returned [bookTitle]. Si no se encuentra el usuario o el libro, imprime Invalid user or book.

  • Main.java: ¡Une todo tu sistema de biblioteca! Recibirás entradas para dos libros (ISBN, título, autor cada uno), un usuario (ID, nombre) y luego una serie de operaciones.

    Crea una Library, añade ambos libros y registra al usuario. Luego procesa las operaciones: recibirás una cadena separada por comas donde cada operación tiene el formato borrow:userId:isbn o return:userId:isbn.

    Después de procesar todas las operaciones, imprime un resumen que muestre el estado de cada libro en el formato [isbn]: [Available/Borrowed].

Recibirás las entradas en este orden: ISBN del libro1, título del libro1, autor del libro1, ISBN del libro2, título del libro2, autor del libro2, ID del usuario, nombre del usuario y, finalmente, la cadena de operaciones.

Por ejemplo, con las entradas ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice, y borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, tu salida sería:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

Este desafío reúne composición, encapsulamiento y diseño de métodos para crear un sistema cohesivo. ¡La clase Library actúa como un coordinador, delegando la lógica de préstamo real a las clases User y Book mientras gestiona la colección general!

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer información del libro 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Leer información del libro 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Leer información del usuario
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Leer cadena de operaciones (separadas por comas, formato: borrow:userId:isbn o return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Crear objetos Book para book1 y book2
        
        // TODO: Crear un objeto User
        
        // TODO: Crear una Library, añadir ambos libros y registrar al usuario
        
        // TODO: Dividir operationsStr por "," y procesar cada operación
        //       Para cada operación, dividir por ":" para obtener action, userId, isbn
        //       Llamar a library.borrowBook() o library.returnBook() según corresponda
        
        // TODO: Imprimir el resumen de cada libro en el formato "[isbn]: [Available/Borrowed]"
    }
}

Todas las lecciones de Programación Orientada a Objetos