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

pyhon---图书馆借阅系统

题目描述

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

书号(字符串)

书名(字符串)

作者(字符串)

库存数量(整数)

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

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

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

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

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

退出系统:结束程序。

要求:

数据初始化:至少预置 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"}

]

代码展示:

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"}

]

# 主菜单循环

while True:

print(

'''=====图书借阅系统=====

1 查看所有图书

2 借书

3 还书

4 查询借阅情况

5 退出

''')

c = int(input("请选择:"))

# 1 查看图书

if c == 1:

for i in books:

print(i, books[i]["name"], books[i]["author"], books[i]["stock"], sep="\t")

# 2 借书

elif c == 2:

bid = input("书号:")

if bid not in books:

print("书号不存在")

continue

n = int(input("数量:"))

if n <= 0:

print("数量必须大于0")

elif books[bid]["stock"] < n:

print("库存不足")

else:

books[bid]["stock"] -= n

borrow_records.append({

"book_id": bid,

"book_name": books[bid]["name"],

"quantity": n,

"date": "2026-04-07"

})

print("借书成功")

# 3 还书

elif c == 3:

bid = input("书号:")

if bid not in books:

print("书号不存在")

continue

total = sum(r["quantity"] for r in borrow_records if r["book_id"] == bid)

try:

n = int(input("归还数量:"))

except:

print("输入错误")

continue

if n <= 0 or n > total:

print("数量错误或超过借出总数")

else:

books[bid]["stock"] += n

temp = []

for r in borrow_records:

if r["book_id"] == bid and n > 0:

if r["quantity"] <= n:

n -= r["quantity"]

else:

r["quantity"] -= n

n = 0

temp.append(r)

else:

temp.append(r)

borrow_records = temp

print("还书成功")

# 4 查询借阅

elif c == 4:

bid = input("书号:")

if bid not in books:

print("书号不存在")

continue

rs = [r for r in borrow_records if r["book_id"] == bid]

total = sum(r["quantity"] for r in rs)

print("总借出:", total)

for r in rs:

print(r["quantity"], "本", r["date"])

# 5 退出

elif c == 5:

print("退出成功")

break

else:

print("输入无效")

http://www.cnnetsun.cn/news/1782321.html

相关文章:

  • MTK设备修复工具:从硬件故障到系统恢复的全流程解决方案
  • MTK手机关机充电动画定制全攻略:从图片资源准备到libshowlogo适配
  • 解锁嵌入式视觉革命:ESP32-OpenCV重塑物联网设备视觉能力
  • cmake文件中,INCLUDE_DIRECTORIES() 和 target_include_directories()的区别
  • 告别环境配置噩梦!PyTorch通用开发镜像,让小白也能专注模型本身
  • DCT-Net人像卡通化:快速搭建个人卡通形象生成器
  • Papa Parse解析故障排除指南:系统化解决CSV处理难题
  • 昆明汽车贴膜专业的服务商
  • 【传统图像增强算法3】- 伽马校正(Gamma Correction)完全解析
  • D3KeyHelper:解放双手的暗黑破坏神3智能辅助工具
  • OpenClaw学习路径规划:Qwen3-14B定制个人知识图谱
  • 别让 AI 毁了你的品牌!信息错误、负面缠身太致命
  • Vite 开发环境配置 HTTPS
  • 5个强力优化技巧:用NVIDIA Profile Inspector实现显卡性能飞跃
  • 《Nat. Commun.》:共价键合金刚石/石墨烯异质界面,破解吸波材料“性能-耐久”矛盾
  • VDA5050协议深度解析:工业移动机器人通信标准的架构设计与技术实现
  • 突破性能极限:深入解析多级缓存架构设计与实践
  • 营销自动化数据驱动 - 多源数据 OLAP 架构演进趟
  • svgpath:突破SVG路径操控瓶颈的底层技术解密
  • Kazumi智能同步:跨设备追番的无缝体验解决方案
  • Translumo:打破语言障碍的实时屏幕翻译神器
  • OpenClaw(小龙虾)Windows 本地部署教程|一键安装 + 避坑指南
  • SkeyeVSS开发笔记-定时任务数据模型
  • 从客服到测试主管:我的非典型逆袭之路
  • VS Code远程开发在嵌入式环境中的实践与优化
  • 从监控盲区到业务洞察:深入解读 APMPlus 生产指标
  • 3步搞定网络资源下载:从视频号到直播流的全方位解决方案
  • 3.2《消息队列(Message Queue)从入门到精通:架构、原理与实战》
  • 长清大学城AI大模型培训公司哪家强?
  • 3大核心技术揭秘:如何通过设备ID重置免费解锁Cursor Pro完整功能