本文已参与「新人创作礼」活动,一起开启掘金创作之路
功能程序
初始化
-
mysql数据初始化 建两个数据表一个是allbook一个是borrowtable。
allbook(所有书单)相关数据信息:
borrowtable(借书单)相关数据信息:
-
用户信息初始化 管理员(admsg)和普通用户(usermsg)
admsg = {'李元': '111', '王二': '222', '张三': '333'}
usermsg = {'小芳': '444', '婷婷': '555', '小辉': '666'}
显示借书单
import pymysql
def display_book():
'''连接database'''
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 输出所有的书
sql = "select book from borrowtable"
cursor.execute(sql)
data = cursor.fetchall()
library_books = []
for book in data:
library_books.append(book[0])
print("全书为", library_books)
conn.close()
cursor.close()
return
增加书籍
判定表中书目是否存在,如果存在对数目改动,反之插入单条图书数据。
from easygui import *
import pymysql
def append_book():
append_msg = []
append_msg = multenterbox("添加新书", "图书管理系统", ["id", "书名", "作者", "数目"])
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "SELECT * FROM allbook WHERE book='%s'AND author='%s'" % (append_msg[1], append_msg[2])
cursor.execute(sql)
results = cursor.fetchone()
# 如果在表中则对已有的图书amount进行更新
if results:
sql = "UPDATE allbook SET amount=amount+%d WHERE name='%s' AND author='%s'" % (
int(append_msg[3]), append_msg[1], append_msg[2])
cursor.execute(sql)
# 涉及写操作要注意提交
conn.commit()
# 如果没有在表中则插入一条图书数据
else:
sql = "INSERT INTO allbook VALUES('%d','%s','%s','%d')" % (
int(append_msg[0]), append_msg[1], append_msg[2], int(append_msg[3]))
cursor.execute(sql)
# 提交
conn.commit()
conn.close()
删除书籍
from easygui import *
import pymysql
def delete_book():
'''删除booktable中指定的全部书籍'''
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "select book from allbook"
cursor.execute(sql)
data = cursor.fetchall()
books = []
for book in data:
books.append(book[0])
print("借书列表为", books)
# 删除书籍
while True:
de_book = choicebox(msg='请选择要删除的书', title='图书管理系统', choices=books)
print("hhhhhhh", de_book, type(de_book))
sql1 = "SELECT * FROM allbook WHERE book='%s'" % de_book
cursor.execute(sql1)
result = cursor.fetchone()
if result:
# 如果在表中则对已有的图书进行修改
# SQL 删除语句
sql2 = "DELETE FROM allboook WHERE book='%s'" % (de_book)
try:
# 执行SQL语句
cursor.execute(sql2)
# 提交修改
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
finally:
# 最终关闭数据库连接
conn.close()
break
# 未找到书直接返回未找到
else:
print("没有你要删除的书")
continue
通过ID查找书籍
使用pymysql操作mysql数据表查找某个数据:
-
fetchone() :
返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None。
-
fetchall() : 接收全部的返回结果行。
-
fetchmany(self, size=None): 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
from easygui import *
import pymysql
def search_book():
# 查找书籍
search_msg = enterbox("输入需找书的id", "图书借阅系统")
# 在数据库图书表中找到指定的信息
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "SELECT * FROM allbook WHERE id='%s'" % (search_msg)
# 执行sql语句
cursor.execute(sql)
res = cursor.fetchone()
if res:
print("书名:%s 作者:%s." % (res[1], res[2]))
else:
print("没有您所要查询的图书")
# 关闭数据库连接
conn.close()
全部书单
import pymysql
def all_book():
'''输出所有的书单allbook'''
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "select book from allbook"
cursor.execute(sql)
data = cursor.fetchall()
library_books = []
for book in data:
library_books.append(book[0])
print("全书列表为", library_books)
conn.close()
cursor.close()
借书
from easygui import *
import pymysql
def borrow_book():
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
borrow_msg = []
borrow_msg = multenterbox("借书", "图书借阅系统", ["id"])
sql = "SELECT * FROM allbook WHERE id='%s'" % (borrow_msg[0])
cursor.execute(sql)
result = cursor.fetchone()
print("您要借阅的书籍书名:%s 作者:%s 当前剩余:%d本 借后剩余:%d本" % (result[1], result[2], result[3], result[3] - 1))
# 如果在表中则对已有的图书amount进行更新
if result:
sql1 = "UPDATE allbook SET amount=amount-%d WHERE id='%s'" % (1, borrow_msg[0])
cursor.execute(sql1)
# 涉及写操作要注意提交
conn.commit()
sql2 = "UPDATE borrowtable SET amount=amount+%d WHERE id='%s'" % (1, borrow_msg[0])
cursor.execute(sql2)
# 提交
conn.commit()
# 未找到书直接返回未找到
else:
print("没有你要借的书")
# 关闭数据库连接
conn.close()
return
还书
还书与借书操作差不多,唯一区别在于对两个表的操作有一些区别。
from easygui import *
import pymysql
def return_book():
'''归还图书,如在借表中,借表该书数目减一,图书表书目加一,反之返回不存在'''
borrow_msg = []
borrow_msg = multenterbox("还书", "图书借阅系统", ["id"])
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql1 = "SELECT * FROM allbook WHERE id='%d'" % (int(borrow_msg[0]))
cursor.execute(sql1)
result = cursor.fetchone()
# print("您要归还的书籍书名:%s 作者:%s 当前剩余:%d本 还后:%d本" % (result[1], result[2], result[3],result[3]+1))
# 如果在表中则对已有的图书amount进行更新
if result:
sql = "UPDATE allbook SET amount=amount+%d WHERE id='%s'" % (1, borrow_msg[0])
cursor.execute(sql)
# 涉及写操作要注意提交
conn.commit()
sql1 = "UPDATE borrowtable SET amount=amount-%d WHERE id='%s'" % (1, borrow_msg[0])
cursor.execute(sql1)
# 提交
conn.commit()
# 未找到书直接返回未找到
else:
print("没有该书")
# 关闭数据库连接
conn.close()
return
登录
from easygui import *
import Login
import Operate
#初始化
admsg = {'李元': '111', '王二': '222', '张三': '333'}
usermsg = {'小芳': '444', '婷婷': '555', '小辉': '666'}
def choice(cchoices):
# 用户登录前身份选择
if (cchoices == '管理员'):
Login.login(admsg)
while 1:
c = choicebox(msg='请选择下列操作', title='管理员系统', choices=['查看借书书单', '添加书籍', '删除书籍', '退出'])
if c != '退出':
Operate.operate(c)
else:
msgbox("欢迎下次使用")
break
elif (cchoices == '普通用户'):
Login.login(usermsg)
while 1:
c = choicebox(msg='请选择下列操作', title='学生操作系统', choices=['借书', '还书', '输入id查书', '查看书单', '退出'])
if c != '退出':
Operate.operate(c)
else:
msgbox("欢迎下次使用")
break
else:
return 0
密码验证
注意哦lista是形参,传入admsg,usermsg(实参)起作用。
from easygui import *
def login(lista):
# 登录,验证用户输入的信息
user_info = []
user_info = multpasswordbox(msg='请输入登录信息', title='Login', fields=('用户名', '密码'))
name = user_info[0]
password = user_info[1]
if name in lista.keys():
targp = lista[name]
if targp == password:
return (1)
else:
login(lista)
else:
msgbox("该用户不存在或账户错误,请重新输入")
login(lista)
##功能选择
import Display_book
import Append_book
import Delete_book
import Search_book
import All_book
import Borrow_book
import Return_book
def operate(op_choice):
# 用户选择操作界面,!登录后才可以选择
if op_choice == '查看借书书单':
Display_book.display_book()
elif op_choice == '添加书籍':
Append_book.append_book()
elif op_choice == '删除书籍':
Delete_book.delete_book()
elif op_choice == '输入id查书':
Search_book.search_book()
elif op_choice == '查看书单':
All_book.all_book()
elif op_choice == '借书':
Borrow_book.borrow_book()
elif op_choice == '还书':
Return_book.return_book()
主程序
# 图书管理系统
from easygui import *
import pymysql
import Choice
# 连接database
conn = pymysql.Connect(
host='localhost', # 数据库ip地址
port=3306, # 端口号
user='a Fang', # 用户名
passwd='123456', # 密码
db='2020.11.10', # 数据库名称
charset='utf8'
)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 执行SQL语句
# cursor.execute(sql)
# 关闭光标对象
# cursor.close()
# 关闭数据库连接
conn.close()
cchoices = 0
if __name__ == "__main__":
msgbox('欢迎进入图书管理系统', 'Library')
while 1:
cchoices = buttonbox(msg='选择登陆方式', title='Library', choices=('普通用户', '管理员'))
if cchoices is None:
break
else:
Choice.choice(cchoices)
程序架构
具体的程序运行架构在我的前几篇文章中,大家可以看看哦!
MySQL使用问题提醒
- 设置密码的时候一定要记住! 如果密码忘记了,可以试试重装,再设密码,如果不想重装可以试试网上教程,更改密码,降低权限,其实都蛮复杂(反正我是没有试好)
- 记得使用cmd跑一遍数据库! 如果登录数据库做基本的操作都不可以,建议再看看教程,和书。
- 使用cmd的时候记得使用管理员身份启动(出现下面这种情况)
就这些啦,有问题的话,大家一起学习咯!!!