尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python案例练习:图书管理系统
Python案例练习图书管理系统、新增图书、查看所有图书、按书名搜索、修改图书信息、删除图书、保存数据到本地文件、从文件加载数据 图书管理系统 新增图书、 查看所有图书、 按书名搜索、 修改图书信息、 删除图书、 保存数据到本地文件、 从文件加载数据 importjsonfromnumba.cudaimporttarget# 全局变量 存储所有的图书信息每一本图书用字典表示book_list[]# 数据保存的文件名DATA_FILEbooks_data.json# 加载本地json文件数据 若不存在捕获异常defload_books(): 函数功能从本地json文件加载图书数据 如果文件不存在自动预置测试图书数据 如果文件损坏初始化空列表 globalbook_listtry:# 打开文件读取withopen(DATA_FILE,r,encodingutf-8)asf:book_listjson.load(f)print(f成功从{DATA_FILE}加载{len(book_list)}本图书信息)exceptFileNotFoundError:# 文件不存在 → 预置测试数据print(数据文件不存在自动生成测试图书数据)book_list[{id:B001,name:Python编程入门,author:张三,price:49.9,count:12},{id:B002,name:数据结构与算法,author:李四,price:66.5,count:8},{id:B003,name:计算机网络,author:王五,price:38.0,count:20},{id:B004,name:MySQL必知必会,author:赵六,price:52.3,count:15},{id:B005,name:爬虫实战开发,author:钱七,price:59.0,count:6}]# 把预置数据保存到json文件save_books()exceptjson.JSONDecodeError:print(文件数据损坏清空图书库)book_list[]# 将当前图书列表保存到当前文件中持久化保存defsave_books():try:withopen(DATA_FILE,w,encodingutf-8)asf:json.dump(book_list,f,ensure_asciiFalse,indent10)returnTrueexceptExceptionase:print(f保存失败{e})returnFalse# 添加图书功能defadd_book():print( 新增图书 )# 获取用户输入book_idinput(请输入图书编号).strip()# 判断图书编号是否重复forbookinbook_list:ifbook[id]book_id:print(图书编号已经存在)returnbook_nameinput(请输入图书名称).strip()book_authorinput(请输入作者).strip()# 捕获数字输入异常try:book_pricefloat(input(请输入图书价格).strip())book_countint(input(请输入库存数量).strip())exceptValueError:print(价格必须是数字库存必须是整数)return# 构造图书字典new_book{id:book_id,name:book_name,author:book_author,price:book_price,count:book_count}# 添加到列表book_list.append(new_book)# 保存到文件save_books()print(图书添加成功)# 查看全部图书defshow_all_books():print(\n 全部图书列表 )iflen(book_list)0:print(图书没有数据)return# 打印表头print(f{编号:8}{书名:15}{作者:10}{价格:8}{库存:6})print(-*50)forbookinbook_list:print(f{book[id]:8}{book[name]:15}{book[author]:10}{book[price]:8.2f}{book[count]:6})# 检索指定的图书defsearch_book():print(\n 搜索图书 )keywordinput(请输入书名关键词).strip()result[]forbookinbook_list:ifkeywordinbook[name]:result.append(book)iflen(result)0:print(没有找到相关的书籍数据)returnprint(f{编号:8}{书名:15}{作者:10}{价格:8}{库存:6})print(-*50)forbookinresult:print(f{book[id]:8}{book[name]:15}{book[author]:10}{book[price]:8.2f}{book[count]:6})# 修改图书信息defmodify_book():print(\n 修改图书信息 )bidinput(请输入需要修改图书编号).strip()target_bookNoneforbookinbook_list:ifbidbook[id]:target_bookbookbreakiftarget_bookisNone:print(未找到该编号的图书)returnprint(直接回车则保留原有的图书内容)new_nameinput(f书名【{target_book[name]}】).strip()new_authorinput(f作者【{target_book[author]}】).strip()try:price_inputinput(f价格【{target_book[price]}】).strip()count_inputinput(f库存【{target_book[count]}】).strip()except:pass# 不为空才更新ifnew_name:target_book[name]new_nameifnew_author:target_book[author]new_authorifprice_input:target_book[price]float(price_input)ifcount_input:target_book[count]int(count_input)save_books()print(修改完成)# 删除图书根据编号删除defdelete_book():print(\n 删除图书 )bidinput(输入待删除图书编号).strip()forindex,bookinenumerate(book_list):ifbook[id]bid:# 二次确认confirminput(f确认删除《{book[name]}》y/n).strip().lower()ifconfirmy:delbook_list[index]save_books()print(删除成功)else:print(已取消删除)returnprint(找不到该图书编号)defshow_menu():打印主菜单print(\n 图书管理系统 )print(1. 添加图书)print(2. 查看全部图书)print(3. 搜索图书)print(4. 修改图书信息)print(5. 删除图书)print(0. 退出系统)print()defmain():程序主入口# 程序启动先加载历史数据load_books()whileTrue:show_menu()choiceinput(请输入功能序号).strip()ifchoice1:add_book()elifchoice2:show_all_books()elifchoice3:search_book()elifchoice4:modify_book()elifchoice5:delete_book()elifchoice0:print(退出系统再见)breakelse:print(输入无效请输入 0~5 的数字)# 程序入口判断if__name____main__:main()
RELATED

相关推荐

防拍照泄密核心知识点合集精讲

防拍照泄密核心知识点合集精讲

在企业数据安全建设过程里,很多运维新人学习防泄密体系都是碎片化的。大多优先关注 U 盘拷贝、聊天软件外发、邮件附件导出这类传统泄密通道,很容易漏掉手机拍摄电脑屏幕这个低成本、高隐蔽性的泄密途径。很多企业投入预算搭建文档加密体系,管…

📅 2026/10/14 19:10:23
Keepalived + DRBD 实现 NFS 文件服务高可用:架构、配置与避坑指南

Keepalived + DRBD 实现 NFS 文件服务高可用:架构、配置与避坑指南

简介:这份资源面向运维工程师与VoIP通信系统开发者,聚焦Freeswitch高可用架构的落地实践,通过Keepalived实现主备节点故障自动切换,解决单点故障导致通信服务中断的问题。压缩包共4个文件,约38KB,包含2个Sh…

📅 2026/10/14 19:10:23
Reactor 3背压机制深度解析与生产级实践

Reactor 3背压机制深度解析与生产级实践

1. 项目概述:为什么背压不是“可选项”,而是Reactor 3的生存底线 你写完第一个 Flux.create() ,用 onNext() 疯狂发射数据,下游用 subscribe(System.out::println) 接收——一切丝滑。直到某天压测时,控制台突然…

📅 2026/10/14 19:10:23
MORE NEWS

更多资讯

📰

3D目标检测评估函数深度拆解:从IoU到AP,手写自己的eval工具

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

四阶龙格库塔法手写求解微分方程,用MATLAB绘制分叉混沌图

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

eNSP综合实验:静态NAT、动态NAT与Easy IP共存配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PCM音频基础与采样数据处理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Linux-ARM平台海康SDK C++集成避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

嵌入式固件中的隐性配置契约:以Apollo-11为例解析内存布局与启动校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