【Python】简易书籍管理程序

之前简单介绍了有关Python的面向对象中的类,这次就围绕"类"和json格式来做一个简单的代码程序,并且在后面还附带了数据。

import json
import re
import timeclass BookManager:def __init__(self):self.books = {}  # 使用字典存储书籍信息,book_id# 导入书籍信息def load_books(self, filename):try:with open(filename, 'r', encoding='utf-8') as file:self.books = json.load(file)if not self.books:return  # 如果字典为空,返回except (json.JSONDecodeError, FileNotFoundError):return  # 如果文件为空,或不存在,或无法解析,直接返回def save_books(self):filename = r'books.json'with open(filename, 'w', encoding='utf-8') as file:# 没有书籍信息就不保存,并直接退出if self.books == {}:exit()# 保存书籍信息,并退出json.dump(obj=self.books, fp=file, indent=4, ensure_ascii=False)exit()def register_book(self):print("请输入书籍信息:")book_id = input("书籍ID: ")isbn = input("ISBN: ")title = input("书名: ")author = input("作者: ")genre = input("类型: ")# 检验书籍的有效性if self.validate_isbn(isbn) and \self.validate_book_id(book_id) and \book_id not in self.books.keys():self.books[book_id] = {'title': title,'author': author,'book_id': book_id,'genre': genre,'isbn': isbn}else:print("书籍ID和ISBN无效或已存在。")def delete_book_by_id(self):book_id = input("输入要删除的书籍ID: ")if book_id in self.books.keys():del self.books[book_id]print("书籍已删除。")else:print("找不到该书籍。")def modify_book(self):book_id = input("输入要修改的书籍ID: ")if book_id in self.books.keys():print("输入新的书籍信息(如果不想修改某项,请直接按回车键):")new_ISBN = input("ISBN: ")new_title = input("书名: ")new_author = input("作者: ")new_genre = input("类型: ")# 如果输入不为空,则更新相应的信息if new_ISBN:self.books[book_id]['ISBN'] = new_ISBNif new_title:self.books[book_id]['title'] = new_titleif new_author:self.books[book_id]['author'] = new_authorif new_genre:self.books[book_id]['genre'] = new_genreprint("书籍信息已更新。")else:print("找不到该书籍。")def display_books(self):# 没有书籍信息,就返回if not self.books:print("暂无书籍信息。")return# 遍历所有书籍信息print("所有书籍如下: ")for index, book in enumerate(self.books.values(), start=1):print(index, book, sep='、', end='\n')def find_book_by_id(self):book_id = input("输入书籍ID: ")if book_id in self.books.keys():print(self.books[book_id])else:print("找不到该ID的书籍信息。")def find_book_by_title(self):title = input("输入书名: ")found = Falsefor book in self.books.values():# 检查输入的书名是否为书籍标题的一部分if title in book['title']:print(f"{book}")found = Trueif not found:print("没有找到该书名的书籍。")def find_book_by_genre(self):genre = input("输入书籍类型: ")found = Falseindex = 1for book in self.books.values():# 检查输入的书名是否为书籍标题的一部分if genre in book['genre']:print(f"{index}{book}")index = index + 1found = Trueif not found:print("没有该类型书籍。")# 检验书籍的ISBN位数是否合理——13位数字def validate_isbn(self, isbn):pattern = r'^\d{13}$'return re.match(pattern, isbn) is not None# 检验书籍的ID是否符合——数字def validate_book_id(self, id):pattern = r'^\d+$'return re.match(pattern, id) is not Nonedef main():manager = BookManager()manager.load_books('books.json')# 以索引为关键字,创建一个字典来存储类方法options = {'1': manager.register_book,'2': manager.delete_book_by_id,'3': manager.modify_book,'4': manager.display_books,'5': manager.find_book_by_id,'6': manager.find_book_by_title,'7': manager.find_book_by_genre,'8': manager.save_books}while True:time.sleep(2)print("\n主菜单:")print("1. 登记书籍")print("2. 删除书籍")print("3. 修改书籍")print("4. 显示所有书籍")print("5. 按ID查找书籍")print("6. 按书名查找书籍")print("7. 按类型查找书籍")print("8. 保存并退出程序")choice = input("请选择操作: ")if choice in options.keys():options[choice]()else:print("无效选项,请重新选择。")if __name__ == '__main__':main()
{"1": {"title": "云边有个小卖部","author": "张嘉佳","book_id": "1","genre": "情感小说","isbn": "9787540487645"},"2": {"title": "月亮和六便士","author": "威廉·萨默塞特·毛姆","book_id": "2","genre": "文学经典","isbn": "9787530216787"},"3": {"title": "解忧杂货店","author": "东野圭吾","book_id": "3","genre": "悬疑小说","isbn": "9787544270878"},"4": {"title": "挪威的森林","author": "村上春树","book_id": "4","genre": "现代文学","isbn": "9787544731703"},"5": {"title": "百年孤独","author": "加西亚·马尔克斯","book_id": "5","genre": "魔幻现实主义","isbn": "9787544268103"},"6": {"title": "活着","author": "余华","book_id": "6","genre": "现实主义","isbn": "9787506365437"},"7": {"title": "小王子","author": "安托万·德·圣埃克苏佩里","book_id": "7","genre": "童话","isbn": "9787020042494"},"8": {"title": "围城","author": "钱钟书","book_id": "8","genre": "现代文学","isbn": "9787020024759"},"9": {"title": "追风筝的人","author": "卡勒德·胡赛尼","book_id": "9","genre": "现代文学","isbn": "9787208061644"},"10": {"title": "苏菲的世界","author": "乔斯坦·贾德","book_id": "10","genre": "哲学","isbn": "9787532739824"},"11": {"title": "瓦尔登湖","author": "亨利·大卫·梭罗","book_id": "11","genre": "自然写作","isbn": "9787544261098"},"12": {"title": "简爱","author": "夏洛蒂·勃朗特","book_id": "12","genre": "古典文学","isbn": "9787544242516"},"13": {"title": "1984","author": "乔治·奥威尔","book_id": "13","genre": "反乌托邦","isbn": "9787208061643"},"14": {"title": "飘","author": "玛格丽特·米切尔","book_id": "14","genre": "历史小说","isbn": "9787532745115"},"15": {"title": "动物农场","author": "乔治·奥威尔","book_id": "15","genre": "政治讽刺","isbn": "9787532739138"},"16": {"title": "荆棘鸟","author": "科琳·麦卡洛","book_id": "16","genre": "家庭史诗","isbn": "9787208115279"},"17": {"title": "哈利波特与魔法石","author": "J.K. 罗琳","book_id": "17","genre": "奇幻","isbn": "9787020033430"},"18": {"title": "了不起的盖茨比","author": "弗朗西斯·斯科特·菲茨杰拉德","book_id": "18","genre": "美国小说","isbn": "9787532737974"},"19": {"title": "不可抗力","author": "玛丽安娜·海拉","book_id": "19","genre": "现代小说","isbn": "9787544291179"},"20": {"title": "我们仨","author": "杨绛","book_id": "20","genre": "回忆录","isbn": "9787530219214"},"21": {"title": "天才在左 疯子在右","author": "高铭","book_id": "21","genre": "心理学","isbn": "9787508657421"},"22": {"title": "我与地坛","author": "史铁生","book_id": "22","genre": "散文","isbn": "9787530216770"},"23": {"title": "地球往事","author": "刘慈欣","book_id": "23","genre": "科幻","isbn": "9787536692930"},"24": {"title": "平凡的世界","author": "路遥","book_id": "24","genre": "现实主义","isbn": "9787020016402"},"25": {"title": "无人生还","author": "阿加莎·克里斯蒂","book_id": "25","genre": "悬疑","isbn": "9787208060943"}
}

