Menu
CoddyTech

Hệ thống mượn sách

Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 57 trên 64.

challenge icon

Thử thách

Trung bình

Trong thử thách này, bạn sẽ thêm chức năng mượn sách vào hệ thống quản lý thư viện.

Chỉnh sửa library.py và triển khai phương thức borrow_book theo các chú thích TODO.

Các tệp còn lại được cung cấp sẵn và đã khóa:

  • book.py: lớp Book bạn đã tạo trong thử thách trước
  • user.py: lớp User, chứa user_id, name và books_borrowed
  • driver.py: chạy các tình huống kiểm thử với phần triển khai của bạn

borrow_book(book_isbn, user_id) phải trả về chính xác một trong các giá trị sau: "Book not found", "User not found", "Book is not available" hoặc "Book borrowed successfully".

Tự làm thử

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

# Xử lý toàn diện các test case
test_case = input()

# Kiểm tra các chức năng cơ bản
if test_case == "borrow_success":
    library = Library("Community Library")
    
    # Thêm sách và người dùng
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Mượn sách
    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")
    
    # Thêm sách và người dùng
    book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book.available = False  # Sách đã có người mượn
    library.add_book(book)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Thử mượn sách không còn sẵn
    result = library.borrow_book("123456", "U001")
    print(result)

# Các trường hợp đặc biệt và bài kiểm tra bổ sung
elif test_case == "multiple_books":
    library = Library("Community Library")
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Tạo nhiều cuốn sách
    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)
    
    # Mượn nhiều cuốn sách
    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)
    
    # Tạo nhiều người dùng
    users = [
        User("U001", "Alice"),
        User("U002", "Bob"),
        User("U003", "Charlie")
    ]
    
    for user in users:
        library.add_user(user)
    
    # Thử cho nhiều người dùng mượn cùng một cuốn sách
    result1 = library.borrow_book("999", "U001")
    result2 = library.borrow_book("999", "U002")  # Thao tác này sẽ thất bại
    
    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)
    
    # Mượn sách
    borrow_result = library.borrow_book("123456", "U001")
    print(borrow_result)
    
    # Kiểm tra trạng thái của sách
    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)
    
    # Mượn sách
    library.borrow_book("123456", "U001")
    
    # Kiểm tra các tham chiếu
    print(f"Book's borrower name: {book.borrower.name}")
    print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Python online