图书管理系统:
1.功能模块:
2.图书信息
1.数据库的存储方式:mysql
2.通过云服务器安装一个mysql数据库,可参考博客
安装mysql数据库
3.登录数据库,创建一个表
create table books( id int unsigned primary key auto_increment not null, name varchar(20) default '', position varchar(40) default '', status enum('在库','出借') default '在库', borrower varchar(20) default '' );
4.查询数据库
select * from books;
5.插入数据
insert into books values(0,'python入门到精通','A区2号架3层','在库','1'); insert into books values(2,'java入门到精通','A区2号架4层','在库','1'); insert into books values(5,'c语言','A区2号架4层','在库','');
6.更新数据
update books set name='php',status='出借' where id=1;
1.安装pymysql
pip install pymysql
2.连接数据库
con=pymysql.connect( host='152.136.217.145', port=3306, user='root', password='123456', database='test', charset='utf8', cursorclass=pymysql.cursors.DictCursor)
1.项目主流程和菜单提示
2.数据库连接
通过pymysql连接数据库,封装执行查询语句和修改语句的方法。
3.添加图书
4.修改图书
5.图书列表
6.查询图书
1、输入书名,查询出与之匹配的图书信息,并打印
2、提示:
继续查询输入1,回车退回到主菜单
7、删除图书
1、输入书籍编号,找到对应的书籍,从数据库中删除
2、提示:
继续删除输入1,回车退回到主菜单
8、借阅图书
1、输入图书编号,查找到该书籍
2、提示用户输入借阅人名字
3、将书籍的状态改为出借,借阅人改为输入的名字
4、提示:
继续添加输入1,回车退回到主菜单
9、归还图书
1、输入图书编号,查找到该书籍
2、将书籍的状态改为在库,借阅人改为空
3、提示:
继续添加输入1,回车退回到主菜单
# @Time : 2021/12/19 12:17 # @Author : guiyin # @FileName: BookManager.py # @SoftWare: PyCharm import pymysql class DB: def __init__(self): # 连接数据库 self.con = pymysql.connect( host='152.136.217.145', port=3306, user='root', password='123456', database='test', charset='utf8', cursorclass=pymysql.cursors.DictCursor) #创建游标 self.cur = self.con.cursor() def query_sql(self,sql): """查询sql语句的方法""" self.cur.execute(sql) #返回查询到的所有结果 return self.cur.fetchall() def update_sql(self,sql): """执行增删改sql的方法""" self.cur.execute(sql) # 提交事务 self.con.commit() def close(self): """关闭游标,断开连接""" self.cur.close() self.con.close() class Books: def __init__(self): self.db = DB() def menu(self): print("-" * 20 + "欢迎进入图书管理系统" + "-" * 20) print("-" * 20 + "菜单" + "-" * 20) print("【1】: 添加图书") print("【2】: 修改图书") print("【3】: 删除图书") print("【4】: 查询图书") print("【5】: 图书列表") print("【6】: 出借图书") print("【7】: 归还图书") print("【8】: 退出") def main(self): """程序的入口函数""" # 1、输出提示信息到控制台 # 2、用户根据提示,选择功能 # 3、判断用户的输入,执行对应的功能函数 #用户输入 while True: self.menu() number = input("请输入选项:") if number == "1": self.add_book() elif number == "2": self.update_book() elif number == "3": self.delete_book() elif number == "4": self.query_book() elif number == "5": self.all_book() elif number == "6": self.lend_book() elif number == "7": self.revert_book() elif number == "8": self.quit() break else: print("你输入的选项有误请重新输入!") def add_book(self): """添加图书""" """ 1.用户输入图书信息(书名、位置) 2.将用户的输入保存到数据库(执行sql) 3.提示用户是否继续添加 """ print("*" * 8 + "添加图书" + "*" * 8) name = input("请输入书名") position = input("请输入图书位置") sql = "insert into books(name,position )value('{}','{}') ".format(name,position) self.db.update_sql(sql) print("添加成功") n=input("继续添加请输入1,回车退回主菜单") if n =='1': self.add_book() def update_book(self): """修改图书""" print("*" * 8 + "修改图书" + "*" * 8) id = input("请输入修改图书编号") #执行查询的结果,带“”处理不报错的情况 sql1 = f'select * from books where id="{id}"' res_book_dail=self.db.query_sql(sql1) if res_book_dail: print("请确认要修改的是否是以下图书 \n",res_book_dail[0]) name = input("不修改书名直接回车,修改则输入新的书名:").strip() or res_book_dail[0]["name"] position = input("不修改位置直接回车,修改则输入新的位置:").strip() or res_book_dail[0]["position"] sql = f'update books set name="{name}",position="{position}" where id="{id}"' res = self.db.update_sql(sql) # if name and position: # sql = f'update books set name="{name}",position="{position}" where id="{id}"' # elif name: # sql = f'update books set name="{name}" where id="{id}"' # elif position: # sql = f'update books set position="{position}" where id="{id}"' # else: # print() else: print("你输入书籍有误或者不存在") n = input("继续修改请输入1,回车退回主菜单") if n == '1': self.update_book() def delete_book(self): """删除图书""" print("*" * 8 + "删除图书" + "*" * 8) id = input("请输入删除图书编号") # 执行查询的结果,带“”处理不报错的情况 sql1 = f'select * from books where id="{id}"' res_book_dail = self.db.query_sql(sql1) if res_book_dail: print("你要删除的图书信息如下:",res_book_dail[0]) n = input("确认删除输入1,回车取消删除") if n == "1": sql = f'delete from books where id="{id}"' self.db.update_sql(sql) print("删除成功") else: print("取消删除") else: print("你输入的图书编号不存在或者有误") n = input("继续删除请输入1,回车退回主菜单") if n == '1': self.delete_book() def query_book(self): """查询图书""" print("*" * 8 + "查询图书" + "*" * 8) name = input("请输入要查询的图书名称") # 执行查询的结果,带“”处理不报错的情况 sql1 = f'select * from books where name="{name}"' res_book_dail = self.db.query_sql(sql1) print("图书详细信息",res_book_dail[0]) print("查询图书成功") def all_book(self): """获取所有 图书""" print("*" * 8 + "图书列表" + "*" * 8) sql = "select * from books " res_book=self.db.query_sql(sql) for book in res_book: print(f'编号:{book["id"]},书名:{book["name"]},位置:{book["position"]},状态:{book["status"]},借阅人:{book["borrower"]}') def lend_book(self): """出借图书""" print("*" * 8 + "借阅图书" + "*" * 8) id = input("请输入图书编号") # 执行查询的结果,带“”处理不报错的情况 sql1 = f'select * from books where id="{id}"' res_book_dail = self.db.query_sql(sql1) if res_book_dail[0]["status"] == "在库": borrower = input("请输入借阅者名字:") sql1 = 'update books set status="出借",borrower="{}" where id ="{}" '.format(borrower,id) res = self.db.update_sql(sql1) print("借阅成功!!!!") elif res_book_dail[0]["status"] == "出借": print("此书已被借出") else: print("输入有误请") n = input("继续借阅请输入1,回车退回主菜单") if n == '1': self.lend_book() def revert_book(self): """归还图书""" print("*" * 8 + "归还图书" + "*" * 8) id = input("请输入图书编号,查找需要归还的图书") # 执行查询的结果,带“”处理不报错的情况 sql1 = f'select * from books where id="{id}"' res_book_dail = self.db.query_sql(sql1) if res_book_dail[0]["status"] == "出借": sql = f'update books set status="在库",borrower=null where id="{id}"' res=self.db.update_sql(sql) print("图书归还成功") else: print("图书状态有误,请检查") n = input("继续归还请输入1,回车退回主菜单") if n == '1': self.revert_book() def quit(self): """退出""" print("退出系统") if __name__ == '__main__': Books().main()