目录
PS:前提提要,因为学校说了要做课设,于是花了点时间做了下,几乎是仿照的b站的一份要钱的图书借阅系统,所以就直接仿了,但是是把管理员模式和普通用户模式给结合了,相当于参考了下。
项目图片展示:
登录界面
管理员使用界面
普通用户使用界面
使用工具:
python3.8
mysql
Pyqt5
navicat
具体功能介绍:
该管理系统包含管理员模式和普通用户模式,管理员可以进行添加和删除书籍的操作,同时也可以进行对普通用户的登录账户进行清除操作,至于添加普通用户,则是在界面的工具栏中的注册中进行,而普通用户则是可以进行查询借阅状态,查看所有书籍,以及借书和还书,两个登录模式都可以进行所有书籍的查阅,查阅可以包含书名、书号、作者名、分类和出版社几种方式。
项目演示视频:
数据库课设——PyQt5+Mysql图书借阅管理系统
pymysql数据库的参数:
conn =pymysql.connect(
host='localhost',
port=3306,
user="root",
password='xxxxxx',
database='total',
charset='utf8'
)
具体的pymysql的使用方法可以查看PyMySQL的基本使用_mjiansun的博客-CSDN博客_pymysql
些许源码解析:
首先是界面工具栏的注册,登录,退出登录和退出系统,这些都是在同一个界面进行不同控件的操作,于是就采用PyQT5的QStackedWidget,选中哪个工具栏就显示对应的控件信息,只要将控件存到栈容器中,之后调用即可。
self.stack1 = QWidget()
self.stack2 = QWidget()
self.stack3 = QWidget()
self.stack4 = QWidget()
MainWindow.login()
MainWindow.register()
MainWindow.common_login()
MainWindow.login_manager()
self.stack = QStackedWidget()
self.stack.addWidget(self.stack1)
self.stack.addWidget(self.stack2)
self.stack.addWidget(self.stack3)
self.stack.addWidget(self.stack4)
跳转,先清空QTableView的内容,读取表中所有的数据,确定好数据读取的左右范围,注意range的是左闭右开的范围,设置left和right界限,之后将从表中读取的数据的对应下标的数据存入QTableView中
cursor = conn.cursor()
sql = 'select * from operate;'
cnt = cursor.execute(sql)
res = cursor.fetchall()
a.removeRows(0, a.rowCount())
x = int(m.text())
if cnt > x*10:
left = (x-1)*10
right = x*10
else:
left = (x-1)*10
if cnt % 10 == 0:
right = x*10
else:
right = (x - 1) * 10 + cnt % 10
for i in range(left,right):
for j in range(0,9):
item = QStandardItem('%s' % (res[i][j]))
a.setItem(i%10, j, item)
b.setModel(a)
前一页按钮的槽方法,获取当前的页数,然后获取总页数,保证当前页数减一要大于0,如果大于0,那么就先清空QTableView的内容,然后设置当前的所在页数,然后再重新给QTableView添加新的item
def step_1(self,m,a,b):
cursor = conn.cursor()
sql_2 = 'select * from operate;'
cnt_2 = cursor.execute(sql_2)
res = cursor.fetchall()
x = int(m.text())
all = cnt_2/10
if cnt_2%10 != 0:
all += 1
if x-1 <= 0:
pass
else:
a.removeRows(0, a.rowCount())
m.setText(str(x-1))
x -= 1
if cnt_2 > x * 10:
left = (x - 1) * 10
right = x * 10
else:
left = (x - 1) * 10
right = (x - 1) * 10 + cnt_2 % 10
for i in range(left, right):
for j in range(0, 9):
item = QStandardItem('%s' % (res[i][j]))
a.setItem(i % 10, j, item)
b.setModel(a)
后一页按钮链接槽方法step_2,获取当前的页数和总页数,保证当前页数加一不能大于总页数,在这个前提下,清空QTableView的内容,然后重新从数据库中读取内容存入QTableView中
def step_2(self,m,a,b):
cursor = conn.cursor()
sql_2 = 'select * from operate;'
cnt_2 = cursor.execute(sql_2)
res = cursor.fetchall()
x = int(m.text())
all = int(cnt_2/10)
if cnt_2%10 != 0:
all += 1
if x+1 > all:
pass
else:
a.removeRows(0, a.rowCount())
m.setText(str(x+1))
x += 1
if cnt_2 > x * 10:
left = (x - 1) * 10
right = x * 10
else:
left = (x - 1) * 10
right = (x - 1) * 10 + cnt_2 % 10
for i in range(left, right):
for j in range(0, 9):
item = QStandardItem('%s' % (res[i][j]))
a.setItem(i % 10, j, item)
b.setModel(a)
写pymysql增删改查的注意事项:
1.除了查都要进行表的commit操作
2.execute(select*)操作返回值是整个表中的行数,也即存入表中的数据数量
3.在PyQT中不要随意进行数据库的断联,最好不要close