当前位置: 首页 > article >正文

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_borrowedFalse): self.__item_iditem_id self.__titletitle 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_borrowedis_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_iditem_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()

相关文章:

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

练习题5:图书馆借阅系统(综合练习) 设计一个图书馆借阅系统,综合运用三大特性: **要求:** - 基类 LibraryItem(封装):- 私有属性:__item_id、__title、__is_b…...

0基础速通Python+AI|2026热门轻量化玩法全攻略:从入门到实战,3天搞定AI应用开发

🎁个人主页:我滴老baby 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录:【前言】一、2026年PythonAI:轻量化爆发,0基础最佳入局期1.1 为什么2026是…...

面向对象高级(枚举)

3.1 认识枚举 3.1.1 认识枚举、枚举的原理枚举是一种特殊的类,它的格式是:public enum 枚举类名{枚举项1,枚举项2,枚举项3; } 3.1.2 枚举深入public enum A{//定义枚举项X,Y,Z("张三"); //枚举项后面加括号,就是在执行枚举类的带参…...

工业软件设计辅助:使用Qwen3将SolidWorks模型概念转化为二维讲解图

工业软件设计辅助:使用Qwen3将SolidWorks模型概念转化为二维讲解图 你有没有遇到过这种情况?在SolidWorks里精心设计了一个复杂的3D模型,内部结构巧妙,装配关系清晰,但当你需要向同事、客户或者新来的工程师讲解时&am…...

AI代码审查不是替代开发者,而是接管重复劳动:Gartner验证的12项ROI指标,你达标了几项?

第一章:AI代码审查不是替代开发者,而是接管重复劳动:Gartner验证的12项ROI指标,你达标了几项? 2026奇点智能技术大会(https://ml-summit.org) AI代码审查工具的核心价值,从来不是取代工程师的判断力与架构…...

day09统计师考试(初级)统计行政法规

统计行政法规(一)制定机关(二)法律地位(三)现行统计行政法规例题(一)制定机关 行政法规是国家最高行政机关国务院制定的有关国家行政管理的规范性法律文件的总称。 (二)法律地位 其法律地位和效力仅次于宪法和法律。统计行政法规是由国务院制定的规范性法律文件,…...

丹青幻境Z-Image Atelier快速上手:从部署到生成第一幅国风AI画作

丹青幻境Z-Image Atelier快速上手:从部署到生成第一幅国风AI画作 1. 走进丹青幻境 想象一下,当你打开电脑,看到的不是冰冷的代码界面,而是一张泛着古意的宣纸。这就是丹青幻境Z-Image Atelier带给你的第一印象——一个将现代AI技…...

生成式AI流量洪峰应对方案:4种动态负载策略+实时QPS压测数据验证

第一章:生成式AI应用负载均衡方案 2026奇点智能技术大会(https://ml-summit.org) 生成式AI服务(如大语言模型推理、文生图API)具有显著的负载非线性特征:请求长度差异大、显存占用波动剧烈、响应延迟敏感,传统基于连接…...

DFlash 的架构密码——扩散模型如何「寄生」在自回归模型上

好,先搞清楚问题是什么。 大语言模型写代码的时候,是一个字一个字往外蹦的——这是自回归,token by token。GPU 很强,但这种串行方式让它大部分时间都在等,利用率低得可怜。 以前有人想了个办法叫 Speculative Decoding:让一个小模型先快速"猜"一串 token,大…...

视觉Transformer的「近视眼」手术——LaSt-ViT如何让机器真正「看懂」图像

一、先从一个奇怪的实验说起 想象一下这个场景:你正在训练一个视觉模型来识别图片里的猫。你给它看一张猫坐在沙发上的照片,模型说:「这是猫。」准确无误。 但当你问它:「你『看』到了什么?」 它指着沙发、指着地毯、指着墙上的挂饰——唯独没有指着那只猫。 这听起来…...

Leetcode704 二分查找(数组)

# 这里是二分查找,题目当中 只给出了 n个 升序 整型 数组nums,目标变量名称是 target,# 要求 存在返回 下标,不存在 返回 -1,时间复杂度O(logn)class Solution(object):def search(self, nums, target):""&q…...

MusePublic应用案例:如何为小说角色生成专业级视觉形象

MusePublic应用案例:如何为小说角色生成专业级视觉形象 你是否在为小说创作角色形象时感到困扰?传统方法要么需要雇佣插画师,要么自己学习复杂的绘画技巧,既费时又费力。现在,借助MusePublic艺术创作引擎,…...

Qwen3.5-4B-Claude-Opus参数详解:Temperature/Top-P/思考过程调优指南

Qwen3.5-4B-Claude-Opus参数详解:Temperature/Top-P/思考过程调优指南 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该模型以…...

告别烧写失败:TI UniFlash工具深度配置与IWR6843雷达固件更新全流程解析

告别烧写失败:TI UniFlash工具深度配置与IWR6843雷达固件更新全流程解析 毫米波雷达开发中,固件烧写是项目启动的关键第一步。但许多开发者在面对IWR6843ISK-ODS这样的高性能雷达模块时,常会在UniFlash工具使用环节遭遇各种"拦路虎"…...

QQ机器人Webhook接入实战:手把手解决C2C私聊消息回复的Payload格式坑

QQ机器人Webhook接入实战:手把手解决C2C私聊消息回复的Payload格式坑 最近在帮朋友部署一个QQ机器人时,遇到了一个让人抓狂的问题:当处理私聊消息(C2C_MESSAGE_CREATE)时,官方botpy SDK中的C2CMessage类初始化总是报错。经过一番调…...

从C语言转MATLAB?带你快速上手结构体(struct),避开这3个易错点

从C语言转MATLAB?带你快速上手结构体(struct),避开这3个易错点 第一次在MATLAB里看到结构体(struct)时,作为C语言老手的我差点犯了经验主义错误。本以为和C语言的struct大同小异,结果…...

Qwen3.5-9B镜像免配置实操:一键拉起服务+7860端口安全访问配置

Qwen3.5-9B镜像免配置实操:一键拉起服务7860端口安全访问配置 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解(图文输入)和长上下文处理&#x…...

开放式创新与封闭式创新

对于决策者而言,开放式创新是提升企业竞争力的有效路径。在当今时代,借助开放式创新这一管理工具来发掘新创意,是十分合理的选择。不过,开放式创新模式在具备诸多优势的同时,也伴随着相应风险。 作为管理工具的开放式创…...

告别PS!用Qwen-Image-Edit-2511实现智能抠图、局部重绘,简单3步

告别PS!用Qwen-Image-Edit-2511实现智能抠图、局部重绘,简单3步 1. 为什么选择Qwen-Image-Edit-2511 传统图像编辑软件如Photoshop需要复杂操作和专业技巧,而Qwen-Image-Edit-2511让AI帮你完成大部分工作。这个最新版本在前代基础上做了五大…...

C 语言转义字符算字节的完整规则

一、核心规则(必背)普通字符(a-z、0-9、符号):1 个字符 1 字节以 \ 开头的转义序列:整个算 1 字节常见转义字符:\n\t\b\r\a\f\v\\\\" → 全部 1 字节八进制转义&#xf…...

三步掌握百度网盘秒传:永久分享文件不再失效

三步掌握百度网盘秒传:永久分享文件不再失效 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾经遇到过这样的困扰:辛苦整理的…...

关系型数据库MySQL(五):Galara高可用

数据库高可用一、Galera 高可用理论基础1.1 什么是高可用?高可用(High Availability, HA)指系统能够持续提供服务的能力,目标是最小化停机时间。在数据库领域,高可用通常通过 冗余节点 和 故障自动转移 实现。1.2 Gale…...

用STM32和PID算法,手把手教你做一个带双环控制的数控电源(附完整代码)

基于STM32的双环PID数控电源实战指南 在电子设计领域,一个稳定可靠的电源系统往往是项目成功的基础。对于创客和电子爱好者来说,能够自主设计并实现一个具备电压电流精确控制能力的数控电源,不仅能够满足日常开发测试需求,更是提升…...

Flutter开发者避坑:集成个推/极光推送时,这几个平台配置和权限问题你一定遇到过

Flutter推送集成实战:破解个推/极光在Android/iOS的12个高频配置陷阱 去年接手公司Flutter项目推送模块改造时,我在测试机上完美运行的推送功能,上线后竟出现华为设备收不到离线推送的尴尬情况。这促使我系统梳理了Flutter生态下第三方推送服…...

关系型数据库MySQL(四):读写分离

MySQL 读写分离:理论基础1. 什么是读写分离? 在数据库访问压力较大的应用中,读写操作的比例往往是不均衡的。通常,读操作(SELECT)的数量远多于写操作(INSERT, UPDATE, DELETE)。读写…...

Pi0机器人控制中心LangChain集成:构建智能对话系统

Pi0机器人控制中心LangChain集成:构建智能对话系统 1. 引言 想象一下,你正在开发一个机器人控制系统,需要让机器人理解自然语言指令、记住之前的对话上下文,并且能够智能地规划行动步骤。这听起来像是科幻电影里的场景&#xff…...

React 状态管理与 Fiber 协调机制

React作为当今最流行的前端框架之一,其核心机制——状态管理与Fiber协调——是构建高效动态应用的关键。状态管理决定了组件如何响应数据变化,而Fiber架构则优化了渲染性能,使React能够处理复杂UI的更新。本文将深入探讨这两大机制&#xff0…...

Webots碰撞检测实战:如何用boundingObject快速给自制3D模型添加物理属性

Webots碰撞检测实战:如何用boundingObject快速给自制3D模型添加物理属性 当你把精心设计的机械臂模型导入Webots时,是否遇到过这样的尴尬:模型看起来完美无缺,却像幽灵一样穿透其他物体?这背后缺失的正是物理引擎最看重…...

用WebSocket实现一个简单的多人在线聊天室

在当今互联网时代,实时通信已成为人们日常交流的重要方式。传统的HTTP协议由于无法实现双向通信,难以满足实时聊天的需求。而WebSocket作为一种全双工通信协议,能够建立持久连接,实现服务器与客户端的实时数据交互。本文将介绍如何…...

SDXL-Turbo优化技巧:如何调整参数获得更清晰的512x512图像

SDXL-Turbo优化技巧:如何调整参数获得更清晰的512x512图像 1. 为什么需要优化SDXL-Turbo的512x512图像 当你第一次使用SDXL-Turbo时,可能会发现生成的512x512图像有时会出现细节模糊、边缘不清晰或纹理缺失的情况。这并非模型能力不足,而是…...