学生信息成绩管理系统采用Python + qt5 来实现

本系统采用Python结合Qt5实现学生信息及成绩管理功能,包括登录、注册、基本信息管理及查询等模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学生信息成绩管理系统采用Python + qt5 来实现

快速获得整个项目的入口:https://download.youkuaiyun.com/download/nanxiang11/15179227
就可以获取整个项目资源

由于项目文件比较多所以我分了好几个包来完成这个项目如下图:
在这里插入图片描述
然后就是一些要安装的组件
在这里插入图片描述
其实就是数据库组件pymysql,和qt5相关的组件。其项目就是基于对数据库的操作和对于qt5 的应用。接下来我们就进入正题!
首先是连接数据库,我们创建了一个文件夹叫service的文件夹里面就放了一个文件,名称叫service.py该文件就是对于数据库的连接,查找,和修改一类的操作详细代码如下

# -*- coding: utf-8 -*-

import pymysql # 导入操作MySQL数据库的模块

userName="" # 记录用户名

# 打开数据库连接
def open():
    db = pymysql.connect(host="localhost", user="root", password="196811", database="db_student", charset="utf8")
    return db # 返回连接对象

# 执行数据库的增、删、改操作
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() # 关闭数据库连接

# 带参数的精确查询
def query(sql,*keys):
    db=open() # 连接数据库
    cursor = db.cursor() # 使用cursor()方法获取操作游标
    cursor.execute(sql,keys) # 执行查询SQL语句
    result = cursor.fetchall() # 记录查询结果
    cursor.close() # 关闭游标
    db.close() # 关闭数据库连接
    return result # 返回查询结果

# 不带参数的模糊查询
def query2(sql):
    db=open() # 连接数据库
    cursor = db.cursor() # 使用cursor()方法获取操作游标
    cursor.execute(sql) # 执行查询SQL语句
    result = cursor.fetchall() # 记录查询结果
    cursor.close() # 关闭游标
    db.close() # 关闭数据库连接
    return result # 返回查询结果

关于怎么操作请详细看关于pymysql的相关资料,文章中也有详细说明各个函数的用途。

