Compare commits

...

10 Commits
master ... sqls

@ -0,0 +1,93 @@
"""
代码功能添加用户界面设计与功能实现
"""
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from ComboCheckBox import QComboCheckBox
from db import sql_execute
from sqls import *
class AddAdmin(object):
# 界面设计
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(360, 279)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(40, 40, 54, 12))
self.label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.textEdit = QtWidgets.QLineEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(100, 30, 181, 31))
self.textEdit.setObjectName("textEdit")
self.label0 = QtWidgets.QLabel(Form)
self.label0.setGeometry(QtCore.QRect(40, 90, 54, 12))
self.label0.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label0.setObjectName("label")
self.textEdit0 = QtWidgets.QLineEdit(Form)
self.textEdit0.setGeometry(QtCore.QRect(100, 80, 181, 31))
self.textEdit0.setObjectName("textEdit")
self.textEdit_2 = QtWidgets.QLineEdit(Form)
self.textEdit_2.setGeometry(QtCore.QRect(100, 130, 181, 31))
self.textEdit_2.setObjectName("textEdit_2")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(40, 140, 54, 12))
self.label_2.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
classlist = sql_execute(getClassList('0', ''))
self.textEdit_3 = QComboCheckBox(Form)
for class_ in classlist:
self.textEdit_3.add_item('%d.%s' % (class_[0], class_[1]), flag=False)
self.textEdit_3.setGeometry(QtCore.QRect(100, 180, 181, 31))
self.textEdit_3.setObjectName("textEdit_3")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(23, 190, 71, 20))
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(110, 240, 75, 23))
self.pushButton.setObjectName("pushButton")
# 提交按钮
self.pushButton.clicked.connect(lambda: self.addAdmin(Form))
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(190, 240, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
# 取消按钮
self.pushButton_2.clicked.connect(lambda: Form.hide())
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "新增角色"))
self.label.setText(_translate("Form", "用户名:"))
self.label0.setText(_translate("Form", "密码:"))
self.label_2.setText(_translate("Form", "备注:"))
self.label_3.setText(_translate("Form", "可管理班级:"))
self.pushButton.setText(_translate("Form", "提交"))
self.pushButton_2.setText(_translate("Form", "取消"))
# 功能实现
def addAdmin(self, Form):
username = self.textEdit.text()
password = self.textEdit0.text()
mark = self.textEdit_2.text()
classids = self.textEdit_3.get_class_text()
sql_execute(insertAdmin(username, password, mark, classids))
QMessageBox.about(Form, '成功', "添加成功!请刷新列表数据。")
Form.hide()
# 测试
if __name__ == "__main__":
App = QApplication(sys.argv) # 创建QApplication对象作为GUI主程序入口
aw = AddAdmin() # 创建主窗体对象实例化Ui_MainWindow
w = QMainWindow() # 实例化QMainWindow类
aw.setupUi(w) # 主窗体对象调用setupUi方法对QMainWindow对象进行设置
w.show() # 显示主窗体
w.setWindowTitle('Python学生管理系统-新增用户')
sys.exit(App.exec_()) # 循环中等待退出程序

