Mysql+Pyqt5数据库课设(图书借阅系统)

目录

项目图片展示:

使用工具:

 具体功能介绍:

项目演示视频:

pymysql数据库的参数:

些许源码解析:

写pymysql增删改查的注意事项:

源码地址:


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

源码地址:

GitHub - linluocheng/PyQT5-management-system

猜你喜欢

转载自blog.csdn.net/weixin_54627824/article/details/126912374
今日推荐