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

Python图书借阅管理系统实战

# 题目描述

# 设计一个简单的图书借阅管理系统。系统初始包含若干本图书,每本图书的信息包括:

# 书号(字符串)

# 书名(字符串)

# 作者(字符串)

# 库存数量(整数)

# 另外,系统需记录借阅记录(列表,存储每笔借阅的字典)。程序通过菜单实现以下功能:

# 查看所有图书:以表格形式显示所有图书的书号、书名、作者、库存。

# 借书:输入书号和借阅数量,如果库存足够则减少库存,并添加一条借阅记录(包含书号、书名、借阅数量、借阅日期(可简化为当天日期字符串))。如果库存不足,提示失败。

# 还书:输入书号和归还数量,增加对应图书的库存,并从借阅记录中删除相应的借阅(按先进先出原则,或简单按书号匹配)。若归还数量大于该书的借出总量,则提示错误。

# 查询某本书的借阅情况:输入书号,显示该书当前被借出的总数量和所有借阅记录的详情(借阅数量、借阅日期)。

# 退出系统:结束程序。

# 要求:

# 数据初始化:至少预置 3 本图书和若干条借阅记录(可手动在代码中定义)。

# 菜单循环,用户输入 1~5 选择功能。

# 对用户输入做简单的有效性检查(如书号不存在、数量非法等)。

# 参考代码

# python

# # 初始化图书库存

# books = {

# "B001": {"name": "Python编程", "author": "张三", "stock": 5},

# "B002": {"name": "数据结构", "author": "李四", "stock": 3},

# "B003": {"name": "算法导论", "author": "王五", "stock": 0}

# }

# # 初始化借阅记录

# borrow_records = [

# {"book_id": "B001", "book_name": "Python编程", "quantity": 1, "date": "2026-03-25"},

# {"book_id": "B002", "book_name": "数据结构", "quantity": 2, "date": "2026-03-26"}

# ]

today = "2026-04-03" str1 = """ ------图书借阅管理系统------ 1、查看所有图书 2、借书 3、还书 4、查询某种书的借阅情况 5、退出程序 请选择(1-5): --------------------------- """ books = { "B001": {"name": "Python编程", "author": "张三", "stock": 5}, "B002": {"name": "数据结构", "author": "李四", "stock": 3}, "B003": {"name": "算法导论", "author": "王五", "stock": 0} } while True: print(str1) choose = input("请输入你要选择的功能:") # 查看所有图书:以表格形式显示所有图书的书号、书名、作者、库存。 if choose == "1": print(f"书号:书名:作者:库存:") for id,info in books.items(): print(f"{id}{info["name"]}{info["author"]}{info["stock"]}") # 借书:输入书号和借阅数量,如果库存足够则减少库存, # 并添加一条借阅记录(包含书号、书名、借阅数量、借阅日期 # (可简化为当天日期字符串))。如果库存不足,提示失败。 elif choose == "2": id = input("请输入书号:") if id not in books: print("该图书不存在!") continue num = int(input("请输入借阅数量:")) if num < 0: print("请输入正确数量!") else : if books[id]["stock"] < num: print(f"库存不足,当前库存为{books[id]["stock"]}") continue books[id]["stock"] -= num jieshu = { "book_id":id, "book_name": books[id]["name"], "quantity": num, "date": today } jieshu.append(jieshu) print("借书成功!") print(f"《{books[id]['name']}》库存剩余:{books[id]['stock']}") # 还书:输入书号和归还数量,增加对应图书的库存, # 并从借阅记录中删除相应的借阅(按先进先出原则,或简单按书号匹配)。 # 若归还数量大于该书的借出总量,则提示错误。 elif choose == "3": id = input("请输入书号:") if id not in books: print("图书不存在") continue total = 0 for r in jieshu: if r["book_id"] == id: total += r["quantity"] if total == 0: print("没有借阅记录") continue num = int(input("请输入归还数量:")) if num <= 0: print("数量没有大于1") continue if num > total: print(f"归还数量不能超过借出总量{total}") continue need = num i=0 while i<len(jieshu) and need >0: r = jieshu[i] if r["book_id"] == id: if r["quantity"] <= need: need -= r["quantity"] del jieshu[i] else: r["quantity"] -= need need = 0 else: i += 1 books[id]["stock"] += num print(f"还书成功!《{books[id]['name']}》当前库存:{books[id]['stock']}") # 查询某本书的借阅情况:输入书号, # 显示该书当前被借出的总数量和所有借阅记录的详情 # (借阅数量、借阅日期)。 elif choose == "4": id = input("请输入书号:") if id not in books: print("图书不存在") continue records = [] for r in jieshu : if r["book_id"] == id: records.append(r) if not records: print(f"《{books[id]['name']}》没有借阅记录") continue total = 0 for r in records: total += r["quantity"] print(f"\n《{books[id]['name']}》 累计借出:{total} 本") print(f"{'借阅日期'}{'借阅数量'}") for r in records: print(f"{r['date']}{r['quantity']}") # 退出系统:结束程序。 elif choose == "5": print("程序已退出!") break else: print("输入错误,请输入 1-5!")
http://www.jsqmd.com/news/609726/