@ -0,0 +1,125 @@
from PyQt5.QtWidgets import QWidget, QComboBox, QLineEdit, QListView
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QMouseEvent
from PyQt5.Qt import Qt
global classIds
classIds = ''
# 全选与单选的绑定(没有这个会导致勾选数据错乱)
def show_text(function):
def wrapped(self, *args, **kwargs):
global classIds
if self.vars["showTextLock"]:
self.vars["showTextLock"] = False
result = function(self, *args, **kwargs)
items = self.get_selected()
l = len(items)
l_ = self.vars["listViewModel"].rowCount() - 1
self.vars["listViewModel"].item(0).setCheckState(
Qt.Checked if l == l_ else Qt.Unchecked if l == 0 else Qt.PartiallyChecked)
self.vars["lineEdit"].setText(
"(全选)" if l == l_ else "(无选择)" if l == 0 else ";".join((item.text() for item in items)))
self.vars["showTextLock"] = True
classIds = "" if l == 0 else ",".join((item.text().split('.')[0] for item in items))
else:
result = function(self, *args, **kwargs)
return result
return wrapped
# 选项的渲染和选择后的显示
class QComboCheckBox(QComboBox):
class MyListView(QListView):
def __init__(self, parent: QWidget = None, vars=None):
super().__init__(parent)
self.vars = vars
def mousePressEvent(self, event: QMouseEvent):
self.vars["lock"] = False
super().mousePressEvent(event)
def mouseDoubleClickEvent(self, event: QMouseEvent):
self.vars["lock"] = False
super().mouseDoubleClickEvent(event)
def __init__(self, parent: QWidget = None):
super().__init__(parent)
self.vars = dict()
self.vars["lock"] = True
self.vars["showTextLock"] = True
# 装饰器锁避免批量操作时重复改变lineEdit的显示
self.vars["lineEdit"] = QLineEdit(self)
self.vars["lineEdit"].setReadOnly(True)
self.vars["listView"] = self.MyListView(self, self.vars)
self.vars["listViewModel"] = QStandardItemModel(self)
self.setModel(self.vars["listViewModel"])
self.setView(self.vars["listView"])
self.setLineEdit(self.vars["lineEdit"])
self.activated.connect(self.__show_selected)
self.add_item("(全选)")
@show_text
def add_item(self, text: "str", flag=False):
# 根据文本添加子项
item = QStandardItem()
item.setText(text)
item.setCheckable(True)
if flag:
item.setCheckState(Qt.Checked)
self.vars["listViewModel"].appendRow(item)
# 根据文本查找子项
def find_text(self, text: "str"):
tempList = self.vars["listViewModel"].findItems(text)
tempList.pop(0) if tempList and tempList[0].row() == 0 else tempList
return tempList
# 获取班级ids
def get_class_text(self):
return classIds
@show_text # 全选
def select_all(self):
for row in range(0, self.vars["listViewModel"].rowCount()):
self.vars["listViewModel"].item(row).setCheckState(Qt.Checked)
@show_text # 全不选
def select_clear(self):
for row in range(0, self.vars["listViewModel"].rowCount()):
self.vars["listViewModel"].item(row).setCheckState(Qt.Unchecked)
# 获取当前选择的子项
def get_selected(self):
items = list()
for row in range(1, self.vars["listViewModel"].rowCount()):
item = self.vars["listViewModel"].item(row)
if item.checkState() == Qt.Checked:
items.append(item)
return items
@show_text # 显示选中的选项
def __show_selected(self, index):
# 未被选中
if not self.vars["lock"]:
# 选中全选
if index == 0:
if self.vars["listViewModel"].item(0).checkState() == Qt.Checked:
self.select_clear()
else:
self.select_all()
# 选中其他
else:
self.__select_reverse(index)
self.vars["lock"] = True
# 选中一个选项
def __select_reverse(self, row: "int"):
item = self.vars["listViewModel"].item(row)
item.setCheckState(Qt.Unchecked if item.checkState() == Qt.Checked else Qt.Checked)

@ -0,0 +1,24 @@
"""
项目名称python pyqt5 mysql 学生管理系统
作者bhml
时间2022/11/28
代码功能存放系统中需要多次使用的全局变量
"""
USER = (1, 'admin', '0', '0', '0')
# 管理模块标识
FLAG_STUDENT = 1 # 学生管理
FLAG_CLASS = 2 # 班级管理
FLAG_ADMIN = 3 # 角色管理
FLAG_GRADE = 4 # 成绩管理
FLAG_INFO = 5 # 修改资料
# 登录窗口
LOGIN_WINDOW = None
# 数据库配置
DB_HOST = 'localhost'
DB_USER = 'root'
DB_PASSWORD = '123456'
DB_NAME = 'db_studentms'