基本功能

  1. 登记书籍
    • 用户可以输入书籍的ID、ISBN、书名、作者和类型来登记一本新书。
    • 程序会验证书籍ID和ISBN的有效性,避免重复登记。
  2. 删除书籍
    • 通过输入书籍ID,用户可以删除已登记的书籍信息。
  3. 修改书籍
    • 用户可以输入书籍ID,然后修改书籍的ISBN、书名、作者或类型。
    • 只需输入需要修改的项,不修改的项可以直接按回车键跳过。

查询功能

  1. 显示所有书籍
    • 列出所有已登记的书籍信息,便于用户浏览。
  2. 按ID查找书籍
    • 通过输入书籍ID,用户可以查找并显示特定书籍的信息。
  3. 按书名查找书籍
    • 用户可以输入书名的一部分或全部,程序会查找并显示包含该书名的所有书籍信息。
  4. 按类型查找书籍
    • 通过输入书籍类型,用户可以查找并显示所有属于该类型的书籍。

其他功能

  1. 保存并退出程序
    • 程序会将所有书籍信息保存到名为 books.json 的文件中,并退出程序。
    • 如果没有书籍信息,将不会保存文件。

程序结构

  • BookManager 类负责所有书籍管理的核心功能,包括导入、导出书籍信息,登记、删除、修改和查找书籍。
  • main 函数提供一个简单的命令行菜单,用户可以通过选择不同的选项来执行相应的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1473747.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年最新运维面试题(附答案)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 一.选择题 1.HTTP协议默认使用哪个端口…

