基于 SpringBoot+Vue+MySQL 的学生信息管理系统设计与实现(Web 三角色)
1. 前言
学生信息管理是学校教学运行中最基础也最琐碎的一环:学籍档案散落在各种表格里,选课靠纸质单据层层统计,成绩汇总常常出现抄错串行的情况,通知公告传达也总是滞后。对于规模不大的院校、培训机构或者企业内训部门来说,上一套重型教学管理系统成本太高,继续依赖人工表格又扛不住数据量的增长,特别是无法按角色区分数据权限——老师能看到什么、学生能改什么,全凭口头约定。
这个项目把上述场景搬进浏览器:采用纯 B/S 架构,管理员、老师、学生三种角色登录同一个 Web 入口,登录后按角色渲染完全不同的功能菜单。管理员维护基础档案与全局数据,老师围绕自己的课程做选课审核与成绩登记,学生完成在线选课、成绩查询和资料下载。系统基于 SpringBoot + Vue + MySQL 实现,构建产物是一个可执行 Jar,一台装了 JDK 和 MySQL 的机器就能跑起来,既可以直接落地到真实的教学管理场景,也是一份结构完整的前后端分离学习工程。数据库自带一套贴近真实教学业务的演示数据,导入之后不需要再手工造数,每张列表页打开就有内容可看。
2. 技术栈介绍
| 层 | 技术 | 说明 |
|---|---|---|
| 表现层 | Vue.js 2 + Element UI + Axios | 单页应用,菜单与页面按角色动态渲染 |
| 可视化 | ECharts | 首页统计图表展示 |
| 业务层 | Spring Boot 2.2.2 + Spring MVC | RESTful 接口,统一响应结构 |
| 会话与权限 | Apache Shiro + Token 表驱动会话 | 登录颁发 Token,拦截器统一校验 |
| 数据访问 | MyBatis-Plus 2.3 | 通用 CRUD、条件构造器与分页插件 |
| 数据库 | MySQL 5.7(utf8) | 11 张业务表 |
| 构建/运行 | Maven + JDK 1.8 | 打包为单个可执行 Jar 部署 |
选型思路比较务实。后端用 SpringBoot 做自动装配和内嵌容器,省去容器配置;单表操作全部交给 MyBatis-Plus,Controller 层只剩参数组装和业务编排,代码量被压得很低。前端选择 Vue2 + Element UI,表格、表单、上传、弹窗这些管理端高频组件开箱即用,配合 Axios 封装的统一请求拦截,前端代码只关心数据和交互本身。
权限设计没有引入重型 RBAC 框架,而是走"token 表驱动"的轻量方案:登录成功后,后端为该账号生成一段随机 Token 写入数据库的 token 表,前端把它连同用户身份信息一起存进 localStorage;此后每次请求都在请求头携带 Token,后端拦截器查库还原出用户 id、角色和所属账号表,再把请求放行到对应业务。三种角色共用这一套拦截逻辑,新增角色只需要插入一条角色定义,链路简单到一次面试讲解就能说清楚。
图:系统分层技术架构
3. 系统功能设计
系统按照"谁登录、能看什么、能做什么"的原则划分三端,功能口径如下:
| 端 | 模块 | 功能点 |
|---|---|---|
| 管理员端 | 管理员管理 | 管理员账号维护、修改密码、个人信息 |
| 管理员端 | 基础数据管理 | 性别、院系、班级、课程类型、资料类型等字典项维护 |
| 管理员端 | 老师管理 | 老师档案新增、修改、删除、按姓名检索 |
| 管理员端 | 学生管理 | 学籍信息维护、头像上传、批量管理 |
| 管理员端 | 课程/公告/资料库管理 | 课程发布、公告发布、学习资料上传 |
| 管理员端 | 选课审核与成绩管理 | 选课申请审批、全校成绩录入与维护 |
| 老师端 | 我的课程 | 授课课程维护、课程资料上传 |
| 老师端 | 选课审核 | 审批本课学生选课申请(同意 / 拒绝) |
| 老师端 | 成绩录入 | 登记选课学生的成绩与评语 |
| 学生端 | 在线选课 | 浏览课程、提交选课申请、取消选课 |
| 学生端 | 成绩查询 | 按课程查询个人成绩 |
| 学生端 | 资料与公告 | 检索下载学习资料、浏览教务通知、个人中心 |
图:三端功能结构
几个值得留意的设计取舍。其一,选课采用"申请—审核"两段式流程:学生提交选课后记录进入待审核状态,老师或管理员审核通过后选课关系才正式生效,审核结论和意见回填到选课记录中,业务轨迹完整可追溯。其二,成绩挂在"学生 × 课程"的交叉维度上,录入页面自动带出学生头像、课程名称等上下文信息,减少误录。其三,把性别、院系、班级、课程类型、资料类型这些枚举值全部收口到字典表,页面下拉选项由数据驱动,后续调整院系设置或新增课程类型都不需要改一行代码。
4. 数据库设计
数据库xueshengxinxiguanli共 11 张表,职责划分如下:
| 表名 | 职责 |
|---|---|
| users | 管理员账号 |
| laoshi | 老师档案(账号、任教与通信信息) |
| yonghu | 学生学籍档案(院系、班级、证件信息) |
| kecheng | 课程信息,通过 laoshi_id 关联授课老师 |
| xueshengxuanke | 选课申请及审核状态流转 |
| xueshengchengji | 学生成绩(学生 × 课程交叉) |
| gonggao | 教务与通知公告 |
| ziliaoku | 学习资料库(文件、类型) |
| dictionary | 数据字典,统一管理全部下拉枚举 |
| token | 登录会话凭证与过期控制 |
| config | 系统配置参数 |
图:核心表 E-R 关系
核心业务链路围绕三张表展开。课程表 kecheng 通过 laoshi_id 与老师表形成"老师 1 : N 课程"的授课结构;选课表 xueshengxuanke 分别以 yonghu_id、kecheng_id 外键关联学生和课程,用 yesno_types 字段表达"待审核、同意、拒绝、取消"四种状态,同时保留审核回复文本与审核时间,一个状态机字段就撑起了完整的审核流;成绩表 xueshengchengji 同样是学生与课程的交叉表,得分字段采用 decimal(10,2) 保证小数精度,评语独立成列,查询统计互不干扰。
token 表是会话方案的核心:userid 加 tablename 两个字段可以定位任意角色的账号(users、laoshi、yonghu 三张账号表共用一套会话逻辑),token 字段存储服务端生成的随机串,expiratedtime 控制过期时间。一张表兼容三种角色,既避免了引入额外会话中间件,也让"同一账号在别的终端重新登录"这类控制变得容易实现。
5. 系统演示
系统启动后,浏览器打开后台入口即可看到登录页。登录页内置角色下拉,管理员、老师、学生分别选择角色后凭账号密码进入各自的工作台。
图:三角色登录入口
以管理员身份登录后进入后台首页,左侧菜单按角色渲染出管理员管理、基础数据管理、公告管理、课程管理、老师管理、学生管理、资料库管理等全部模块。
图:管理员端首页与完整菜单
学生管理页面维护学籍档案,列表展示账户、姓名、手机、证件、头像、院系与班级,支持按姓名检索和新增、批量删除操作,头像以内联方式上传。
图:学生学籍档案管理
老师管理页面结构类似,档案字段面向教学场景,老师账号可以直接用于登录老师端。
图:老师档案管理
课程管理页面维护课程名称、上课地点、课程类型、起止时间等,课程类型下拉项即来自字典表。
图:课程信息管理
成绩管理页面按"学生 × 课程"维度展示成绩列表,支持按课程名称、课程类型、学生姓名组合检索。
图:全校成绩管理
选课管理页面呈现选课申请的审核状态,审核意见与时间随记录一并展示。
图:选课记录与审核状态
公告管理页面维护教务通知,公告类型、发布时间、配图一应俱全,学生端与老师端可见。
图:教务公告管理
资料库管理页面集中管理课件、教案、习题等学习资料,学生端可以检索并下载。
图:学习资料库
换学生身份登录,右上角身份标识变为"用户",左侧菜单收缩为学生可用功能,与管理员视角形成明显区分,角色权限的差异一目了然。同一套页面骨架、三套完全不同的数据视野,这正是拦截器从 Token 中还原角色后逐层过滤菜单与接口的结果,也让演示时最容易看出系统在权限设计上的用心。
图:学生端登录视角
6. 小结
这个项目把学生信息管理中最典型的几类业务——档案维护、选课审核、成绩登记、资料与公告分发——收敛进一个纯 Web 系统。SpringBoot 加 MyBatis-Plus 的组合让后端保持精炼,Vue2 加 Element UI 保证了管理页面的易用性;token 表驱动的轻量会话虽然不如成熟的权限中间件面面俱到,但对三角色的小型系统来说恰到好处,整条登录鉴权链路清晰可读,后续替换成其他方案的成本也不高。整体而言,它既是一套能直接试用的教学管理工具,也是一份适合完整读下来的前后端分离实践样本。如果你在做类似系统时有不同的设计思路,欢迎评论区交流。
芳华学生信息管理系统源码 SpringBoot+Vue+MySQL(毕业设计/课程设计)