@ -0,0 +1,122 @@
"""
代码功能修改用户界面设计与功能实现
"""
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QInputDialog, QLineEdit
from ComboCheckBox import QComboCheckBox
from db import sql_execute
from sqls import *
class EditAdmin(object):
# 界面设计
def setupUi(self, Form, adminId):
Form.setObjectName("Form")
Form.resize(360, 279)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(40, 40, 54, 12))
self.label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
admin = sql_execute(getAdminById(adminId))[0]
self.textEdit = QtWidgets.QLineEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(100, 30, 181, 31))
self.textEdit.setText(admin[1])
self.textEdit.setObjectName("textEdit")
self.textEdit_2 = QtWidgets.QLineEdit(Form)
self.textEdit_2.setGeometry(QtCore.QRect(100, 80, 181, 31))
self.textEdit_2.setText(admin[3])
self.textEdit_2.setObjectName("textEdit_2")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(40, 90, 54, 12))
self.label_2.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.textEdit_3 = QComboCheckBox(Form)
class_dict = []
try:
# 不为超级管理员
if admin[4] != '0':
data4 = admin[4].split(',')
for d in data4:
class_dict.append(d)
except Exception as e:
pass
# 获取班级列表(供老师选择来管理)
classlist = sql_execute(getClassList('0', ''))
for class_ in classlist:
self.textEdit_3.add_item('%d.%s' % (class_[0], class_[1]),
flag=admin[4] == '0' or str(class_[0]) in class_dict)
self.textEdit_3.setGeometry(QtCore.QRect(100, 130, 181, 31))
self.textEdit_3.setObjectName("textEdit_3")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(23, 140, 71, 20))
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(150, 220, 75, 23))
self.pushButton.setObjectName("pushButton")
# 提交按钮
self.pushButton.clicked.connect(lambda: self.updateAdmin(adminId, Form))
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(230, 220, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
# 取消按钮
self.pushButton_2.clicked.connect(lambda: Form.hide())
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(10, 220, 75, 23))
self.pushButton_3.setObjectName("pushButton_3")
# 重置密码按钮
self.pushButton_3.clicked.connect(lambda: self.resetPassw(adminId, Form))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
# 重新翻译(针对性修改)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "编辑角色"))
self.label.setText(_translate("Form", "用户名:"))
self.label_2.setText(_translate("Form", "备注:"))
self.label_3.setText(_translate("Form", "可管理班级:"))
self.pushButton.setText(_translate("Form", "提交"))
self.pushButton_2.setText(_translate("Form", "取消"))
self.pushButton_3.setText(_translate("Form", "重置密码"))
# 功能实现(修改用户名)
def updateAdmin(self, adminId, Form):
username = self.textEdit.text()
mark = self.textEdit_2.text()
classids = self.textEdit_3.get_class_text()
sql_execute(updateAdminById(adminId, username, mark, classids))
QMessageBox.about(Form, '成功', "编辑成功!请刷新列表数据。")
Form.hide()
# 功能实现(重置密码)
def resetPassw(self, adminId, Form):
text, okPressed = QInputDialog.getText(Form, "重置密码", "新密码:", QLineEdit.Normal, '')
if okPressed:
try:
sql_execute(resetAdminPasswById(adminId, text))
QMessageBox.about(Form, '成功', '重置密码成功!')
except Exception as e:
QMessageBox.critical(Form, '失败', '重置密码失败:\n')
Form.hide()
# 测试
if __name__ == "__main__":
import sys
App = QApplication(sys.argv) # 创建QApplication对象作为GUI主程序入口
aw = EditAdmin() # 创建主窗体对象实例化Ui_MainWindow
w = QMainWindow() # 实例化QMainWindow类
aw.setupUi(w, 1) # 主窗体对象调用setupUi方法对QMainWindow对象进行设置
w.show() # 显示主窗体
w.setWindowTitle('Python学生管理系统-修改用户')
sys.exit(App.exec_()) # 循环中等待退出程序

@ -1,2 +1,24 @@
# sparkalights
该学生信息管理系统的功能是收集学生的个人信息,以便向老师提供每个学生在校或毕业生学籍的情况,还可以让学生用自己的学号,密码去登录查看自己的在校期表现。学生信息管理系统的主要功能有:
1.管理员登录、修改信息
2.学生管理:对学生信息增 删 改 查(支持批量导入导出)
3.成绩管理:成绩录入(支持批量导入导出)、查询/修改、统计
4.班级管理:对班级信息增删改查(支持批量导入导出)
5.管理员管理(超管)不同院系的各学生成绩的录入管理
学生信息管理系统主要是提供学生管理:包括编辑(姓名,性别,生日,年龄,入学日期,所在院系班级等)用户登录(两种权限,一种是管理员可以做任何想要的操作,一种是学生只可以查看自己的信息,不能编辑,也不能查看其他用户信息)。
本项目是基于python+PyQt5+MySQL开发的
项目结构:
- data 存放导入导出的数据的文件夹
- image 存放背景图片的文件夹
- AddAdmin.py 添加用户的界面的设计代码
- ComboCheckBox.py 添加或者修改用户信息的时候的选择框工具代码
- Config.py 配置文件存放项目常量参数
- db.py 数据库链接代码
- EditAdmin.py 修改用户的界面的设计代码
- login.py 项目的入口(登录界面和功能的实现)
- mian.py 程序主界面设计与功能实现代码
- sqls.py 存放操作数据库的sql语句代码

