程序猿大战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_bookremove_bookfind_booklist_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("无效的选择,请重新输入。")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 重要参数优化

max_connections = 3000 innodb_buffer_pool_size = 8G max_allowed_packet = 32M innodb_file_io_threads = 8 innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M 参数说明 max_connections = 3000 运行MySQL的最大连…

2-19 基于matlab的薄板弯曲的算例

基于matlab的薄板弯曲的算例,利用有限元方法编制matlab程序。对二维薄板进行单元化,输出薄板结构参数及载荷,输出弯曲情况,并可视化展示。程序已调通,可直接运行。 2-19 薄板弯曲 有限元方法 薄板结构参数 - 小红书 (x…

阿里web前端面试-笔试题

面试中遇到的笔试题,记录一下~ 题目: 1.写一个方法,统计字符串中出现的字母及出现次数。 比如:入参abcAAAabc 返回:a:2,b:2,c:2,A:3(示形式不限,但是结果中要能清晰感知出现字母及出现的次数…

odoo17 在线聊天报错提示 Couldn‘t bind the websocket...

在17版本中,使用在线聊天功能时,发现有报错 Couldnt bind the websocket. Is the connection opened on the evented port 8072在跟踪代码后,发现在 odoo-17.0\addons\bus\websocket.py 836 行在linux有差异 进行修改优化 修改前 socket …

福昕阅读器再打开PDF文件时,总是单页显示,如何设置打开后就自动显示单页连续的模式呢

希望默认进入连续模式 设置方法 参考链接 如何设置使福昕阅读器每次启动时不是阅读模式 每次启动后都要退出阅读模式 麻烦_百度知道 (baidu.com)https://zhidao.baidu.com/question/346796551.html#:~:text%E5%9C%A8%E3%80%90%E5%B7%A5%E5%85%B7%E3%80%91%E9%87%8C%E6%9C%89%E…

等保测评练习卷14

等级保护初级测评师试题14 姓名: 成绩: 判断题(10110分) 1. 方案编制活动中测评对象确定、测评指…

Unity+OpenCV+Dlib实现换脸+图片生成+上传服务器+生成二维码[纯干货]

UnityOpenCVDlib实现换脸图片生成上传服务器生成二维码 功能描述 一句话描述:让游客体验一下当宇航员的乐趣。 具体功能:游客通过摄像头拍照,生成有着“自己的脸”的宇航员的图片,然后展示二维码,供游客下载。 效果…

Python学习笔记五

1.当循环执行完整后&#xff0c;就会执行else里面的代码 s0 i1 while i<100:sii1 else:print(s) 当循环不完整就会如下 s0 i1 while i<100:sii1if s6:break; else:print(s) 2. 实现密码匹配&#xff0c;可以输入三次&#xff0c;若输入三次错误会退出&#xff0c;或者输…

部分力扣题记

1.. - 力扣&#xff08;LeetCode&#xff09; 这题用到了map和栈的知识点 我们利用map的特性&#xff0c;将&#xff08;&#xff09;【】{}&#xff0c;分别一一对应 然后遍历&#xff0c;如果map&#xff08;char&#xff09;为真&#xff0c;就意味着是左边的部分&#x…

界面组件DevExpress WinForms v24.1 - 支持DateOnly TimeOnly类型

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

1976 ssm 营地管理系统开发mysql数据库web结构java编程计算机网页源码Myeclipse项目

一、源码特点 ssm 营地管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…

网络爬虫的架构

网络爬虫的架构 网络爬虫的架构&#xff0c;犹如一座精心设计的桥梁&#xff0c;连接着海量的互联网数据与我们的需求。在网络爬虫的世界里&#xff0c;每一个组件都扮演着至关重要的角色&#xff0c;它们协同工作&#xff0c;确保数据的高效获取与处理。 在爬虫架构的顶层&a…

时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database

AbutionGraph是一款端到端的流式数据实时分析的图谱数据库&#xff0c;实时&#xff08;流式写入实时、高QPS决策分析实时、流式预处理实时&#xff09;表现在&#xff1a; 构建实时查询QPS响应时长与历史数据量无关的图模型&#xff1b;接入流式数据并实时更新图计算指标&…

Spring Cloud Consul作为配置中心实践

官网地址&#xff1a;https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-config 先说个人总结&#xff1a;作为配置中心对比config、Consul以及Nacos后&#xff0c;建议使用 Nacos。 Consul 提供了一个键/值存储用于保存配置和其…

Vite: 代码分割与拆包

概述 在生产环境下&#xff0c;为了提高页面加载性能&#xff0c;构建工具一般将项目的代码打包(bundle)到一 起&#xff0c;这样上线之后只需要请求少量的 JS 文件&#xff0c;大大减少 HTTP 请求。当然&#xff0c;Vite 也不例 外&#xff0c;默认情况下 Vite 利用底层打包引…

简单的本地局域网的前后端接口联调

由于项目被赶进度了&#xff0c;急于前后端联调接口&#xff0c;但是我又没钱买服务器&#xff08;主要我也不会部署&#xff09;&#xff0c;所以我这里就紧急找一个后端的大神朋友请教了一下&#xff1a;苏泽SuZe-CSDN博客 提示&#xff1a;这里不讲后端怎么写接口、前端怎么…

Java的异常处理体系

目录 异常处理1、Java的异常类层次结构2、try-catch-finally 使用注意事项3、在Web应用中如何实现全局异常处理机制 异常处理 1、Java的异常类层次结构 其中Error表示程序运行错误 常见的错误类型有&#xff1a; OutOfMemoryError (内存溢出错误) StackOverFlowError (栈内存溢…

【408计算机组成原理】计算机系统层次结构

计算机系统层次结构 计算机系统由硬件和软件两大部分组成&#xff0c;它们相互作用&#xff0c;共同完成信息处理任务。计算机系统可以分为多个层次&#xff0c;每一层次都有其特定的功能和作用。 硬件层次 输入设备&#xff1a;这些设备负责将用户的指令和数据输入到计算机…

论文学习:基于知识图谱的RAG进行客服问答

1.简介 文章名称&#xff1a; Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering&#xff08;基于知识图谱的RAG进行客服问答&#xff09; 2.摘要ABSTRACT 在客户服务技术支持中&#xff0c;迅速准确地检索相关的过往问题对于有…