相关文章:

  • 2026年4月亲测:成都环保全屋定制哪家强? - 品牌企业推荐师(官方)
  • 知识竞赛软件技术架构解析:从抢答到计分的全流程实现
  • 3步掌握抖音下载神器:从零开始批量保存无水印内容
  • 为什么你的.NET 9边缘服务在Raspberry Pi 5上启动慢400ms?——基于JIT预编译+LLVM IR优化的3层根因定位法
  • 基于File-Based App开发MVP项目僮
  • DOTS物理同步卡顿诊断工具包:实时捕获PhysicsWorld.Schedule()耗时毛刺,精准定位RigidbodyGroup脏标记扩散路径
  • DDD难落地?就让AI干吧! - cleanddd-skills介绍秸
  • 物业经理证怎么考取?2026年全国报考全流程、授权认证机构与合规指南 - 品牌企业推荐师(官方)
  • Aurix Tricore开发避坑指南:从零理解Trap机制,手把手教你写异常处理程序
  • 从权限漏洞到安全加固:Sa-Token在Ruoyi项目中的5个典型误用案例
  • 夜莺监控 vs Prometheus:哪个更适合你的云原生环境?(含性能对比)
  • 1990~2024年各省市区区县水稻种植面积面板数据
  • 【车辆控制】基于matlab电动车静态PID与动态自适应巡航控制策略分析【含Matlab源码 15302期】
  • ECDH密钥交换:椭圆曲线加密在安全通信中的核心作用
  • 5大核心技术揭秘:如何构建毫秒级响应的高性能抢票系统
  • Dify连不上本地Ollama?别急着改网络,先检查这个服务配置文件
  • 上海专业靠谱的西装定制品牌:FESUN非绅,为重要场合而生 - 博客湾
  • P1094 [NOIP 2007 普及组] 纪念品分组 总结与反思
  • 车载网络架构的革新:从传统总线到智能区域控制
  • 【.NET 9 容器化配置终极指南】:90%开发者忽略的5个生产级配置陷阱与自动修复方案
  • 如何高效下载抖音无水印视频:3分钟掌握批量下载技巧
  • 毕业生必看:4款亲测有效的降AI率工具汇总,助你2026毕业季一稿过关! - 殷念写论文
  • Xilinx7系列FPGA中SelectIO IP核的配置与LVDS应用实战
  • 昆仑通态屏幕制作实战:从滑块到按钮灯的完整交互设计(附脚本源码)
  • 【2026技术实战】Claude Code编程神器:weelinking中转站部署完全指南
  • 别再乱关‘通讯录同步’了!企微8月安全升级后,自建应用读取成员信息的正确姿势
  • Unity Profiler实战:5分钟定位游戏卡顿元凶(附常见性能瓶颈排查表)
  • ROS2多机器人协同开发:如何用namespace+launch文件管理10+节点?
  • 大湾区财税标杆!泰华财税集团,全链条科金产服,赋能华南企业高质量发展 - 品牌企业推荐师(官方)
  • Emgu CV实战:5分钟搞定轮廓检测与绘制(附完整代码)