学生成绩管理系统系统设计与实现说明
1. 项目概述
本项目是一个基于 Flask 的 Web 学生成绩管理系统,面向“管理员(教师/教务)+ 学生”两类用户。系统支持学生、课程、成绩的全流程管理,并提供成绩统计筛选和 Excel 导出能力。系统采用 SQLite 存储数据,适合作为课程设计或中小型教学管理系统原型。



2. 系统设计
2.1 架构设计
2.1.1 技术栈
-
后端框架:Flask
-
数据访问:Flask-SQLAlchemy(SQLAlchemy ORM)
-
身份认证:Flask-Login
-
表单与校验:Flask-WTF / WTForms
-
前端渲染:Jinja2 模板 + Bootstrap + 自定义 CSS/JS
-
数据导出:Pandas + OpenPyXL(导出成绩 Excel)
-
数据库:SQLite(
instance/app.db)
2.1.2 架构模式
本系统采用单体架构(Monolith)。业务逻辑、页面渲染、数据库访问在同一项目内完成,结构清晰、部署简单,适合教学管理场景。
2.1.3 模块划分
-
app/models.py:模型层(User、Student、Course、Score) -
app/forms.py:表单定义与参数校验 -
app/routes.py:路由与业务逻辑 -
app/templates/:页面模板(管理员、学生、认证、错误页) -
app/static/:静态资源(CSS、JS) -
config.py:配置管理 -
run.py:应用启动和初始化(建表、默认管理员创建)

2.2 数据库设计
2.2.1 ER 关系说明
-
Student与Score:一对多(一个学生多条成绩) -
Course与Score:一对多(一个课程多条成绩) -
User与Student:通过User.username == Student.student_id做逻辑映射(用于学生登录)
2.2.2 表结构定义
1)users(用户表)
-
id:主键 -
username:用户名,唯一 -
password_hash:密码哈希 -
role:角色(admin/student) -
create_time:创建时间
2)students(学生表)
-
id:主键 -
student_id:学号,唯一 -
name:姓名 -
gender:性别 -
class_name:班级 -
phone:联系方式
3)courses(课程表)
-
id:主键 -
course_id:课程编号,唯一 -
course_name:课程名称 -
credit:学分 -
teacher:授课教师 -
class_name:上课班级
4)scores(成绩表)
-
id:主键 -
student_id:外键(关联students.student_id) -
course_id:外键(关联courses.course_id) -
score:成绩 -
create_time:录入时间
2.3 接口设计
本项目主要为服务端渲染路由,接口设计采用“页面路由 + 表单提交”的方式。
2.3.1 认证接口
-
GET/POST /login:登录(用户名、密码、角色) -
GET /logout:退出登录
2.3.2 管理员功能接口
-
/admin:管理员看板 -
/admin/students:学生列表(支持关键字查询) -
/admin/students/add:新增学生 -
/admin/students/<student_id>/edit:编辑学生 -
/admin/students/<student_id>/delete:删除学生 -
/admin/courses:课程列表 -
/admin/courses/add:新增课程 -
/admin/courses/<course_id>/edit:编辑课程 -
/admin/courses/<course_id>/delete:删除课程 -
/admin/scores:成绩管理(筛选与统计) -
/admin/scores/add:录入成绩 -
/admin/scores/<score_id>/edit:编辑成绩 -
/admin/scores/<score_id>/delete:删除成绩 -
/admin/scores/export:导出成绩 Excel
2.3.3 学生功能接口
-
/student:学生首页(个人成绩) -
/profile:个人中心(管理员改密 / 学生信息与成绩查看)
2.4 UI/UX 设计
2.4.1 页面结构
-
认证页:登录页(支持角色选择)
-
管理端:仪表盘、学生管理、课程管理、成绩管理、个人中心
-
学生端:成绩看板、个人信息页
-
异常页:403 / 404 / 500
2.4.2 交互设计
-
管理端使用“列表 + 搜索 + 分页 + 编辑表单”的经典后台交互模式
-
成绩页支持按班级、课程、分数区间筛选,并显示均分/最高分/最低分
-
导出功能一键生成 Excel,便于线下存档和统计分析
2.4.3 视觉设计
-
以 Bootstrap 为基础组件,配合自定义 CSS 保证统一风格
-
表单输入、按钮状态、错误提示、分页组件保持一致性,降低学习成本
2.5 安全设计
2.5.1 认证与授权
-
使用 Flask-Login 实现登录态管理
-
通过
role字段实现角色控制 -
管理操作前统一执行管理员权限检查(非管理员返回 403)
2.5.2 数据安全
-
密码使用
generate_password_hash/check_password_hash存储与校验 -
启用 CSRF 防护(Flask-WTF + CSRFProtect)
-
表单参数使用 WTForms 验证器进行长度/范围/必填校验
2.5.3 可改进项
-
默认管理员密码首次登录强制修改
-
登录失败次数限制
-
生产环境关闭 debug,使用环境变量配置强密钥
-
增加关键操作审计日志
2.6 设计产出物
本项目已形成以下产出:
-
系统架构设计(单体 Web 架构)
-
数据库模型设计(4 张核心业务表)
-
路由接口设计(认证/管理/学生)
-
UI 页面结构设计(管理员与学生双端)
-
安全机制设计(认证授权、密码哈希、CSRF)
3. 系统实现
3.1 环境搭建
3.1.1 开发环境
-
Python 3.x
-
安装依赖:
pip install -r requirements.txt -
启动命令:
python run.py -
默认地址:
http://127.0.0.1:5000
3.1.2 初始化逻辑
系统启动时自动执行:
-
db.create_all():自动建表 -
若不存在管理员账户,自动创建默认管理员:
-
用户名:
admin -
初始密码:
123456 -
角色:
admin
3.1.3 测试与生产建议
-
测试环境:独立 SQLite 测试库 + 功能回归测试
-
生产环境:建议迁移 MySQL/PostgreSQL,使用 Gunicorn + Nginx 部署
3.2 模块开发与代码规范
3.2.1 模块分工
-
认证模块:登录、退出、权限分发
-
学生模块:学生信息增删改查
-
课程模块:课程信息增删改查
-
成绩模块:录入、编辑、删除、筛选、统计
-
导出模块:成绩 Excel 导出
-
个人中心模块:密码修改与个人信息查看
3.2.2 编码规范
-
使用 ORM 避免硬编码 SQL
-
路由按业务域组织,职责清晰
-
表单校验统一由
forms.py维护 -
错误统一由 403/404/500 处理页面接管
-
可维护性优先,命名语义化、模块边界明确
4. 项目总结
本系统完成了学生成绩管理核心业务闭环,实现了“管理员管理 + 学生查询 + 成绩统计导出”的完整流程。项目技术路线清晰,代码结构规范,具备良好的可演示性与可扩展性,适合作为课程设计和后续二次开发基础。
5. 总结与展望
5.1 项目总结
系统实现了学生成绩管理核心业务,具备良好可用性与可维护性。
5.2 后续优化
-
引入 REST API 与前后端分离
-
增加操作日志与消息通知
-
支持批量导入成绩
-
提供图表化分析报表
夜雨聆风