乐于分享
好东西不私藏

学生成绩管理系统系统设计与实现说明

学生成绩管理系统系统设计与实现说明

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 设计产出物

本项目已形成以下产出:

  1. 系统架构设计(单体 Web 架构)

  2. 数据库模型设计(4 张核心业务表)

  3. 路由接口设计(认证/管理/学生)

  4. UI 页面结构设计(管理员与学生双端)

  5. 安全机制设计(认证授权、密码哈希、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 与前后端分离

  • 增加操作日志与消息通知

  • 支持批量导入成绩

  • 提供图表化分析报表