接下来就是关于登入页面的实现和注册界面的实现了
我是直接有个login.py 和post.py两个来实现登入和注册功能
login.py详细代码如下

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QMainWindow
import sys  # 导入sys模块
import img_rc
from service import service
import main
import post
class Ui_MainWindow(QMainWindow):
    # 构造方法
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
        self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)  # 只显示最小化和关闭按钮
        self.setupUi(self)  # 初始化窗体设置
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)  # 只显示最小化和关闭按钮
        MainWindow.resize(467, 294)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(1, 0, 461, 151))
        self.label.setStyleSheet("border-image: url(:/png/img/login.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(40, 160, 61, 16))
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 160, 141, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(40, 200, 61, 16))
        self.label_3.setObjectName("label_3")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(100, 200, 141, 21))
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_2.setValidator(QtGui.QIntValidator(10000000, 99999999))
        # 输入密码后按回车键执行登录操作
        self.lineEdit_2.editingFinished.connect(self.openlog)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(300, 160, 93, 28))
        # 单击“登录”按钮执行登录操作
        self.pushButton.clicked.connect(self.openlog)
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 200, 93, 28))
        self.pushButton_2.clicked.connect(MainWindow.close) # 关闭登录窗体
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(300, 242, 93, 28))
        self.pushButton_3.clicked.connect(self.zc)  # 注册
        self.pushButton_3.setObjectName("pushButton_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 467, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "登入界面"))
        self.label_2.setText(_translate("MainWindow", "用户名:"))
        self.label_3.setText(_translate("MainWindow", "密  码:"))
        self.pushButton.setText(_translate("MainWindow", "登入"))
        self.pushButton_2.setText(_translate("MainWindow", "退出"))
        self.pushButton_3.setText(_translate("MainWindow", "注册"))

    def openlog(self):
        service.userName = self.lineEdit.text()  # 全局变量,记录用户名
        self.userPwd = self.lineEdit_2.text()  # 记录用户密码
        if service.userName != "" and self.userPwd != "":  # 判断用户名和密码不为空
            # 根据用户名和密码查询数据
            result = service.query("select * from login where name = %s and password = %s", service.userName,
                                   self.userPwd)
            if len(result) > 0:  # 如果查询结果大于0,说明存在该用户,可以登录

                self.w = main.Ui_MainWindow()  # 创建主窗体对象
                self.w.show()  # 显示主窗体

                MainWindow.hide()  # 隐藏当前的登录窗体
            else:
                self.lineEdit.setText("")  # 清空用户名文本
                self.lineEdit_2.setText("")  # 清空密码文本框
                QMessageBox.warning(None, '警告', '请输入正确的用户名和密码!', QMessageBox.Ok)
        else:
            QMessageBox.warning(None, '警告', '请输入用户名和密码!', QMessageBox.Ok)


    def zc(self):
        self.m = post.Ui_MainWindow()
        self.m.show()
        MainWindow.hide()  # 隐藏当前的登录窗体


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
    ui = Ui_MainWindow() # 创建PyQt5设计的窗体对象
    ui.setupUi(MainWindow) # 调用PyQt5窗体的方法对窗体对象进行初始化设置
    MainWindow.show() # 显示窗体
    sys.exit(app.exec_()) # 程序关闭时退出进程

post.py详细代码如下

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'post.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

import time
import img_rc
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
from service import service

import login

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

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(423, 485)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(110, 40, 61, 31))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(170, 40, 113, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(110, 100, 61, 31))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(170, 100, 113, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(110, 160, 61, 31))
        self.label_3.setObjectName("label_3")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setGeometry(QtCore.QRect(170, 160, 113, 21))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(110, 220, 61, 31))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(110, 280, 61, 31))
        self.label_5.setObjectName("label_5")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setGeometry(QtCore.QRect(170, 220, 113, 21))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setGeometry(QtCore.QRect(170, 280, 113, 21))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(60, 360, 93, 31))
        self.pushButton.clicked.connect(self.judge)  # 注册
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(280, 360, 93, 31))
        self.pushButton_2.clicked.connect(MainWindow.close) # 关闭登录窗体
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(170, 360, 93, 31))
        self.pushButton_3.clicked.connect(self.dl)  # 登入
        self.pushButton_3.setObjectName("pushButton_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 423, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "注册界面"))
        self.label.setText(_translate("MainWindow", "用户名:"))
        self.label_2.setText(_translate("MainWindow", "密  码:"))
        self.label_3.setText(_translate("MainWindow", "性  别:"))
        self.label_4.setText(_translate("MainWindow", "电  话:"))
        self.label_5.setText(_translate("MainWindow", "住  址:"))
        self.pushButton.setText(_translate("MainWindow", "注  册"))
        self.pushButton_2.setText(_translate("MainWindow", "关  闭"))
        self.pushButton_3.setText(_translate("MainWindow", "登  入"))


    def dl(self):  #打开登入窗口
        self.m = login.Ui_MainWindow()
        self.m.show()

    def getnNP(self, name, password):  # 获取数据库里面是否存在该用户
        result = service.query("select * from login where name = %s and password = %s", name, password)
        return len(result)


    def judge(self):
        postname = self.lineEdit.text()  # 记录名字
        postpassword = self.lineEdit_2.text()  # 记录密码
        postsex = self.lineEdit_3.text()  # 记录性别
        posttel = self.lineEdit_4.text()  # 记录电话
        postaddress = self.lineEdit_5.text()  # 记录密码
        if postname != "" and postpassword != "":
            if self.getnNP(postname, postpassword) > 0:
                self.lineEdit.setText("")
                self.lineEdit_2.setText("")
                QMessageBox.information(None, '提醒', '已经有该账户信息,请换过一个用户名', QMessageBox.Ok)
            else:
                result = service.exec("insert into login(name, password, sex, telephone, address) value (%s, %s, %s, %s, %s)"
                                      , (postname, postpassword, postsex, posttel, postaddress))
                time.sleep(1.0)  # 线程等待1秒钟
                if result > 0:
                    QMessageBox.information(None, '提醒', '注册成功!', QMessageBox.Ok)


        else:
            QMessageBox.warning(None, '警告', '必须在用户名和密码中填入数据', QMessageBox.Ok)



然后就是一个主页面窗口
main.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

import img_rc
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets

from baseinfo import student, result
from query import stuquery, resquery
from service import service
from setting import grade, classes, subject, exam


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

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setStyleSheet("border-image: url(:/png/img/2.png);")
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        self.menu_3 = QtWidgets.QMenu(self.menubar)
        self.menu_3.setObjectName("menu_3")
        self.menu_4 = QtWidgets.QMenu(self.menubar)
        self.menu_4.setObjectName("menu_4")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.action = QtWidgets.QAction(MainWindow)
        self.action.setObjectName("action")
        self.action_2 = QtWidgets.QAction(MainWindow)
        self.action_2.setObjectName("action_2")
        self.action_3 = QtWidgets.QAction(MainWindow)
        self.action_3.setObjectName("action_3")
        self.action_4 = QtWidgets.QAction(MainWindow)
        self.action_4.setObjectName("action_4")
        self.actionstudent = QtWidgets.QAction(MainWindow)
        self.actionstudent.setObjectName("actionstudent")
        self.actionresult = QtWidgets.QAction(MainWindow)
        self.actionresult.setObjectName("actionresult")
        self.actionstudentquery = QtWidgets.QAction(MainWindow)
        self.actionstudentquery.setObjectName("actionstudentquery")
        self.actionresultquery = QtWidgets.QAction(MainWindow)
        self.actionresultquery.setObjectName("actionresultquery")
        self.menu.addAction(self.action)
        self.menu.addAction(self.action_2)
        self.menu_2.addAction(self.actionstudent)
        self.menu_2.addAction(self.actionresult)
        self.menu_3.addAction(self.actionstudentquery)
        self.menu_3.addAction(self.actionresultquery)
        self.menu.addAction(self.action_3)
        self.menu.addAction(self.action_4)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())
        self.menubar.addAction(self.menu_3.menuAction())
        self.menubar.addAction(self.menu_4.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        gettime = QtCore.QDateTime.currentDateTime()
        time = gettime.toString("yyyy-MM-dd HH:mm:ss")
        self.statusbar.showMessage("当前登入的用户为:" + service.userName + "|登入时间为:" + time + "|星梦工作室|负责人:刘文豪")
        # 为基础设置菜单中的QAction绑定triggered信号
        self.menu.triggered[QtWidgets.QAction].connect(self.openmenu)
        self.menu_2.triggered[QtWidgets.QAction].connect(self.openBase)
        self.menu_3.triggered[QtWidgets.QAction].connect(self.openQuery)




    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "主界面"))
        self.menu.setTitle(_translate("MainWindow", "基础设置"))
        self.menu_2.setTitle(_translate("MainWindow", "基本信息管理"))
        self.menu_3.setTitle(_translate("MainWindow", "系统查询"))
        self.menu_4.setTitle(_translate("MainWindow", "系统管理"))
        self.action.setText(_translate("MainWindow", "年级设置"))
        self.action_2.setText(_translate("MainWindow", "班级设置"))
        self.action_3.setText(_translate("MainWindow", "考试科目设置"))
        self.action_4.setText(_translate("MainWindow", "考试类别"))
        self.actionstudent.setText(_translate("MainWindow", "学生管理"))
        self.actionresult.setText(_translate("MainWindow", "成绩管理"))
        self.actionstudentquery.setText(_translate("MainWindow", "学生信息查询"))
        self.actionresultquery.setText(_translate("MainWindow", "学生成绩查询"))




    def openmenu(self, m):
        if m.text()=="年级设置":
            self.m = grade.Ui_MainWindow()  # 创建年级设置窗体对象
            self.m.show()  # 显示窗体
        elif m.text()=="班级设置":
            self.m = classes.Ui_MainWindow()
            self.m.show()
        elif m.text()=="考试科目设置":
            self.m = subject.Ui_MainWindow()
            self.m.show()
        elif m.text()=="考试类别":
            self.m = exam.Ui_MainWindow()
            self.m.show()

    # 基本信息管理菜单对应槽函数
    def openBase(self, m):
        if m.text() == "学生管理":
            self.m = student.Ui_MainWindow()  # 创建学生管理窗体对象
            self.m.show()  # 显示窗体
        elif m.text() == "成绩管理":
            self.m = result.Ui_MainWindow()
            self.m.show()

# 系统查询菜单对应槽函数
    def openQuery(self,m):
        if  m.text()=="学生信息查询":
            self.m = resquery.Ui_MainWindow()  # 创建学生信息查询窗体对象
            self.m.show()  # 显示窗体
        elif  m.text()=="学生成绩查询":
            self.m = stuquery.Ui_MainWindow()  # 创建学生成绩查询窗体对象
            self.m.show()  # 显示窗体







文章中代码也有尽可能的详细下面是各个界面运行的图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的代码就是可以实现这些界面的功能。
另外还有其他界面的代码就不一一展示了由于实在是行数比较多我个人比较懒实在是难以一一写出来我这里展示一下数据库和一些运行截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码就不展示了哈,谅解谅解需要的可以去下载下面的是数据库结构
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值