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