Menu
Coddy logo textTech

Système d'emprunt

Fait partie de la section Object Oriented Programming du Journey Python de Coddy. Leçon 57 sur 64.

challenge icon

Défi

Moyen

Dans ce défi, vous allez ajouter la fonctionnalité d'emprunt au système de gestion de bibliothèque.

Modifiez library.py et implémentez la méthode borrow_book, en suivant les commentaires TODO.

Les autres fichiers vous sont fournis et sont verrouillés :

  • book.py — la classe Book que vous avez construite dans le défi précédent
  • user.py — la classe User, contenant user_id, name et books_borrowed
  • driver.py — exécute les scénarios de test par rapport à votre implémentation

borrow_book(book_isbn, user_id) doit retourner exactement l'un des messages suivants : "Book not found", "User not found", "Book is not available", ou "Book borrowed successfully".

Essayez vous-même

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

# Gestionnaire complet de cas de test
test_case = input()

# Tests de fonctionnalités de base
if test_case == "borrow_success":
    library = Library("Community Library")
    
    # Ajouter des livres et des utilisateurs
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Emprunter un livre
    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")
    
    # Ajouter des livres et des utilisateurs
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book.available = False  # Le livre est déjà emprunté
    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)

# Cas limites et tests supplémentaires
elif test_case == "multiple_books":
    library = Library("Community Library")
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Créer plusieurs livres
    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)
    
    # Emprunter plusieurs livres
    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)
    
    # Créer plusieurs utilisateurs
    users = [
        User("U001", "Alice"),
        User("U002", "Bob"),
        User("U003", "Charlie")
    ]
    
    for user in users:
        library.add_user(user)
    
    # Essayer d'emprunter le même livre avec différents utilisateurs
    result1 = library.borrow_book("999", "U001")
    result2 = library.borrow_book("999", "U002")  # Devrait échouer
    
    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)
    
    # Emprunter le livre
    borrow_result = library.borrow_book("123456", "U001")
    print(borrow_result)
    
    # Vérifier le statut du livre
    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)
    
    # Emprunter le livre
    library.borrow_book("123456", "U001")
    
    # Vérifier les références
    print(f"Book's borrower name: {book.borrower.name}")
    print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")

Toutes les leçons de Object Oriented Programming

Entraînez-vous par vous-même : Compilateur Python en ligne