基于Python+MySQL实现(Web)学生成绩管理系统【100010288】

项目介绍

  • 本项目是本人在大学期间的数据库课程设计,为学生成绩管理系统
  • 由于当时时间紧张,只有一周多点的时间,实现的功能较为简单
  • 整体架构
    • 后端采用 python+flask+mysql 的方式,未做服务器部署,可以在单机上测试运行
    • 前端则借鉴了网上找到的前端页面模板,在此基础上修改,主要技术是 html+css+js
    • 前后端分离开发,见 http 接口设计.docx,使用 postman 等工具进行接口测试

目录结构

app/ 项目源代码
|--- models/ 后端模型层,用于读写数据库
|--- validate/ 后端验证层,用于验证http请求的参数合法性
|--- web/ 后端控制器层,用于处理http请求
|--- __init__.py 入口函数
|--- static/ 前端静态文件目录
    |--- js/ 前端javascript文件
    |--- *.html 前端html页面文件
sql/ 建库脚本及说明、测试数据脚本
http接口设计.docx
前端页面模板/ 

项目环境配置

  • 下载安装 MySQL 8
    • 执行 sql/建库脚本-无注释.sql
    • 执行 sql/系统测试数据.sql
  • 下载安装 python 3.7.3
  • IDE: pycharm community
  • 依赖第三方库(使用 pipenv 等工具安装)
    • flask
    • wtforms
    • pymysql
    • flask-login

核心要求

总体要求

  • 基于 Web 的数据库应用系统
  • E-R 图设计概念模式、导出逻辑模式
  • 设计应用系统的系统结构图,确定系统功能
  • 创建数据库和表,输入初始数据,要求每个表的记录数不得少于 18 条
  • 不需要连接远程数据库,直接在一个机器上即可
  • 分工可以按照学生模块、教师模块、管理员模块、前台界面、数据库设计
  • 学院的网站上找老师的信息
  • 学生信息输自己班的就行
  • 数据库表可以在 PPT 的基础上扩展
  • 可以在 PPT 的基础上增加功能,功能越完善,分数越高
  • 界面做漂亮一些

角色需求描述

  • 系统交互
    • 登录
      • 无需注册功能
      • 管理员以 admin 作为用户名,密码为固定值,不可修改
      • 教师以教师编号为用户名,密码默认为教师编号,可修改
      • 学生以学生编号为用户名,密码默认为学生编号,可修改
    • 修改密码
  • 学生
    • 查询
      • 学生基本信息
      • 该学生所选的各门课的成绩
  • 教师
    • 查询
      • 教师基本信息
      • 所授课程基本信息
      • 学生选课信息
      • 所授课程所有学生的成绩
      • 所授课程所有学生的成绩的统计结果
      • 统计各分数段学生的成绩分布, 画出直方图和饼图。
    • 录入
      • 学生所选课程成绩
    • 修改
      • 学生所选课程成绩
    • 删除
      • 学生所选课程成绩
  • 管理员
    • 查询
      • 学生基本信息
      • 教师基本信息
      • 课程基本信息
    • 录入
      • 学生基本信息
      • 教师基本信息
      • 课程基本信息
      • 专业选课信息
    • 修改
      • 学生基本信息
      • 教师基本信息
      • 课程基本信息
    • 删除
      • 学生基本信息
      • 教师基本信息
      • 课程基本信息
      • 专业选课信息

部分需求详述

  • 学生基本信息
    • 包括学号、姓名、性别、出生年份、籍贯、已修学分、已选课程数量、加权平均学分等;其中已修学分为所有通过的课程的学分和,60 分及以上即为通过;加权平均学分根据每门课的学分进行加权。
  • 教师基本信息
    • 包括教师编号、姓名、性别、出生年份、所授课程数量等。
  • 课程基本信息
    • 包括课程编号、课程名称、开设年份、开设学期、授课教师编号、学分、选课学生数量、平均成绩等;其中平均成绩是所有学生的成绩的算术平均值。
  • 专业基本信息
    • 包括专业编号、专业名称等。
  • 专业选课功能说明
    • 本系统为学生成绩管理系统,核心功能为学生成绩的管理,但是同时该系统依托于学生选课系统。
    • 我们由此添加了简单的选课功能,遵循小次数大批量的原则,以专业为单位进行选课,若添加了一条专业选课的记录,则该专业的所有学生都将选修该门课程。

编号规则

  • 学院编号:2 位
  • 专业编号:
    • 学院编号:2 位
    • 学院内专业编号:2 位
    • 共:4 位
  • 班级编号:
    • 入学年份:4 位
    • 专业编号:4 位
    • 专业内班级编号:2 位
    • 共:10 位
  • 学生编号:
    • 班级编号:10 位
    • 班级内序号:2 位
    • 共:12 位
  • 教师编号:
    • 学院编号:2 位
    • 学院内编号:3 位
    • 共:5 位
  • 课程编号:5 位
  • 所有数据库表的 id 都是用 char 存的,有一些 id 设置为了已有的最大值 +1,所以在插入数据时,需要查出数据库表中已有的 id,转化为整数,取最大值 +1,转化为字符串,作为新的 id

数据库说明

数据库为: MySQL

  • 数据库用户名为: root,可在__init__.py 中修改
  • 数据库密码为: asdfg13579,可在__init__.py 中修改

其它配置说明

  • 端口: 6060,可在__init__.py 中修改
  • 访问地址为 http://localhost:6060
    • 不能用 127.0.0.1,因为前端页面里面的超链接是固定的 localhost,否则会引起跨域问题
  • 管理员用户名为 admin,密码为 asdfg13579
  • 学生和教师的初始密码均为其编号

数据流图

基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第1张图片

ER 图-关系模式

基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第2张图片

关系模式见 sql/建库脚本

完整性约束分析

实体完整性约束

  • 所有的主键均不能为空,所有定义为 not null 的属性也不能为空。

参照完整性约束

  • 学生表:学生表的 major_id 参照专业表的 major_id;
    若删除某个专业,则级联删除对应学生;
    插入学生前,其所属专业必须已被创建;
    这样的约束应由外键实现;
  • 课程表:课程表的 teacher_id 参照教师表的 teacher_id;
    若删除某个教师,则级联删除对应课程;
    插入课程前,其授课教师必须已被创建;
    这样的约束应由外键实现;
  • 专业选课表专业选课表的 major_id 参照专业表的 major_id,专业选课表的 course_id 参照课程表的 course_id;
    若删除某个专业,则级联删除对应的专业选课信息;
    若删除某个课程,则级联删除对应的专业选课信息;
    插入专业选课信息之前,其对应的专业和课程必须已被创建;
    这样的约束应由外键实现;

自定义完整性约束

字段 约束
major_id 3 位数字,新添加的专业编号自动生成为已有专业编号最大值 +1
student_id 10 位数字,自动生成,新添加的学生编号由 4 位入学年份、3 位专业编号和 3 位当年专业内已有学生编号最大值 +1 组成
course_id 5 位数字,新添加的课程编号自动生成为已有课程编号最大值 +1
teacher_id 5 位数字,新添加的教师编号自动生成为已有教师编号最大值 +1
major_name unique,不同专业的名称不能相同
sex 取值为“男”或“女”
semester 取值为“春”或“秋”
所有的年份 4 位数字
姓名、名称等 不超过 20 位的字符串
province 不超过 20 位的字符串
grade 0~100 之间的整数
credit 1~10 之间的整数

学生选课表与触发器

学生选课信息其实可以通过学生表、专业选课表查询得到,但由于需要存储成绩,所以新增了一张学生选课成绩表;

当专业选课表中新增一条记录时,则该专业的学生都要生成对应的选课记录;当专业选课表中删除一条记录时,则该专业的学生都要删除对应的选课记录;能直接操作该表的,只有教师修改成绩的操作;这样的约束,应由触发器实现,触发器定义见建库脚本。

当学生表增加一条记录时,则根据该学生的专业,自动添加学生选课记录;当学生表删除一条记录时,则根据该学生的专业,自动删除学生选课记录;这样的约束也应由触发器实现,触发器语句见建库脚本。

由于定义了触发器,学生选课表也就不再需要设置任何的外键了。

效果展示

登录界面

  • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第3张图片

学生界面

  • 个人信息
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第4张图片
  • 成绩
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第5张图片
  • 修改密码
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第6张图片

教师界面

  • 个人信息
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第7张图片
  • 课程列表
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第8张图片
  • 课程详情(学生名单及成绩)
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第9张图片
  • 课程成绩统计
    • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第10张图片
  • 修改密码:同学生

管理员界面

  • 学生信息
    • 列表
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第11张图片
    • 详情/修改
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第12张图片
    • 添加
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第13张图片
  • 教师信息
    • 列表
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第14张图片
    • 详情/修改
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第15张图片
    • 添加:略
  • 课程信息
    • 列表
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第16张图片
    • 详情/修改
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第17张图片
    • 添加:略
  • 专业信息
    • 列表
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第18张图片
    • 详情/修改
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第19张图片
    • 添加:略
  • 专业选课信息
    • 列表
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第20张图片
    • 详情
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第21张图片
    • 添加
      • 基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第22张图片

附录

http接口设计:

一、总体规定

  • HTML 文件均保存在如下目录中

,例如

  • get 和 post 方法均需要在路径后拼上查询参数
  • 查询参数例如?student_id=< 学生编号 >&course_id=< 课程编号 >
  • get 和 post 方法的回复均以 JSON 的方式给出信息
  • 所有的路径前均加上 6060
  • http 请求的返回状态码不是 200ok 时,会有 error 字段,里面包含错误信息,客户端在适当位置显示
  • 所有修改数据库的接口,用的是 post 请求,成功的情况下回复内容为空,状态码 200,失败的情况下回复包含 error 字段,状态码 404

二、学生