【刷题汇总--大数加法、 链表相加(二)、大数乘法】

C日常刷题积累 今日刷题汇总 - day0061、大数加法1.1、题目1.2、思路1.3、程序实现 2、 链表相加(二)2.1、题目2.2、思路2.3、程序实现 3、大数乘法3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日刷题汇总 - day006 1、大数加法 1.1、题目 1.2、思路 读完题,明白大数相加…

最新版情侣飞行棋dofm,已解锁高阶私密模式,单身狗务必绕道!(附深夜学习资源)

今天阿星要跟大家聊一款让阿星这个大老爷们儿面红耳赤的神奇游戏——情侣飞行棋。它的神奇之处就在于专为情侣设计,能让情侣之间感情迅速升温,但单身狗们请自觉绕道,不然后果自负哦! 打开游戏,界面清新,操…

平价猫粮新选择!福派斯鲜肉猫粮,让猫咪享受美味大餐!

福派斯鲜肉猫粮,作为一款备受铲屎官们青睐的猫粮品牌,凭借其卓越的品质和高性价比,为众多猫主带来了健康与美味的双重享受。接下来,我们将从多个维度对这款猫粮进行解析,让各位铲屎官更加全面地了解它的魅力所在。 1️…

11.x86游戏实战-汇编指令add sub inc dec

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:10.x86游戏实战-汇编指令lea 首先双击下图红框位置 然后在下图红框位置输入0 然…

电商视角如何理解动态IP与静态IP

在电子商务的蓬勃发展中,网络基础设施的稳定性和安全性是至关重要的。其中,IP地址作为网络设备间通信的基础,扮演着举足轻重的角色。从电商的视角出发,我们可以将动态IP和静态IP比作电商平台上不同类型的店铺安排,以此…

记录一次MySQL恢复

一、前言 此文章由一次数据库被黑客删除而引发 由于对于Linux操作、docker使用、MySQL原理这些都相对不是很熟悉,所以记录下来避免以后在工作中遇到类似的问题而惊慌失措。 1.MySQL环境现状 docker管理的,8.0.26版本 启动语句: docker run -d -p 33…

智慧矿山建设规划方案(121页Word)

智慧矿山建设项目方案摘要 一、项目背景及现状分析 项目背景 随着信息技术的迅猛发展,智慧化、数字化已成为矿山行业转型升级的必然趋势。智慧矿山建设项目旨在通过集成先进的信息技术手段,实现对矿山生产、管理、安全等全过程的智能化监控与管理&…

【ARMv8/v9 GIC 系列 1.5 -- Enabling the distribution of interrupts】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 Enabling the distribution of interruptsGIC Distributor 中断组分发控制CPU Interface 中断组分发控制Physical LPIs 的启用Summary Enabling the distribution of interrupts 在ARM GICv3和GICv4体系结构中,中断分发…

