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.
Thử thách
Trung bìnhTrong 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ớpBookbạn đã tạo trong thử thách trướcuser.py: lớpUser, chứauser_id,namevàbooks_borroweddriver.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
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnh3Thuộc tính của lớp
Biến của instance và biến của lớpDecorator thuộc tínhThuộc tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng6Đóng gói
Thành viên public, protected, privateBộ điều chỉnh quyền truy cậpẨn thông tinDecorator thuộc tính nâng caoÔn tập: Hệ thống hồ sơ học sinh12Dự án: Quản lý thư viện
Tổng quan về dự ánLớp sách và người dùngHệ thống mượn sáchChức năng tìm kiếmGiao diện quản trịKiểm thử và tích hợpTự luyện tập: Trình biên dịch Python online