这是一个基于Python Pyqt5实现的学生课程成绩管理系统。
C/S 模式
用户面向:学生和老师
主要功能模块有课程管理和成绩管理
课程管理模块:
学生可以进行本学期的课程查询,选课,退课,课程表查询,查询所修过的所有课程。
教师可以开设本学期课程或者撤销开设的课程
成绩管理模块:
学生查看学期成绩单
教师评定每门课程学生成绩
项目意义:学习数据库相关知识并进行实际项目生产。(为了完成俺们的数据库期末大作业的动手实践(逃))
项目实现: python3.7 + mysql
python相关包: Pyqt5, pymysql, numpy
项目有关的数据库:
基于(数据库原理)上课所学
1. 使用的六个基本数据表: 学生表,教师表,院系表,课程表,开课表,选课表.
2. 新创建的一个用户表。
数据表具体创建可参见 create.sql
| 组员 | 分工 |
|---|---|
| 张铭昊 | 后端接口实现 |
| 束建杰 | 数据库设计 |
| 郑昕晨 | 前后端结合式开发 |
| 叶晨新 | 前端界面-Course模块与运行测试 |
| 彭千容 | 前端界面-Score模块与运行测试 |
共分为两种身份,两种模块,身份有学生和教师,模块有课程管理和成绩管理
学生课程管理:
- 课程查询
- 选课
- 退课
- 课程表查询
- 所修课程查询
学生成绩管理:
- 学期成绩单查询
教师课程管理:
- 课程查询
- 已开课程查询
- 开设课程
- 撤销课程
教师成绩管理:
- 成绩查询
- 成绩录入
- 院系表 :保存学院信息(院系编号,院系名称)
- 学生表 :保存学生信息(学号,姓名,性别,年龄,院系编号)
- 教师表 :保存教师信息(工号,姓名,性别,年龄,院系编号)
- 课程表 :保存课程信息(课号,课程名称,学分)
- 开课表 :保存开课信息(学期,课号,工号,上课时间)
- 成绩表 :保存成绩信息(学号,学期,课号,工号,平时成绩,考试成绩,总评成绩)
- 用户表 :保存用户信息(用户名,密码)
以下是各关系模式的范式等级分析:
主键:${\text{yxh}}$
-
1NF:
- 所有列均为原子值,满足 1NF。
-
2NF:
- 主键
${\text{yxh}}$ ,其他属性$\text{mc}, \text{dz}, \text{lxdh}$ 完全依赖于主键,没有部分依赖,满足 2NF。
- 主键
-
3NF:
- 所有非主属性直接依赖主键,没有传递依赖,满足 3NF。
-
BCNF:
- 主键
${\text{yxh}}$ 是超键,满足 BCNF。
- 主键
主键:${\text{xh}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{xh}}$ ,所有非主属性直接依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性
$\text{yxh}$ 直接依赖主键${\text{xh}}$ ,无传递依赖,满足 3NF。
- 非主属性
-
BCNF:
- 唯一的函数依赖是
${\text{xh}} \to {\text{其他属性}}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
主键:${\text{gh}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{gh}}$ ,所有非主属性直接依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性
$\text{yxh}$ 直接依赖主键${\text{gh}}$ ,无传递依赖,满足 3NF。
- 非主属性
-
BCNF:
- 唯一的函数依赖是
${\text{gh}} \to {\text{其他属性}}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
主键:${\text{kh}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{kh}}$ ,所有非主属性直接依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性
$\text{yxh}$ 直接依赖主键${\text{kh}}$ ,无传递依赖,满足 3NF。
- 非主属性
-
BCNF:
- 唯一的函数依赖是
${\text{kh}} \to {\text{其他属性}}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
主键:${\text{xq}, \text{kh}, \text{gh}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{xq}, \text{kh}, \text{gh}}$ ,非主属性$\text{sksj}$ 完全依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性
$\text{sksj}$ 直接依赖主键,无传递依赖,满足 3NF。
- 非主属性
-
BCNF:
- 唯一的函数依赖是
${\text{xq}, \text{kh}, \text{gh}} \to \text{sksj}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
主键:${\text{xh}, \text{xq}, \text{kh}, \text{gh}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{xh}, \text{xq}, \text{kh}, \text{gh}}$ ,非主属性$\text{pscj}, \text{kscj}, \text{zpcj}$ 完全依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性直接依赖主键,无传递依赖,满足 3NF。
-
BCNF:
- 唯一的函数依赖是
${\text{xh}, \text{xq}, \text{kh}, \text{gh}} \to {\text{pscj}, \text{kscj}, \text{zpcj}}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
主键:${\text{usr}}$
-
1NF:
- 列值为原子值,满足 1NF。
-
2NF:
- 主键
${\text{usr}}$ ,非主属性$\text{pwd}$ 完全依赖主键,无部分依赖,满足 2NF。
- 主键
-
3NF:
- 非主属性
$\text{pwd}$ 直接依赖主键,无传递依赖,满足 3NF。
- 非主属性
-
BCNF:
- 唯一的函数依赖是
${\text{usr}} \to {\text{pwd}}$ ,主键是超键,满足 BCNF。
- 唯一的函数依赖是
| 关系模式 | 主键 | 范式等级 |
|---|---|---|
| 院系表 |
BCNF | |
| 学生表 |
BCNF | |
| 教师表 |
BCNF | |
| 课程表 |
BCNF | |
| 开课表 |
BCNF | |
| 成绩表 |
BCNF | |
| 账户表 |
BCNF |
--APP(程序运行主目录)
main.py(从此文件运行整个项目运行)
login.py
register.py
--BACK(后台数据库接口实现)
util.py
course.py
score.py
--Course(课程管理模块)
Student
Teacher
--Score(成绩管理模块)
Student
Teacher
--image(程序图标存放)
- 当老师本学期未开任何课时,成绩查询按钮单击会导致程序崩溃(已修复)
- 当老师开不存在的课程时,成绩查询按钮单击会导致程序崩溃(已修复)
- 确保你安装了上“项目环境”中的python包
- 确保你安装了mysql 8.x 以上版本(可参考此链接教程安装:mysql安装教程)
- 在mysql中运行文件create.sql创建对应数据库和数据表
- 修改util.py中的数据库连接信息为你自己的mysql信息
mysql_info = {
'host': 'localhost', # 数据库地址
'user': 'root', # 数据库用户身份
'password': '123456', # 数据库用户对应的密码密码
'db': 'school', # 数据库的名字
'charset': 'utf8', # 数据库编码方式
'autocommit': True}
db = Database(mysql_info)- 运行main.py即可