如何搭建Ubuntu环境安装禅道

一、禅道安装部署的环境要求 禅道安装部署环境推荐使用 Linux Apache PHP7.0以上版本 MySQL5.5以上版本/MariaDB的组合。Nginx其次,不推荐IIS PHP组合。禅道需要使用PHP的这些扩展:pdo、pdo_mysql、json、filte、openssl、mbstring、zlib、curl、gd、…

DP:二维费用背包问题

文章目录 🎵二维费用背包问题🎶引言🎶问题定义🎶动态规划思想🎶状态定义和状态转移方程🎶初始条件和边界情况 🎵例题🎶1.一和零🎶2.盈利计划 🎵总结 &#x1…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代,人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代,我们不应该单纯依赖工具本身,而是要理解如何将这些AI功能与行业相结合。 然而,上周OpenAI宣布禁止对中国提供API服务,有一些用户…

基于Transformer神经网络的锂离子电池剩余使用寿命估计MATLAB实现【NASA电池数据集】

Transformer神经网络 基于Transformer神经网络的锂离子电池剩余使用寿命估计是一种先进的方法,它利用了Transformer模型在处理序列数据方面的优势。 Transformer能够有效地捕捉时间序列中的长程依赖关系和非线性模式,相比传统的基于循环神经网络&…

【OnlyOffice】桌面应用编辑器,插件开发大赛,等你来挑战

OnlyOffice,桌面应用编辑器,最近版本已从8.0升级到了8.1 从PDF、Word、Excel、PPT等全面进行了升级。随着AI应用持续的火热,OnlyOffice也在不断推出AI相关插件。 因此,在此给大家推荐一下OnlyOffice本次的插件开发大赛。 详细信息…

WPF中Background=“{x:Null}“ 和 Transparent

WPF中关于背景透明和背景无 此时&#xff0c;我代码中是写的有有个控件&#xff0c;一个Border &#xff0c;一个TextBox &#xff0c;范围都是全屏这么大&#xff0c;可以输入TextBox 因为&#xff0c;当border没有设置背景的时候&#xff0c;实际上是&#xff1a; <Borde…

Python的招聘数据分析与可视化管理系统-计算机毕业设计源码55218

摘要 随着互联网的迅速发展&#xff0c;招聘数据在规模和复杂性上呈现爆炸式增长&#xff0c;对数据的深入分析和有效可视化成为招聘决策和招聘管理的重要手段。本论文旨在构建一个基于Python的招聘数据分析与可视化管理系统。 该平台以主流招聘平台为数据源&#xff0c;利用Py…

实战whisper第三天:fast whisper 语音识别服务器部署,可远程访问,可商业化部署(全部代码和详细部署步骤)

Fast Whisper 是对 OpenAI 的 Whisper 模型的一个优化版本,它旨在提高音频转录和语音识别任务的速度和效率。Whisper 是一种强大的多语言和多任务语音模型,可以用于语音识别、语音翻译和语音分类等任务。 Fast Whisper 的原理 Fast Whisper 是在原始 Whisper 模型的基础上进…

MySQL的count()方法慢

前言 mysql用count方法查全表数据&#xff0c;在不同的存储引擎里实现不同&#xff0c;myisam有专门字段记录全表的行数&#xff0c;直接读这个字段就好了。而innodb则需要一行行去算。 比如说&#xff0c;你有一张短信表(sms)&#xff0c;里面放了各种需要发送的短信信息。 …

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。

我们要如何选择MySql 目前主流的Mysql有5.0、8.0、9.0 主要区别 MySQL 5.0 发布年份&#xff1a;2005年特性&#xff1a; 基础事务支持存储过程、触发器、视图基础存储引擎&#xff08;如MyISAM、InnoDB&#xff09;外键支持基本的全文搜索性能和扩展性&#xff1a; 相对较…

3.python

闯关 3作业 本节关卡&#xff1a; 学习 python 虚拟环境的安装 Python 的基本语法 学会 vscode 远程连接 internstudio 打断点调试 python 程序