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()

相关新闻

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

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

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

2026/10/14 19:10:22 阅读更多 →
Keepalived + DRBD 实现 NFS 文件服务高可用:架构、配置与避坑指南

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

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

2026/10/14 19:10:22 阅读更多 →
Reactor 3背压机制深度解析与生产级实践

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

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

2026/10/14 19:10:22 阅读更多 →

最新新闻

XGBoost从原理到实战:结构化数据首选算法的调参指南

XGBoost从原理到实战:结构化数据首选算法的调参指南

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

2026/10/14 19:59:07 阅读更多 →
傅里叶级数本质:函数的频域听诊器与工程分解法

傅里叶级数本质:函数的频域听诊器与工程分解法

1. 这不是“背公式”的章节,而是理解函数“听诊器”的起点很多人翻开《数学分析》第15章,看到傅里叶级数四个字,第一反应是:又要记一堆三角函数积分、又要算a₀、aₙ、bₙ、又要判断收敛性……然后默默合上书,转头去刷…

2026/10/14 19:59:07 阅读更多 →
Reversin 205;174630-05-8

Reversin 205;174630-05-8

基本性质英文名称:Reversin 205别名:Bis (Boc-L-γ-benzylglutamyl)-L-lysine methyl ester,[Boc-Glu (Obzl)]₂-Lys-OMeCAS 号:174630-05-8分子式:C₄₁H₅₈N₄O₁₂分子量:798.92外观:白色至…

2026/10/14 19:59:07 阅读更多 →
C++实现Delaunay三角网:增量插入与Bowyer-Watson算法详解

C++实现Delaunay三角网:增量插入与Bowyer-Watson算法详解

简介:这份资源是用C实现Delaunay三角网算法的完整工程代码,面向计算机图形学、地理信息系统与有限元方向的开发者及算法学习者,帮助理解空圆特性、逐点插入与空圆检测等核心构建逻辑。压缩包共42个文件,约2.66MB,以h头…

2026/10/14 19:59:07 阅读更多 →
从零部署 OpenClaw,Windows 3.1.0 详细安装步骤

从零部署 OpenClaw,Windows 3.1.0 详细安装步骤

Windows 一键部署 OpenClaw 教程|5 分钟搭建本地 AI 智能体,告别复杂环境配置 前言 2026 年开源圈爆火的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标狂揽 28 万 。它区别于普通对话型 AI,是一套可以直…

2026/10/14 19:59:07 阅读更多 →
高职财税大数据应用专业:数据分析能力培养路径与实战场景

高职财税大数据应用专业:数据分析能力培养路径与实战场景

这两年,我和不少带“高职财税大数据应用”专业的老师交流,大家最常聊的话题不是买什么新实训平台,也不是考证通过率,而是同一句话:“数据分析到底怎么真正融进财税课?”前几年,这个问题还能靠一…

2026/10/14 19:58:07 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →