Menu
Coddy logo textTech

Sistema de Empréstimos

Parte da seção Object Oriented Programming do Journey de Python da Coddy. Lição 57 de 64.

challenge icon

Desafio

Médio

Neste desafio, você adicionará a funcionalidade de empréstimo ao sistema de gerenciamento de biblioteca.

Edite library.py e implemente o método borrow_book, seguindo os comentários TODO.

Os outros arquivos são fornecidos para você e estão bloqueados:

  • book.py — a classe Book que você construiu no desafio anterior
  • user.py — a classe User, contendo user_id, name e books_borrowed
  • driver.py — executa os cenários de teste contra sua implementação

borrow_book(book_isbn, user_id) deve retornar exatamente um dos seguintes: "Book not found", "User not found", "Book is not available", ou "Book borrowed successfully".

Experimente você mesmo

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

# Manipulador abrangente de casos de teste
test_case = input()

# Testes de funcionalidade básica
if test_case == "borrow_success":
    library = Library("Community Library")
    
    # Adicionar livros e usuários
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Emprestar livro
    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")
    
    # Adicionar livros e usuários
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book.available = False  # O livro já está emprestado
    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 de borda e testes adicionais
elif test_case == "multiple_books":
    library = Library("Community Library")
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Criar vários livros
    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)
    
    # Emprestar vários livros
    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)
    
    # Criar vários usuários
    users = [
        User("U001", "Alice"),
        User("U002", "Bob"),
        User("U003", "Charlie")
    ]
    
    for user in users:
        library.add_user(user)
    
    # Tentar emprestar o mesmo livro com usuários diferentes
    result1 = library.borrow_book("999", "U001")
    result2 = library.borrow_book("999", "U002")  # Deve falhar
    
    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)
    
    # Emprestar o livro
    borrow_result = library.borrow_book("123456", "U001")
    print(borrow_result)
    
    # Verifica o status do livro
    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)
    
    # Emprestar o livro
    library.borrow_book("123456", "U001")
    
    # Verifica as referências
    print(f"Book's borrower name: {book.borrower.name}")
    print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")

Todas as lições de Object Oriented Programming

Pratique por conta própria: Compilador de Python online