
通过python的面向对象编程,实现一个文字版的图书管理系统


数据存储方式:mysql
create table books(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
position varchar(40) default '',
status enum('在库','出借') default '在库',
borrorwer varchar(20) default ''
);insert into books(name,position) value('python入门到精通','A区2号架3层');insert into books value(0,'python入门到精通','A区2号架3层','在库','');update 表名 set 列1=值1,列2=值2... where 条件delete from 表名 where 条件;select * from 表名;python连接mysql数据库
# 安装pymysql pip install pymysql
pymysql.connect(
host='localhost',
user='root',
password="123456",
database='test',
port=3306,
cursorclass=pymysql.cursors.DictCursor)

需求:修改图书只能修改书名和位置信息。


pymysql_practice.py
import pymysql
#pymysql连接数据库
con = pymysql.connect( host='localhost',
user='root',
password="123456",
database='lenovo',
port=3306,
cursorclass=pymysql.cursors.DictCursor)
#创建一个游标对象
cur = con.cursor(cursor=pymysql.cursors.DictCursor) #以字典形式展示数据
#执行sql
sql = "select * from books"
res = cur.execute(sql)
print(res)
#获取查询的结果
result1 = cur.fetchall()
print(result1)
#执行增删改的sql
sql = 'insert into books(name,position) value("天龙八部","A区1号架1层");'
res2 = cur.execute(sql)
#提交事务
con.commit()
print(res2)
con.close()BookManage.py
import pymysql
class DB:
'''
项目涉及到数据库的增删查改,咱们封装数据库对应的操作方法来处理
查询的方法
增删改的方法
'''
def __init__(self):
# pymysql连接数据库
self.con = pymysql.connect(host='localhost',
user='root',
password="123456",
database='lenovo',
port=3306,
cursorclass=pymysql.cursors.DictCursor)
# 创建一个游标对象
self.cur = self.con.cursor(cursor=pymysql.cursors.DictCursor) # 以字典形式展示数据
def query_sql(self,sql):
'''
查询sql方法
:param sql: sql语句
:return: 查询得到的结果
'''
self.cur.execute(sql)
return self.cur.fetchall()
def update_sql(self,sql):
'''
:param sql: sql语句
:return:
'''
self.cur.execute(sql)
self.con.commit()
def close(self):
"""关闭游标,断开连接"""
self.cur.close()
self.con.close()
class Books(DB):
def add_book(self):
'''添加图书'''
print("---------添加图书--------")
name = input("请输入书名:")
position = input("请输入图书存放的位置:")
if name and position:
sql = "insert into books(name,position) value('{}','{}')".format(name,position)
self.update_sql(sql)
print("添加成功!")
else:
print("添加失败,书名和位置均不能为空!!!")
n = input("继续添加请输入1,回车返回主菜单")
#判断用户输入的是否为1,为1则再次调用添加图书的方法
if n == "1":
self.add_book()
else:
pass
def update_book(self):
'''修改图书'''
print("----------修改图书------------")
id = input("请输入要修改图书的ID")
#打印图书的信息
res = self.query_sql(f'select * from books where id={id}')
if res:
print("当前图书的信息",res)
# 进行修改
name = input("请输入新的书名,不修改请输入回车:") or res[0]['name']
position = input("请输入图书存放的位置,不修改请输入回车:") or res[0]['position']
sql = f'update books set name = "{name}",position="{position}" where id="{id}"'
self.update_sql(sql)
print("修改成功!")
else:
print("您输入的书籍id不存在")
n = input("继续修改请输入1,回车返回主菜单")
if n == "1":
self.update_book()
else:
pass
def del_book(self):
'''删除图书'''
print("----------删除图书------------")
id = input("请输入删除图书的id:")
# 打印图书的信息
res = self.query_sql(f'select * from books where id={id}')
if res:
print("您要删除的书籍信息如下:",res)
is_delete = input("确认删除请输入1,否则请输入回车:")
if is_delete == "1" and res[0]["status"]=="在库":
sql = 'delete from books where id = {id}'
self.update_sql(sql)
print("删除成功")
elif res[0]["status"]=="出借":
print("本书已出借,无法删除!")
else:
print("您输入的书籍id不存在")
#判断是否要继续删除
n = input("继续删除请输入1,回车返回主菜单")
if n == "1":
self.del_book()
else:
pass
def qurey_book(self):
'''查询图书'''
print("----------查询图书------------")
name = input("请输入要查询的图书名:")
if name:
sql = f"select * from books where name = '{name}' "
res = self.query_sql(sql)
if res:
for i in res:
print(i)
else:
print("图书馆暂无该书籍!")
else:
print("书名不能为空!")
# 判断是否要继续查询
n = input("继续查询请输入1,回车返回主菜单")
if n == "1":
self.qurey_book()
else:
pass
def book_list(self):
'''图书列表'''
sql = "select * from books"
res = self.query_sql(sql)
print("****************图书列表***************")
for i in res:
print(f'编号:{i["id"]},书名:{i["name"]},位置:{i["position"]},'
f'转态:{i["status"]},借阅人:{i["borrorwer"]}')
print("返回主菜单页面")
def revert_book(self):
'''归还图书'''
print("----------删除图书------------")
id = input("请输入要归还图书的ID:")
sql = f'select * from books where id = {id}'
res = self.query_sql(sql)
if res:
print("您要归还的图书信息如下:\n",res)
#查看图书的状态,如果状态为出借,则不能借出
if res[0]["status"] == "出借":
status = "在库"
lend_sql = f'update books set status="{status}",borrorwer=" " where id="{id}"'
self.update_sql(lend_sql)
print("归还成功")
else:
print("本书并未出借!")
else:
print("请输入正确的图书编号!")
# 判断是否要继续租借
n = input("继续归还请输入1,回车返回主菜单")
if n == "1":
self.revert_book()
else:
pass
def lend_book(self):
'''租借图书'''
print("----------租借图书------------")
id = input("请输入要租借图书的ID:")
sql = f'select * from books where id = {id}'
res = self.query_sql(sql)
if res:
print("您要借阅的图书信息如下:\n",res)
#查看图书的状态,如果状态为出借,则不能借出
if res[0]["status"] == "出借":
print("该图书已被借出!")
else:
print("本书可借出!")
borrorwer = input("借书请输入您的名字:")
status = "出借"
lend_sql = f'update books set status="{status}",borrorwer="{borrorwer}" where id="{id}"'
self.update_sql(lend_sql)
print("登记成功,借阅成功!")
else:
print("图书馆暂无该书籍!")
# 判断是否要继续租借
n = input("继续租借请输入1,回车返回主菜单")
if n == "1":
self.lend_book()
else:
pass
def quit(self):
'''退出'''
self.close()
print("程序退出!!!")
def print_menu(self):
'''打印菜单'''
print("-----菜单---------")
print("【1】︰添加图书\n"
"【2】:修改图书\n"
"【3】:删除图书\n"
"【4】:查询图书\n"
"【5】:图书列表\n"
"【6】:出借图书\n"
"【7】:归还图书\n"
"【8】:退出")
def main(self):
print("---------------欢迎进入小仔图书管理系统---------------")
while True:
self.print_menu()
number = input("请输入你的选项:")
if number == '1':
self.add_book()
elif number == "2":
self.update_book()
elif number == "3":
self.del_book()
elif number == "4":
self.qurey_book()
elif number == "5":
self.book_list()
elif number == "6":
self.lend_book()
elif number == "7":
self.revert_book()
elif number == "8":
self.quit()
break
else:
print("您输入的选项有误!憨批!")
if __name__ == '__main__':
book = Books()
book.main()