API 方法 路径 发送参数 接收参数
查看基本信息 get /student/information student_id student_id;student_name;sex;birth_year;province;major_id;major_name;credits,已修学分;number_of_courses,已选课程数量;average_grade,加权平均学分
查看已选课程 get /student/courses_selected student_id courses: 列表(; course_id; course_name; year; semester; teacher_name; credit; grade;)

三、教师

API 方法 路径 发送参数 接收参数
查看基本信息 get /teacher/information teacher_id teacher_id;teacher_name;sex;birth_year;number_of_courses,所授课程数量
查看授课列表 get /teacher/courses_taught teacher_id courses: 列表(; course_id; course_name; year; semester,秋|春; credit;)
查看某门课程学生列表 get /teacher/course_information course_id students: 列表(; student_id; student_name; sex; major_name; grade;)
修改某门课程某个学生成绩 post /teacher/course_information course_id;student_id;grade
查看某门课程统计信息 get /teacher/course_statistic course_id 0-59:人数;60-69:人数;70-79:人数;80-89:人数;90-100:人数

四、管理员/学生信息

API 方法 路径 发送参数 接收参数
查看学生 get /admin/student/select students:列表( ;student_id student_name;sex;birth_year;province;enter_year;major_name;major_id;credits;number_of_courses;average_grade;)
修改学生前的请求 get /admin/student/update student_id student_id:不可修改;student_name;sex;birth_year;province;enter_year;major_id;major_name;majors:列表
修改学生后的请求 post /admin/student/update student_id;student_name;sex;birth_year;province;enter_year;major_id
添加学生前的请求 get /admin/student/insert majors:列表(; major_id; major_name;)
添加学生后的请求 post /admin/student/insert student_name;sex;birth_year;province;major_name
删除学生的请求 post /admin/student/delete student_id

五、管理员/教师信息

API 方法 路径 发送参数 接收参数
查看教师 get /admin/teacher/select teachers:列表(; teacher_id;teacher_name; sex; birth_year;number_of_courses;)
修改教师前的请求 get /admin/teacher/update teacher_id teacher_id:不可修改;teacher_name;sex;birth_year
修改教师后的请求 post /admin/teacher/update teacher_id;teacher_name;sex;birth_year
添加教师的请求 post /admin/teacher/insert teacher_name;sex;birth_year
删除教师的请求 post /admin/teacher/delete teacher_id

六、管理员/课程信息

API 方法 路径 发送参数 接收参数
查看课程 get /admin/course/select courses: 列表(; course_id; course_name; year; semester; teacher_id; teacher_name; credit;number_of_students;average_grade;)
修改课程前的请求 get /admin/course/update course_id course_id:不可修改;course_name;year;semester;teacher_id;teacher_name;credit;teachers 列表(; teacher_id; teacher_name;)
修改课程后的请求 post /admin/course/update course_id;course_name;year;semester;teacher_id;credit
添加课程前的请求 get /admin/course/insert teachers 列表(; teacher_id; teacher_name;)
添加课程后的请求 post /admin/course/insert course_name;year;semester;teacher_id;credit
删除课程的请求 post /admin/course/delete course_id

七、管理员/专业信息

API 方法 路径 发送参数 接收参数
查看专业 get /admin/major/select majors:列表(; major_name; major_id;number_of_students;)
修改专业前的请求 get /admin/major/update major_id major_id,不可修改;major_name
修改专业后的请求 post /admin/major/update major_id;major_name
添加专业的请求 post /admin/major/insert major_name
删除专业的请求 post /admin/major/delete major_id

八、管理员/专业选课

API 方法 路径 发送参数 接收参数
查看专业选课列表 get /admin/major_course/select major_courses:列表(; major_id; major_name; course_id; course_name;)
添加专业选课前的请求 get /admin/major_course/insert majors:列表(; major_id; major_name;);courses:列表(; course_id; course_name;);
添加专业选课后的请求 post /admin/major_course/insert major_id;course_id
删除专业选课 post /admin/major_course/delete major_id;course_id

九、登录/注销/修改密码

API 方法 路径 发送参数 接收参数
学生登录 get /student/login student_id;password 404 失败,error 字段;200 成功,跳转页面
学生修改密码 post /student/change_password student_id;old_password;new_password 404 失败,error 字段;200 成功
教师登录 get /teacher/login teacher_id;password 404 失败,error 字段;200 成功,跳转页面
教师修改密码 post /teacher/change_password teacher_id;old_password;new_password 404 失败,error 字段;200 成功
管理员登录 get /admin/login password 404 失败,error 字段;200 成功,跳转页面
学生登出 get /student/logout student_id 404 失败,error 字段;200 成功,跳转页面
教师登出 get /teacher/logout teachr_id 404 失败,error 字段;200 成功,跳转页面
管理员登出 get /admin/logout 404 失败,error 字段;200 成功,跳转页面

♻️ 资源

基于Python+MySQL实现(Web)学生成绩管理系统【100010288】_第23张图片

大小: 5.11MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87354543

你可能感兴趣的:(课程设计,python,mysql,前端)