Sistema de préstamos
Parte de la sección Object Oriented Programming del Journey de Python de Coddy. Lección 57 de 64.
Desafío
IntermedioEn 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 claseBookque construiste en el desafío anterioruser.py— la claseUser, que contieneuser_id,nameybooks_borroweddriver.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
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias6Encapsulamiento
Miembros públicos, protegidos y privadosModificadores de accesoOcultamiento de informaciónDecoradores de propiedades avanzadosResumen - Sistema de registros de estudiantes12Proyecto: Gestión de biblioteca
Descripción general del proyectoClases de Libros y UsuariosSistema de préstamosFuncionalidad de búsquedaInterfaz de administradorPruebas e integraciónPractica por tu cuenta: Compilador de Python online