借阅系统
本课属于 Coddy Python 学习旅程的“面向对象编程”单元。第 57 课,共 64 课。
挑战
中等在这个挑战中,你将为图书馆管理系统添加借书功能。
编辑 library.py,并按照 TODO 注释实现 borrow_book 方法。
其他文件已提供给你,并且已锁定:
book.py:你在上一个挑战中编写的Book类user.py:包含user_id、name和books_borrowed的User类driver.py:使用测试场景测试你的实现
borrow_book(book_isbn, user_id) 必须恰好返回以下其中一个值:"Book not found"、"User not found"、"Book is not available" 或 "Book borrowed successfully"。
亲手试试
from book import Book
from user import User
from library import Library
# 综合测试用例处理程序
test_case = input()
# 基本功能测试
if test_case == "borrow_success":
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)
# 借阅图书
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")
# 添加图书和用户
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
book.available = False # 图书已被借出
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# 尝试借阅不可借的图书
result = library.borrow_book("123456", "U001")
print(result)
# 边界情况和其他测试
elif test_case == "multiple_books":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
# 创建多本图书
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)
# 借阅多本图书
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)
# 创建多个用户
users = [
User("U001", "Alice"),
User("U002", "Bob"),
User("U003", "Charlie")
]
for user in users:
library.add_user(user)
# 让不同用户尝试借阅同一本书
result1 = library.borrow_book("999", "U001")
result2 = library.borrow_book("999", "U002") # 应该会失败
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)
# 借阅这本书
borrow_result = library.borrow_book("123456", "U001")
print(borrow_result)
# 检查图书状态
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)
# 借阅这本书
library.borrow_book("123456", "U001")
# 检查引用关系
print(f"Book's borrower name: {book.borrower.name}")
print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")面向对象编程中的所有课
自己练习: Python 在线编译器