基于PyQt5+MySQL的学生信息管理系统(保姆级注释)

本文介绍如何利用Python的PyQt5 GUI库和MySQL数据库开发一个学生信息管理系统。文章详细讲解了数据库设计、登录界面、大厅界面、查询系统和设置功能的实现,包括数据的增删改查操作。同时,文中提到了系统架构和开发工具的选择。
摘要由CSDN通过智能技术生成

最近在学习GUI设计,分享做的一些小项目。
这篇文我们讲一下如何基于PyQt5和MySQL用Python制作简单的学生信息管理系统。
(由于内容比较多,我们分模块讲解。)
***添加博主vx(私信)获得源码和资源文件 ***
***不要要私信啦 博主在国外很忙 !!! 没时间看私信 ***

前言

当我们着手开发一款软件,得先有软件架构的思路。
我们先用PM的视角去了解它:
1.系统架构
在这里插入图片描述
我们把整个系统分为5个模块,并列出了各个模块的需求。

2.产品使用流程图
在这里插入图片描述
整个系统的操作流程也直观地体现出来了。
逻辑性条理性比较清晰。)

开发环境及工具如下:
操作系统:Win 10
Python版本:Python 3.8.6
开发工具:PyCharm专业版、MySQL、Navicat、PyQt5

一、Part1:数据库

在这里插入图片描述
我们直接使用数据库可视化工具Navicat生成需要的表和视图。

1、表

a.班级信息表

在这里插入图片描述

b.年级信息表

在这里插入图片描述

c.学生信息表

在这里插入图片描述

d.用户信息表

在这里插入图片描述

2、视图

a.班级和年级视图

在这里插入图片描述

b.学生信息视图

在这里插入图片描述

数据库的设计就完成了,后续使用只需向数据库中导入相关数据即可。

3、连接数据库

我们定义一个open()函数用于连接数据库:

# 连接数据库连接
def open():
    db = pymysql.connect(host='localhost', user='root', password='111111', database="db_student",charset="utf8")
    return db 
    

( 数据库信息根据个人修改。)

4、数据库数据的增、删、改

我们定义一个exec()函数用于数据库数据的增、删、改:

# 数据库数据的增、删、改操作
def exec(sql,values):
    db=open() 
    cursor = db.cursor() # 使用cursor获取操作游标
    try:
        cursor.execute(sql,values) # 执行增、删、改的SQL语句
        db.commit() 
        return 1 
    except:
        db.rollback() 
        return 0 
    finally:
        cursor.close()
        db.close() 

5、数据库数据的查询

我们定义query()函数用于数据库数据带参数的精确查询:

# 带参数的精确查询
def query(sql,*keys):
    db=open() 
    cursor = db.cursor() 
    cursor.execute(sql,keys) # 执行查询SQL语句
    result = cursor.fetchall() # 记录查询结果
    cursor.close() 
    db.close() 
    return result
    

我们定义query2()函数用于数据库数据不带参数的模糊查询:

# 不带参数的模糊查询
def query2(sql):
    db=open() 
    cursor = db.cursor() 
    cursor.execute(sql) # 执行查询SQL语句
    result = cursor.fetchall() # 记录查询结果
    cursor.close() 
    db.close() 
    return result 

6、用户信息

用户信息界面UI设计图如下:

在这里插入图片描述
将.ui转为.py文件后,我们还要进行以下功能的添加:

此处我们要注意的一点:
Qt Designer设计窗口.ui转为.py时,默认继承的是object类,为了各个窗口可以相互调用,我们需要将继承类手动改为QMainWindow,并添加__init__方法。

class Ui_MainWindow(QMainWindow):
    # 构造方法
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
        self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)  # 只显示最小化和关闭按钮
        self.setupUi(self) # 初始化窗体设置
        
a.显示用户信息

我们定义query()函数和getItem()来实现。

    # 查询用户信息,并显示在表格中
    def query(self):
        self.tbUser.setRowCount(0) # 清空表格中的所有行
        result = service.query("select * from tb_user") # 调用服务类中的公共方法执行查询语句
        row = len(result)  # 取得记录个数,用于设置表格的行数
        self.tbUser.setRowCount(row)  # 设置表格行数
        self.tbUser.setColumnCount(2)  # 设置表格列数
        # 设置表格的标题名称
        self.tbUser.setHorizontalHeaderLabels(['用户名称', '用户密码'])
        for i in range(row):  # 遍历行
            for j in range(self.tbUser.columnCount()):  # 遍历列
                data = QTableWidgetItem(str(result[i][j]))  # 转换后可插入表格
                self.tbUser.setItem(i, j, data) # 设置每个单元格的数据
    # 获取选中的表格内容
    def getItem(self, item):
        if item.column() == 0:  # 如果单击的是第一列
            self.select = item.text() # 获取单击的单元格文本
            self.editName.setText(self.select) # 显示在用户名称文本框中
b.用户信息的增、删、改

我们通过自定义add()、 edit()、delete()函数来实现。

    # 添加用户信息
    def add(self):
        userName = self.editName.text() # 记录输入的用户名
        userPwd = self.editPwd.text() # 记录输入的用户密码
        if userName != "" and userPwd != "": # 判断用户名和密码不为空
            # 执行添加语句
            result=service.exec("insert into tb_user(userName,userPwd) values (%s,%s)",(userName,userPwd))
            if result>0:  # 如果结果大于0,说明添加成功
                self.query() # 在表格中显示最新数据
                QMessageBox.information(None, '提示', '信息添加成功!', QMessageBox.Ok)
        else:
            QMessageBox.warning(None, '警告', '请输入数据后,再执行相关操作!', QMessageBox.Ok)

    # 修改用户信息
    def edit(self):
        try:
            if self.select!="": # 判断是否选择了要修改的数据
                userPwd = self.editPwd.text() # 记录修改的用户密码
                if userPwd != "": # 判断密码不为空
                    # 执行修改操作
                    result=service.exec("update tb_user set userPwd= %s where userName=%s",(userPwd,self.select))
                    if result>0: # 如果结果大于0,说明修改成功
                        self.query() # 在表格中显示最新数据
                        QMessageBox.information(None, '提示', '信息修改成功!', QMessageBox.Ok)
        except:
            QMessageBox.warning(None, '警告', '请先选择要修改的数据!', QMessageBox.Ok)

    # 删除用户信息
    def delete(self):
        try:
            if self.select!="": # 判断是否选择了要删除的数据
                # 执行删除操作
                result=service.exec("delete from tb_user where userName= %s",(self.select,))
                if result>0: # 如果结果大于0,说明删除成功
                    self<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr.Waverly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值