程序猿大战Python——实现简单的图书馆系统操作
步骤1:安装和导入库
首先,确保已经安装了 pymysql
库。如果没有安装,请执行以下命令:
pip install pymysql
然后,导入必要的库:
import pymysql
步骤2:创建数据库和表的函数
编写一个函数来创建数据库和表,并在表中插入一些数据:
CREATE DATABASE IF NOT EXISTS library; USE library; CREATE TABLE IF NOT EXISTS books (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键,自增',title VARCHAR(255) NOT NULL COMMENT '书名',author VARCHAR(255) NOT NULL COMMENT '作者',isbn VARCHAR(13) NOT NULL UNIQUE COMMENT '国际标准书号,唯一' ) COMMENT='图书表'; USE library; INSERT INTO books (title, author, isbn) VALUES ('红楼梦', '曹雪芹', '9787539999999'), ('西游记', '吴承恩', '9787539988888'), ('水浒传', '施耐庵', '9787539977777'), ('三国演义', '罗贯中', '9787539966666');
步骤3:定义 Book
类
定义一个简单的 Book
类来表示书籍:
class Book(object):def __init__(self, title, author, isbn):self.title = titleself.author = authorself.isbn = isbn def __str__(self):return f"书名: {self.title}, 作者: {self.author}, ISBN: {self.isbn}"
解释:
-
__init__
:初始化书籍对象。 -
__str__
:定义对象的字符串表示形式。
步骤4:定义 Library
类
编写一个 Library
类来管理书籍:
class Library(object):def __init__(self, db_config):self.conn = pymysql.connect(**db_config)self.cursor = self.conn.cursor()self.cursor.execute("USE library;") def __del__(self):self.cursor.close()self.conn.close() def _execute_query(self, query, params=None):self.cursor.execute(query, params)self.conn.commit() def add_book(self, book):query = "INSERT INTO books (title, author, isbn) VALUES (%s, %s, %s)"params = (book.title, book.author, book.isbn)self._execute_query(query, params)print(f"书籍《{book.title}》已添加到图书馆。") def remove_book(self, isbn):query = "DELETE FROM books WHERE isbn = %s"params = (isbn,)self._execute_query(query, params)print(f"ISBN为 {isbn} 的书籍已从图书馆删除。") def find_book(self, isbn):query = "SELECT title, author, isbn FROM books WHERE isbn = %s"self.cursor.execute(query, (isbn,))result = self.cursor.fetchone()if result:return Book(*result)return None def list_books(self):query = "SELECT title, author, isbn FROM books"self.cursor.execute(query)results = self.cursor.fetchall()if results:for row in results:print(Book(*row))else:print("图书馆中没有书籍。")def print_menu():print("\n图书管理系统")print("1. 添加书籍")print("2. 删除书籍")print("3. 查找书籍")print("4. 列出所有书籍")print("5. 退出")
解释:
-
__init__
和__del__
:初始化和销毁对象时的操作,分别是连接和关闭数据库。 -
_execute_query
:执行 SQL 查询。 -
add_book
、remove_book
、find_book
和list_books
:管理书籍的增、删、查、列操作。
步骤5:编写主程序
编写主程序来实现交互式菜单,让用户选择不同的操作:
if __name__ == "__main__":db_config = {'host': 'localhost','user': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'charset': 'utf8mb4'} library = Library(db_config) while True:print_menu()choice = input("请选择操作(1-5): ") if choice == '1':title = input("请输入书名: ")author = input("请输入作者: ")isbn = input("请输入ISBN: ")book = Book(title, author, isbn)library.add_book(book)elif choice == '2':isbn = input("请输入要删除的书籍ISBN: ")library.remove_book(isbn)elif choice == '3':isbn = input("请输入要查找的书籍ISBN: ")found_book = library.find_book(isbn)if found_book:print(f"找到书籍: {found_book}")else:print("未找到书籍。")elif choice == '4':library.list_books()elif choice == '5':print("退出系统。")breakelse:print("无效的选择,请重新输入。")
解释:
-
print_menu
:打印菜单。 -
主程序:根据用户输入调用不同的图书管理方法。
完整代码
将所有部分结合在一起,形成完整的程序:
import pymysql class Book(object):def __init__(self, title, author, isbn):self.title = titleself.author = authorself.isbn = isbndef __str__(self):return f"书名: {self.title}, 作者: {self.author}, ISBN: {self.isbn}"class Library(object):def __init__(self, db_config):self.conn = pymysql.connect(**db_config)self.cursor = self.conn.cursor()self.cursor.execute("USE library;")def __del__(self):self.cursor.close()self.conn.close()def _execute_query(self, query, params=None):self.cursor.execute(query, params)self.conn.commit()def add_book(self, book):query = "INSERT INTO books (title, author, isbn) VALUES (%s, %s, %s)"params = (book.title, book.author, book.isbn)self._execute_query(query, params)print(f"书籍《{book.title}》已添加到图书馆。")def remove_book(self, isbn):query = "DELETE FROM books WHERE isbn = %s"params = (isbn,)self._execute_query(query, params)print(f"ISBN为 {isbn} 的书籍已从图书馆删除。")def find_book(self, isbn):query = "SELECT title, author, isbn FROM books WHERE isbn = %s"self.cursor.execute(query, (isbn,))result = self.cursor.fetchone()if result:return Book(*result)return Nonedef list_books(self):query = "SELECT title, author, isbn FROM books"self.cursor.execute(query)results = self.cursor.fetchall()if results:for row in results:print(Book(*row))else:print("图书馆中没有书籍。")@staticmethoddef print_menu():print("\n图书管理系统")print("1. 添加书籍")print("2. 删除书籍")print("3. 查找书籍")print("4. 列出所有书籍")print("5. 退出")if __name__ == "__main__":db_config = {'host': 'localhost','user': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'charset': 'utf8mb4'}library = Library(db_config)while True:library.print_menu()choice = input("请选择操作(1-5): ")if choice == '1':title = input("请输入书名: ")author = input("请输入作者: ")isbn = input("请输入ISBN: ")book = Book(title, author, isbn)library.add_book(book)elif choice == '2':isbn = input("请输入要删除的书籍ISBN: ")library.remove_book(isbn)elif choice == '3':isbn = input("请输入要查找的书籍ISBN: ")found_book = library.find_book(isbn)if found_book:print(f"找到书籍: {found_book}")else:print("未找到书籍。")elif choice == '4':library.list_books()elif choice == '5':print("退出系统。")breakelse:print("无效的选择,请重新输入。")
相关文章:
程序猿大战Python——实现简单的图书馆系统操作
步骤1:安装和导入库 首先,确保已经安装了 pymysql 库。如果没有安装,请执行以下命令: pip install pymysql 然后,导入必要的库: import pymysql 步骤2:创建数据库和表的函数 编写一个函数来…...
液体粒子计数器的原理及常见型号选择 lighthouse代理商北京中邦兴业
液体颗粒计数用于测量液体样品中颗粒的大小和分布。通过用激光二极管照射液体样品并检测散射光来测量颗粒分布和尺寸。散射光的性质与粒子大小的大小有关。液体颗粒计数器可用于批量取样或在线(连续监测)应用,如水处理厂,或用于…...
Java知识点整理 16 — Spring Bean
在之前的文章 Java知识点整理 8 — Spring 简介 中介绍了 Spring 的两大核心概念 IoC 和 AOP,但对 Spring Bean 的介绍不全面,本文将补充 Spring 中 Bean 的概念。 一. 什么是 Spring Bean 在 Spring 官方文档中,对 bean 的定义为…...
Nvidia Jetson/RK3588+AI双目立体相机,适合各种割草机器人、扫地机器人、AGV等应用
双目立体视觉是基于视差原理,依据成像设备从不同位置获取的被测物体的图像,匹配对应点的位置偏移,得到视差数据,进而计算物体的空间三维信息。为您带来高图像质量的双目立体相机,具有高分辨率、低功耗、远距离等优点&a…...
springboot使用feign调用不依赖cloud
在使用spring boot调用第三方api中,常用的是okhttp、apache http client等,但是直接使用下来还是有点繁琐,需要手动转换实体。 在springcloud中有个openfeign调用,第一次体验到调用接口还能这么丝滑。注解写道接口上,…...
springboot中使用springboot cache
前言:SpringBoot中使用Cache缓存可以提高对缓存的开发效率 此图片是SpringBootCache常用注解 Springboot Cache中常用注解 第一步:引入依赖 <!--缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId…...
Promise,async/await的运用
一,了解Promise Promise是异步编程的一种解决方案,它是一个对象,可以获取异步操作的消息,它的出现避免了地狱回调。 (1)Promise的实例有三个状态: Pending(进行中) Re…...
图论·多源最短路径Floyddijsktra
例题地址 多源最短路径 多个源点多个终点可以使用Floyd算法直接求各源点到终点的最短距离,也可以直接多次使用dijsktra算法求单源点到终点的最短距离 Floyd算法 使用条件 多源最短路径权值正负皆可 核心思想:动态规划 子问题: 设(A,B)…...
微服务 | Springboot整合GateWay+Nacos实现动态路由
1、简介 路由转发 执行过滤器链。 网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时,基于Filter链的方式提供了网关的基本功能,比如:鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。 基本功能…...
做google SEO 有哪些好用的工具?这12款谷歌SEO工具值得收藏!
1、Google Trends 谷歌旗下一款基于搜索数据推出的一款免费分析工具 外贸人有句老话,七分靠选品,三分靠运营。在你开始做独立站之前,在你不清楚你的行业在Google上面能否有足够的流量时,那么Google Trends则是你最好的工具。 你只…...
【变频调速在锅炉引风机控制中的应用】
变频调速在锅炉引风机控制中的应用 变频器的选型 变频器是利用电力半导体器件的通断作用将工频电源变换为另一种频率的电能控制装置,能宏观对交流异步电机软启动,变频调速,提高运转精度,改变功率因数,过流/过压/过载保护等功能,国内技术较领先的品牌有汇川、欧瑞(原烟台…...
网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>
参考: 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…...
【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号
最近拿到了【Hello 图狗】制作的三调/变更样式符号库,确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02(汇总)_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病,就是匹配样式之后,…...
tensorflow学习1.3-创建会话,启动会话
tensorflow学习1.3-创建会话,启动会话 会话的由来与作用由来作用 会话的定义与结构定义 用法基本用法上下文管理器执行部分计算图获取多个结果 总结 练习代码报错原因:TensorFlow 2.x中的Eager Execution使用兼容模式来启用SessionEager Execution和计算…...
QT基本对话框(基本对话框、工具盒类、进度条、调色板与电子钟、可扩展对话框、程序启动画面)
此篇文章通过实例介绍基本对话框的用法。首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)以及标…...
Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具
文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统(RDBMS),它是MySQL的一个分支和替代品。 官网:https://mariadb.com/镜像ÿ…...
qt 可以在一个函数中读一个文件,然后再将内容写入另一个文件中
是的,Qt 允许你在一个函数中读取一个文件的内容,并将这些内容写入到另一个文件中。这可以通过结合使用 QFile 和 QTextStream(或 QDataStream,取决于你的具体需求)来实现。以下是一个简单的示例,展示了如何…...
Dijkstra算法C代码
一个带权图n个点m条边,求起点到终点的最短距离 先定义一个邻接矩阵graph,graph[i][j]表示从i到j的距离,i到j没有路就表示为无穷 然后定义一个visit数组,visit[i]表示i结点是否被访问 然后定义一个dist数组,dist[i]表…...
P1064 [NOIP2006 提高组] 金明的预算方案
[NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置࿰…...
大型企业组网如何规划网络
大型企业组网是一个复杂的过程,它需要细致的规划和设计,以确保网络能够满足企业的业务需求,同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素: 1. 需求分析 业务需求:与各个业务部门…...
java:aocache的单实例缓存(二)
之前一篇博客《java:aocache的单实例缓存》介绍了aoocache使用注解AoCacheable实现单实例缓存的方式,同时也指出了这种方式的使用限制,就是这个注解定义的构造方法,不能再创建出新实例。 为了更灵活方便的实现单实例。aocache最新版本0.4.0增…...
ElasticSearch安装部署
简介 Elasticsearch 是一个开源的分布式搜索和分析引擎,用于实时地存储、检索和分析大数据量。它基于 Apache Lucene 搜索引擎库构建而成,提供了一个强大、稳定且易于扩展的搜索解决方案。 主要特点和用途: 分布式存储和搜索: E…...
数据赋能(132)——开发:数据转换——影响因素、直接作用、主要特征
影响因素 数据转换过程中需要考虑的一些影响因素: 数据格式与结构: 不同系统或应用可能使用不同的数据格式(如JSON、XML、CSV等)和数据结构(如关系型数据库、非关系型数据库等)。数据转换需要确保原始数据…...
TMGM:ASIC撤销禁令,TMGM强化合规、重启差价合约服务
TMGM作为差价合约(CFDs)与保证金外汇交易领域的领航者,安全、合规、高效被奉为我集团的终身使命。澳大利亚证券和投资委员会(ASIC)已正式撤销了早前针对TMGM差价合约业务实施的临时止损令。这一误会的解除,…...
基于SpringBoot网吧管理系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 Java精品实战案例《600套》 2025-2026年最值得选择的Java毕业设计选题大全࿱…...
实测2024年最佳的三款Socks5代理IP网站
一、引言 在浩瀚的网络世界中,Socks5代理IP服务如同导航灯塔,指引我们穿越数据海洋,安全、稳定地访问目标网站。作为专业的测评团队,我们深知一款优秀的Socks5代理IP网站需要具备哪些特质:稳定的IP资源、高效的连接速…...
Pythonnet能导入clr,但无法引入System模块?
【pythonnet详解】—— Python 和 .NET 互操作的库_pythonnet 详细使用-CSDN博客 Python中动态调用C#的dll动态链接库中方法_python 如何调用c# dll-CSDN博客 需求:Python调用并传List<float>类型参数给.Net 起初:直接 # 创建一个Python浮点数…...
媒体宣发套餐的概述及推广方法-华媒舍
在今天的数字化时代,对于产品和服务的宣传已经变得不可或缺。媒体宣发套餐作为一种高效的宣传方式,在帮助企业塑造品牌形象、扩大影响力方面扮演着重要角色。本文将揭秘媒体宣发套餐,为您呈现一条通往成功的路。 1. 媒体宣发套餐的概述 媒体…...
Windows和Linux C++判断磁盘空间是否充足
基本是由百度Ai写代码生成的,记录一下。实现此功能需要调用系统的API函数。 对于Windows,可调用函数GetDiskFreeSpaceEx,使用该函数需要包含头文件windows.h。该函数的原型: 它的四个参数: lpDirectoryName࿰…...
数据访问层如何提取数据到其他层,其他类中
当然可以,以下是一些具体的例子,展示了如何将数据库访问逻辑封装在一个单独的类中,并在其他类中使用这个类来获取数据。 数据库访问类(DatabaseAccess.java): java复制代码 import java.sql.*; import ja…...
网站建设服务采购方案模板/英雄联盟最新赛事
JAVA中数据库事务处理的实现张蔓 陈景春成都电子科技大学计算机学院摘要 本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean、Ejb组件实现J2EE应用服务器支持的JDBC事务、JTA(Java Transaction API)事务。关键词 Ja…...
竞价网站同时做优化可以吗/宁波seo网络推广咨询价格
一、使用背景. 1.1 当完成一个版本,需要,需要给这个版本打一个标签.见证某款软件的某一历史时刻. 二、Git tag的使用. 2.1 git tag(查看当前所有分支). git tag(当前没有版本信息). 2.2 git tag -a [tagname] (为最新一次提交打版本) 此时只是提交到了本地仓库,还没有推…...
禹州做网站/互动营销的方式有哪些
Go语言连接Oracle首先交代一下运行环境和工具版本:WIN10MINGW64ORACLEINSTANCCLIENT_18_3 x64Jetbrins Goland编译阶段:1. exec: "gcc": executable file not found in %PATH%2. exec: "pkg-config": executable file not found in %PATH%3. ca…...
高性能网站开发/今日最新新闻
所有使用 /proc 的模块应当包含 <linux/proc_fs.h> 来定义正确的函数. 要创建一个只读 /proc 文件, 你的驱动必须实现一个函数来在文件被读时产生数据. 当 某个进程读文件时(使用 read 系统调用), 这个请求通过这个函数到达你的模块. 我们先 看看这个函数并在本章后面讨论…...
烟台开发区人才市场招聘信息/合肥网络公司seo建站
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2325 Accepted Submission(s): 1020Problem Description传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房…...
做网站前台后台是怎么连接的/北大青鸟培训机构官网
【记录】ASP.NET IIS ISAPI_Rewrite下载地址(Lite 免费版):Download ISAPI_Rewrite 3 配置(导入自定义 httpd.ini 文件): IIS ISAPI 筛选器(不需要重写的站点可以移除): 参考资料: 主 ...数据库连接JDBC和数据库连接池C3P0自定义的java封装类数据库连接J…...