图书馆管理系统开发:如何为BookList类定义存储Book实例集合的方法?
实现BookList类存储图书实例
我们可以用字典作为存储容器,以图书的bookID作为键(保证唯一性),对应的Books实例作为值。下面是具体的实现代码,附带常用的操作方法:
完整代码示例
import random class Books: def __init__(self, title=None, author=None, year=None, publisher=None, num_copies=None, num_available_copies=None, publication_date=None): self.bookID = random.randint(1, 1000) self.title = title self.author = author self.year = year self.publisher = publisher self.num_copies = num_copies self.num_available_copies = num_available_copies self.publication_date = publication_date class BookList: def __init__(self): # 初始化字典,用于存储图书实例,key为bookID,value为Books对象 self.books_dict = {} def add_book(self, book): # 添加图书到字典,自动用bookID作为键 if isinstance(book, Books): self.books_dict[book.bookID] = book print(f"图书《{book.title}》已添加,ID: {book.bookID}") else: print("只能添加Books类的实例") def get_book_by_id(self, book_id): # 根据ID查找图书 return self.books_dict.get(book_id, None) def remove_book(self, book_id): # 根据ID删除图书 if book_id in self.books_dict: removed_book = self.books_dict.pop(book_id) print(f"已删除图书《{removed_book.title}》") else: print("未找到该ID的图书") def list_all_books(self): # 列出所有图书的基本信息 if not self.books_dict: print("暂无图书记录") return print("所有图书记录:") for book_id, book in self.books_dict.items(): print(f"ID: {book_id}, 书名: {book.title}, 作者: {book.author}, 可借数量: {book.num_available_copies}")
代码说明
BookList的构造方法里初始化了books_dict字典,专门用来存储图书实例。add_book方法会先校验传入对象是否为Books实例,确认后用它的bookID作为键存入字典(注意当前bookID是随机生成1-1000的整数,存在重复概率,后续可以改成自增ID更稳妥)。get_book_by_id、remove_book、list_all_books是日常管理图书时常用的操作方法,方便快速查询、删除和查看全部图书。
使用示例
# 创建图书列表实例 library_books = BookList() # 创建几本图书 book1 = Books(title="Python编程从入门到实践", author="埃里克·马瑟斯", year=2020, num_available_copies=5) book2 = Books(title="数据结构与算法分析", author="马克·艾伦·维斯", year=2019, num_available_copies=3) # 添加图书 library_books.add_book(book1) library_books.add_book(book2) # 查找图书 found_book = library_books.get_book_by_id(book1.bookID) if found_book: print(f"找到图书:{found_book.title}") # 列出所有图书 library_books.list_all_books() # 删除图书 library_books.remove_book(book2.bookID) library_books.list_all_books()
内容的提问来源于stack exchange,提问作者user19713364
相关产品推荐
相关产品推荐

