# 题目描述# 设计一个简单的图书借阅管理系统。系统初始包含若干本图书每本图书的信息包括# 书号字符串# 书名字符串# 作者字符串# 库存数量整数# 另外系统需记录借阅记录列表存储每笔借阅的字典。程序通过菜单实现以下功能# 查看所有图书以表格形式显示所有图书的书号、书名、作者、库存。# 借书输入书号和借阅数量如果库存足够则减少库存并添加一条借阅记录包含书号、书名、借阅数量、借阅日期可简化为当天日期字符串。如果库存不足提示失败。# 还书输入书号和归还数量增加对应图书的库存并从借阅记录中删除相应的借阅按先进先出原则或简单按书号匹配。若归还数量大于该书的借出总量则提示错误。# 查询某本书的借阅情况输入书号显示该书当前被借出的总数量和所有借阅记录的详情借阅数量、借阅日期。# 退出系统结束程序。# 要求# 数据初始化至少预置 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}]import datetimedef get_today_date():return datetime.date.today().strftime(%Y-%m-%d)while True:print(图书管理借阅系统)print(1.查看所有图书)print(2.借书)print(3.还书)print(4.查询某本书的借阅情况)print(5.退出系统)choiceinput(输入1-5选择功能:)if choice1:for num,n in books.items():print(f书号:{num},书名:{n[name]},作者:{n[author]},库存:{n[stock]}本)elif choice2:uidinput(请输入借阅书号:)if uid in books:unumint(input(请输入借阅数量:))if unumbooks[uid][stock]:books[uid][stock]-unumborrow_records.append({book_id:uid,book_name:books[uid][name],quantity:unum,date:get_today_date()})print(借书成功)else:print(库存不足借阅失败)else:print(书号不存在请重新输入)continueelif choice3:book_idinput(请输入归还书号)if book_id not in books:print(书号不存在请重新输入)continueelse:uquantityint(input(请输入归还数量:))if uquantity0:print(借阅数量应大于0)continuetotal0for r in borrow_records:if r[book_id]book_id:totalr[quantity]if uquantitytotal:print(还书数量不能大于借书数量)else:books[book_id][stock]uquantityremainuquantitynew_records[]for r in borrow_records:if r[book_id]book_id and remain0:if r[quantity]remain:remain-r[quantity]else:r[quantity]-remainremain0new_records.append(r)else:new_records.append(r)borrow_recordsnew_recordsprint(还书成功)elif choice4:uidinput(输入要查询的书号:)total_borrow0for r in borrow_records:if r[book_id]uid:print(f日期{r[date]}数量{r[quantity]})total_borrowr[quantity]print(f总借出:{total_borrow})elif choice5:print(系统退出)breakelse:print(输入错误)