news 2026/4/23 16:20:04

python面向对象————图书馆借阅系统(综合练习)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python面向对象————图书馆借阅系统(综合练习)

练习题5:图书馆借阅系统(综合练习)
设计一个图书馆借阅系统,综合运用三大特性:
**要求:**
- 基类 `LibraryItem`(封装):
- 私有属性:`__item_id`、`__title`、`__is_borrowed`
- 方法:
- `borrow()`:修改`__is_borrowed`为True
- `return_item()`:修改`__is_borrowed`为False
- ``get_info()`:编号:xx,名称:xx,是否可借阅:是/否
- 派生类(继承与多态):
- `Book`:额外属性 `author`、`pages`,重写 `get_info()`
- `DVD`:额外属性 `director`、`duration`,重写 `get_info()`
- `Magazine`:额外属性 `issue_number`,重写 `get_info()`
- 类 `Library`(组合):
- 属性:物品列表
- 方法:`add_item()`、`remove_item()`、`search_by_title()`、`display_available_items()`
- 实现多态:`display_item_info(item)` 函数能正确显示任何类型物品的信息

""" @Author: @Time:2026/4/15 @Desc:练习题5:图书馆借阅系统(综合练习) 设计一个图书馆借阅系统,综合运用三大特性: **要求:** - 基类 `LibraryItem`(封装): - 私有属性:`__item_id`、`__title`、`__is_borrowed` - 方法: - `borrow()`:修改`__is_borrowed`为True - `return_item()`:修改`__is_borrowed`为False - ``get_info()`:编号:xx,名称:xx,是否可借阅:是/否 - 派生类(继承与多态): - `Book`:额外属性 `author`、`pages`,重写 `get_info()` - `DVD`:额外属性 `director`、`duration`,重写 `get_info()` - `Magazine`:额外属性 `issue_number`,重写 `get_info()` - 类 `Library`(组合): - 属性:物品列表 - 方法:`add_item()`、`remove_item()`、`search_by_title()`、`display_available_items()` - 实现多态:`display_item_info(item)` 函数能正确显示任何类型物品的信息 """ # - 基类 `LibraryItem`(封装): # - 私有属性:`__item_id`、`__title`、`__is_borrowed` # - 方法: # - `borrow()`:修改`__is_borrowed`为True # - `return_item()`:修改`__is_borrowed`为False # - ``get_info()`:编号:xx,名称:xx,是否可借阅:是/否 class LibraryItem: def __init__(self,item_id,title,is_borrowed=False): self.__item_id=item_id self.__title=title self.__is_borrowed = is_borrowed @property def item_id(self): return self.__item_id @property def title(self): return self.__title @property def is_borrowed(self): return "否" if self.__is_borrowed else "是" @item_id.setter def item_id(self,item_id): self.__item_id = item_id @title.setter def title(self,title): self.__title = title @is_borrowed.setter def is_borrowed(self,is_borrowed): print(f"修改is_borrow为{is_borrowed}") self.__is_borrowed=is_borrowed def borrow(self): self.is_borrowed = True def return_item(self): self.is_borrowed = False def get_info(self): print(f"编号:{self.item_id},名称:{self.title},是否可借阅:{self.is_borrowed}") #编号:xx,名称:xx,是否可借阅:是 / 否 # 派生类(继承与多态): # - `Book`:额外属性 `author`、`pages`,重写 `get_info()` # - `DVD`:额外属性 `director`、`duration`,重写 `get_info()` # - `Magazine`:额外属性 `issue_number`,重写 `get_info()` class Book(LibraryItem): def __init__(self,item_id,title,author,pages): super().__init__(item_id, title) self.author = author self.pages = pages def get_info(self): print(f"编号:{self.item_id},名称:{self.title},是否可借阅:{self.is_borrowed},作者:{self.author},共{self.pages}页") class DVD(LibraryItem): def __init__(self,item_id,title,director,duration): super().__init__(item_id, title) self.director =director self.duration = duration def get_info(self): print(f"编号:{self.item_id},名称:{self.title},是否可借阅:{self.is_borrowed},导演:{self.director},时长:{self.duration}") class Magazine(LibraryItem): def __init__(self,item_id,title,issue_number): super().__init__(item_id, title, ) self.issue_number =issue_number def get_info(self): print(f"编号:{self.item_id},名称:{self.title},是否可借阅:{self.is_borrowed},期数:{self.issue_number}") # 类 `Library`(组合): # - 属性:物品列表 # - 方法:`add_item()`、`remove_item()`、`search_by_title()`、`display_available_items()` # - 实现多态:`display_item_info(item)` 函数能正确显示任何类型物品的信息 class Library: def __init__(self,library_name): self.library_name = library_name self.items=[] def add_item(self,LibraryItem): self.items.append(LibraryItem) print(f"图书管物品{LibraryItem.title}已添加") def remove_item(self,item_id): for item in self.items: if item.item_id==item_id: self.items.remove(item) print("恭喜你,物品移除成功") return print("图书馆没有该物品!!!") def search_by_title(self,title): for item in self.items: if title in item.title: item.get_info() return print("不好意思,该物品没有在图书馆") def display_available_items(self): print("\n===== 可借阅物品 =====") for item in self.items: if item.is_borrowed == "是": item.get_info() def display_item_info(self, item): """ 实现多态:显示任何类型物品的信息 :param item: LibraryItem 或其子类的实例 """ if isinstance(item, LibraryItem): item.get_info() else: print("传入的对象不是有效的图书馆物品") if __name__ == "__main__": library = Library("市立图书馆") book1 = Book("B001", "Python编程从入门到实践", "Eric Matthes", 464) book2 = Book("B002", "算法导论", "Thomas H. Cormen", 1312) dvd1 = DVD("D001", "流浪地球", "郭帆", 125) dvd2 = DVD("D002", "星际穿越", "Christopher Nolan", 169) mag1 = Magazine("M001", "读者", "2026年第3期") mag2 = Magazine("M002", "青年文摘", "2026年第5期") print("=== 添加物品 ===") library.add_item(book1) library.add_item(book2) library.add_item(dvd1) library.add_item(dvd2) library.add_item(mag1) library.add_item(mag2) print("\n=== 查看所有可借阅物品 ===") library.display_available_items() print("\n=== 测试借阅功能 ===") book1.borrow() dvd1.borrow() print("\n=== 借阅后查看可借阅物品 ===") library.display_available_items() print("\n=== 多态演示 ===") print("不同物品的信息:") library.display_item_info(book2) library.display_item_info(dvd2) library.display_item_info(mag1) print("\n=== 搜索功能 ===") library.search_by_title("Python") library.search_by_title("地球") print("\n=== 测试归还功能 ===") book1.return_item() print("\n=== 归还后查看可借阅物品 ===") library.display_available_items() print("\n=== 测试移除物品 ===") library.remove_item("M002") library.display_available_items()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 5:53:12

生成式AI流水线“黑盒”正在吞噬你的SLA(实测:无CI/CD的AI服务MTTR超47分钟):3步构建可观测、可回滚、可审计的AI交付链

第一章:生成式AI应用CI/CD流水线的演进困境与SLA危机 2026奇点智能技术大会(https://ml-summit.org) 传统CI/CD流水线设计面向确定性、可重复的编译-测试-部署范式,而生成式AI应用引入了非确定性推理输出、动态模型权重依赖、多模态数据漂移及提示工程迭…

作者头像 李华
网站建设 2026/4/17 5:52:40

生成式AI训练数据合法性自查指南:9步完成版权风险扫描,3天内输出合规报告(附ISO/IEC 23894适配模板)

第一章:生成式AI应用版权合规指南 2026奇点智能技术大会(https://ml-summit.org) 生成式AI在内容创作、代码生成、设计辅助等场景中广泛应用,但其训练数据来源、输出内容权属及商用边界均面临明确的法律风险。开发者与企业需将版权合规嵌入产品全生命周…

作者头像 李华
网站建设 2026/4/17 5:50:12

GitHub协作开发CTC语音唤醒项目:小云小云开源实践

GitHub协作开发CTC语音唤醒项目:小云小云开源实践 1. 为什么语音唤醒项目特别需要团队协作 你有没有试过一个人从零开始训练一个语音唤醒模型?我做过,那感觉就像在黑暗里组装一台精密仪器——光是环境配置就能卡住三天,数据预处…

作者头像 李华
网站建设 2026/4/17 5:44:11

模型部署优化

模型部署优化:让AI应用更高效 在人工智能技术快速发展的今天,模型训练只是第一步,如何高效地将模型部署到生产环境中,才是真正发挥其价值的关键。模型部署优化不仅能提升推理速度、降低资源消耗,还能增强系统的稳定性…

作者头像 李华