Menu
Coddy logo textTech

Sistema de préstamos

Parte de la sección Object Oriented Programming del Journey de Python de Coddy. Lección 57 de 64.

challenge icon

Desafío

Intermedio

En este desafío, agregarás la funcionalidad de préstamo al sistema de gestión de la biblioteca.

Edita library.py e implementa el método borrow_book, siguiendo los comentarios TODO.

Los otros archivos se proporcionan para ti y están bloqueados:

  • book.py — la clase Book que construiste en el desafío anterior
  • user.py — la clase User, que contiene user_id, name y books_borrowed
  • driver.py — ejecuta los escenarios de prueba contra tu implementación

borrow_book(book_isbn, user_id) debe devolver exactamente uno de los siguientes: "Book not found", "User not found", "Book is not available", o "Book borrowed successfully".

Pruébalo tú mismo

from book import Book
from user import User
from library import Library

# Manejador exhaustivo de casos de prueba
test_case = input()

# Pruebas de funcionalidad básica
if test_case == "borrow_success":
    library = Library("Community Library")
    
    # Añadir libros y usuarios
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Pedir libro prestado
    result = library.borrow_book("123456", "U001")
    print(result)
    print(f"Book available: {book.available}")
    print(f"Books borrowed by user: {len(user.books_borrowed)}")

elif test_case == "book_not_found":
    library = Library("Community Library")
    user = User("U001", "Alice")
    library.add_user(user)
    
    result = library.borrow_book("nonexistent", "U001")
    print(result)

elif test_case == "user_not_found":
    library = Library("Community Library")
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    result = library.borrow_book("123456", "nonexistent")
    print(result)
    
elif test_case == "book_not_available":
    library = Library("Community Library")
    
    # Añadir libros y usuarios
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book.available = False  # El libro ya está prestado
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Try to borrow unavailable book
    result = library.borrow_book("123456", "U001")
    print(result)

# Casos límite y pruebas adicionales
elif test_case == "multiple_books":
    library = Library("Community Library")
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Crear múltiples libros
    books = [
        Book("Book 1", "Author 1", "111"),
        Book("Book 2", "Author 2", "222"),
        Book("Book 3", "Author 3", "333")
    ]
    
    for book in books:
        library.add_book(book)
    
    # Pedir prestados múltiples libros
    results = []
    for book in books:
        results.append(library.borrow_book(book.isbn, "U001"))
    
    for result in results:
        print(result)
    
    print(f"Total books borrowed: {len(user.books_borrowed)}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    book = Book("Popular Book", "Famous Author", "999")
    library.add_book(book)
    
    # Crear múltiples usuarios
    users = [
        User("U001", "Alice"),
        User("U002", "Bob"),
        User("U003", "Charlie")
    ]
    
    for user in users:
        library.add_user(user)
    
    # Intentar pedir prestado el mismo libro con diferentes usuarios
    result1 = library.borrow_book("999", "U001")
    result2 = library.borrow_book("999", "U002")  # Debería fallar
    
    print(result1)
    print(result2)
    print(f"Book's borrower: {book.borrower.name}")

elif test_case == "return_book":
    library = Library("Community Library")
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Pedir prestado el libro
    borrow_result = library.borrow_book("123456", "U001")
    print(borrow_result)
    
    # Verifica el estado del libro
    print(f"Book available: {book.available}")
    print(f"Book borrower: {book.borrower.name}")
    print(f"User's borrowed books: {len(user.books_borrowed)}")
    print(f"First borrowed book title: {user.books_borrowed[0].title}")

elif test_case == "empty_library":
    library = Library("Empty Library")
    result = library.borrow_book("any_isbn", "any_user_id")
    print(result)

elif test_case == "borrower_reference":
    library = Library("Community Library")
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Pedir prestado el libro
    library.borrow_book("123456", "U001")
    
    # Verifica las referencias
    print(f"Book's borrower name: {book.borrower.name}")
    print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")

Todas las lecciones de Object Oriented Programming

Practica por tu cuenta: Compilador de Python online