45
db.py

@ -0,0 +1,45 @@
"""
代码功能数据库链接与交互
"""
import pymysql
import hashlib
import Config as C
global conn
conn = None
# 01获取数据库连接
def conn_mysql():
conn = None
try:
conn = pymysql.connect(host=C.DB_HOST, port=3306, user=C.DB_USER, password=C.DB_PASSWORD, db=C.DB_NAME,
charset='utf8')
except Exception as e:
print(e)
return conn
# 02根据SQL语句操作数据库
def sql_execute(sql):
global conn
if conn is None:
conn = conn_mysql()
cur = conn.cursor()
cur.execute(sql)
result = cur.fetchall()
cur.close()
return result
# 03获取MD5加密结果
def md5(text):
text = bytes(text, encoding='utf-8')
return hashlib.md5(text).hexdigest()
if __name__ == "__main__":
str_md5 = md5("123456")
print('MD5加密后为 ' + str_md5)

@ -0,0 +1,81 @@
/*
Navicat MySQL Data Transfer
Source Server : mysql57
Source Server Type : MySQL
Source Server Version : 50709
Source Host : localhost:3306
Source Schema : db_studentms
Target Server Type : MySQL
Target Server Version : 50709
File Encoding : 65001
Date: 03/02/2023 00:46:44
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`a_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '1.超级管理员 其他.班级管理员',
`a_username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户名',
`a_password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '密码 长度6-18 (MD5加密)',
`a_mark` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注',
`a_classid` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '可管理班级id多个班级id可用,隔开',
PRIMARY KEY (`a_id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '管理员表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of admin
-- ----------------------------
INSERT INTO `admin` VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', '超级管理员', '0');
INSERT INTO `admin` VALUES (2, 'bhml', 'e10adc3949ba59abbe56e057f20f883e', '兵慌码乱', '1');
INSERT INTO `admin` VALUES (3, 'lyt', 'e10adc3949ba59abbe56e057f20f883e', '李有田', '2');
INSERT INTO `admin` VALUES (4, 'james', 'e10adc3949ba59abbe56e057f20f883e', '詹姆斯', '1,2');
-- ----------------------------
-- Table structure for class_
-- ----------------------------
DROP TABLE IF EXISTS `class_`;
CREATE TABLE `class_` (
`c_id` int(11) NOT NULL AUTO_INCREMENT,
`c_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '班级名称',
PRIMARY KEY (`c_id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '班级表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of class_
-- ----------------------------
INSERT INTO `class_` VALUES (1, '软件工程1班');
INSERT INTO `class_` VALUES (2, '网络工程1班');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`s_id` int(11) NOT NULL AUTO_INCREMENT,
`s_realname` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '姓名',
`s_number` int(11) NULL DEFAULT NULL COMMENT '学号',
`s_sex` int(11) NOT NULL DEFAULT 0 COMMENT '性别 1.男2.女',
`s_class` int(11) NOT NULL DEFAULT 0 COMMENT '所属班级id',
`s_chinese` int(11) NOT NULL DEFAULT 0 COMMENT '语文成绩',
`s_math` int(11) NOT NULL DEFAULT 0 COMMENT '数学成绩',
`s_english` int(11) NOT NULL DEFAULT 0 COMMENT '外语成绩',
PRIMARY KEY (`s_id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 529 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '学生信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (4, 'kobe', 1004, 1, 2, 0, 0, 0);
INSERT INTO `student` VALUES (3, '高启兰', 1003, 2, 1, 0, 0, 0);
INSERT INTO `student` VALUES (2, '安欣', 1002, 1, 2, 0, 0, 0);
INSERT INTO `student` VALUES (1, '高启强', 1001, 1, 1, 99, 99, 60);
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,155 @@
"""
代码功能登录界面与功能实现
"""
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from main import MainUi
from sqls import *
from db import *
import Config as C
# 界面与登录功能的设计与实现
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 400)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 30, 350, 60))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setMinimumSize(QtCore.QSize(50, 50))
self.label.setBaseSize(QtCore.QSize(50, 50))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(27)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.label.setFont(font)
self.label.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label.setAutoFillBackground(False)
self.label.setMidLineWidth(0)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setWordWrap(False)
self.label.setIndent(0)
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(140, 140, 181, 31))
font = QtGui.QFont("Microsoft YaHei")
font.setPointSize(11)
self.lineEdit.setFont(font)
self.lineEdit.setInputMask("")
self.lineEdit.setText("")
self.lineEdit.setObjectName("lineEdit")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(40, 140, 91, 31))
font = QtGui.QFont("Microsoft YaHei")
font.setPointSize(11)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(40, 190, 91, 31))
font = QtGui.QFont("Microsoft YaHei")
font.setPointSize(11)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(140, 190, 181, 31))
font = QtGui.QFont("Microsoft YaHei")
font.setPointSize(11)
self.lineEdit_2.setFont(font)
self.lineEdit_2.setInputMask("")
self.lineEdit_2.setText("")
self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
self.lineEdit_2.setObjectName("lineEdit_2")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(120, 280, 160, 40))
font = QtGui.QFont("Microsoft YaHei")
font.setPointSize(16)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
font = QtGui.QFont("Microsoft YaHei")
font.setItalic(False)
font.setPointSize(14)
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(80, 240, 250, 20))
self.label_6.setObjectName("label_6")
self.label_6.setFont(font)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 23))
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)
self.centralwidget.setStyleSheet('''
QLabel#label_6{
color:red;
}
#pushButton{background-color:#2c7adf;color:#fff;border:none;border-radius:4px;}
#pushButton:hover{background-color:#2c8adf;}
''')
self.pushButton.clicked.connect(lambda: self.btn_clicked(MainWindow))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Python学生管理系统-管理员登录"))
self.label.setText(_translate("MainWindow", "Python学生管理系统"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "请输入用户名"))
self.label_2.setText(_translate("MainWindow", "用户名:"))
self.label_3.setText(_translate("MainWindow", "密码:"))
self.lineEdit_2.setPlaceholderText(_translate("MainWindow", "请输入密码"))
self.pushButton.setText(_translate("MainWindow", "登录"))
# 管理员登录
def btn_clicked(self, MainWindow):
self.label_6.setText("正在登录...")
self.pushButton.setDisabled(True)
QApplication.processEvents()
username = self.lineEdit.text()
password = self.lineEdit_2.text()
result = sql_execute(login(username, password))
if len(result) == 0:
self.label_6.setText("登录失败:用户名或密码错误")
self.pushButton.setDisabled(False)
print(username + "登录失败!")
else:
print(username + "登录成功!")
self.label_6.setText("登录成功!")
print(result[0])
C.USER = result[0]
self.main = MainUi()
self.main.show()
C.LOGIN_WINDOW = aw
MainWindow.hide()
self.main.setWindowTitle('Python学生管理系统')
if __name__ == "__main__":
App = QApplication(sys.argv) # 创建QApplication对象作为GUI主程序入口
aw = Ui_MainWindow() # 创建主窗体对象实例化Ui_MainWindow
w = QMainWindow() # 实例化QMainWindow类
aw.setupUi(w) # 主窗体对象调用setupUi方法对QMainWindow对象进行设置
w.show() # 显示主窗体
w.setWindowTitle('Python学生管理系统-管理员登录')
sys.exit(App.exec_()) # 循环中等待退出程序

1677
main.py

File diff suppressed because it is too large Load Diff

@ -0,0 +1,191 @@
"""
代码功能集中存放项目中用到的SQL语句
"""
from db import md5
# 01登录
def login(username, password):
password = md5(password)
return "select * from admin where a_username='%s' and a_password='%s'" % (username, password)
# 02根据id查询班级列表
def getClassList(idStr, name=""):
"""
:param idStr: id多个用','分隔0表示获取所有数据
:return:
"""
sql = "select * from class_ where c_name like '%" + name + "%'"
if idStr == "0":
pass
else:
sql += " and c_id in (" + idStr + ")"
return sql
# 03获取学生信息
def getStudentById(id):
"""
:param id: s_id 学生id
:return:
"""
sql = "select * from student where s_id=" + str(id)
return sql
# 04查询一个班的学生信息
def getStudentByClassId(id):
"""
:param id: 班级id
:return:
"""
sql = "select * from student where s_class=" + str(id)
return sql
# 05查询学生信息通过班级姓名
def getStudentList(classids, name):
"""
:param classids: 学生所在班级id多个用逗号间隔0表示获取所有数据
:return:
"""
sql = "select * from student where s_realname like '%" + name + "%'"
if classids == "0":
pass
else:
sql += " and s_class in (" + classids + ")"
sql += " order by s_number"
return sql
# 06获取学生成绩列表通过总分排序
def getGradeList(classids, name):
"""
:param classids: 学生所在班级id多个用逗号间隔0表示获取所有数据
:return:
"""
sql = "select * from student where s_realname like '%" + name + "%'"
if classids == "0":
pass
else:
sql += " and s_class in (" + classids + ")"
sql += " order by s_chinese + s_math + s_english DESC"
return sql
# 07获取管理员列表
def getAdminList(name):
"""
:param name: 用户名
:return:
"""
sql = "select * from admin where a_username like '%" + name + "%'"
sql += " order by a_id"
return sql
# 08获取管理员信息
def getAdminById(id):
"""
:param id: 管理员id
:return:
"""
sql = "select * from admin where a_id=" + str(id)
return sql
# 09通过学生id删除学生信息
def delStudentById(id):
sql = "delete from student where s_id=" + str(id)
return sql
# 10通过班级id删除班级信息
def delClassById(id):
sql = "delete from class_ where c_id = " + str(id)
return sql
# 11通过id删除用户信息
def delAdminById(id):
sql = "delete from admin where a_id = " + str(id)
return sql
# 12通过id删除批量学生信息
def delStudentByIds(ids):
sql = "delete from student where s_id in " + ids
return sql
# 13更新学生信息
def updateStudentById(id, name, number, sex, class_):
sql = "update student set s_realname='%s',s_number=%s,s_sex=%s,s_class=%s where s_id=" % (
name, number, sex, class_) + str(id)
return sql
# 14更新学生成绩信息通过id
def updateGradeById(id, chinese, math, english):
sql = "update student set s_chinese=%s,s_math=%s,s_english=%s where s_id=" % (chinese, math, english) + str(id)
return sql
# 15更新学生成绩信息通过学号
def updateGradeByNum(num, chinese, math, english):
sql = "update student set s_chinese=%s,s_math=%s,s_english=%s where s_number=" % (chinese, math, english) + str(num)
return sql
# 16更新班级信息通过id
def updateClassById(id, name):
sql = "update class_ set c_name='%s' where c_id=" % name + str(id)
return sql
# 17更新用户信息通过id
def updateAdminById(id, username, mark, classids):
sql = "update admin set a_username='%s',a_mark='%s',a_classid='%s' where a_id=" \
% (username, mark, classids) + str(id)
return sql
# 18更新用户名通过id
def updateUsernameById(id, username):
sql = "update admin set a_username='%s' where a_id=" % username + str(id)
return sql
# 19重置用户密码通过id
def resetAdminPasswById(id, password):
password = md5(password)
sql = "update admin set a_password='%s' where a_id=" % password + str(id)
return sql
# 20添加学生信息
def insertStudent(name, number, sex, class_):
sql = "insert into student (s_realname,s_number,s_sex,s_class) VALUES ('%s',%s,%s,%s)" % (
name, str(number), sex, str(class_))
return sql
# 21添加班级信息
def insertClass(name):
sql = "insert into class_ (c_name) VALUES ('%s')" % name
return sql
# 22添加用户信息
def insertAdmin(username, password, mark, classids):
password = md5(password)
sql = "insert into admin (a_username,a_password,a_mark,a_classid) VALUES " \
"('%s','%s','%s','%s')" % (username, password, mark, classids)
return sql
# 测试
if __name__ == "__main__":
print(getClassList("1,2,3"))
Loading…
Cancel
Save