学生选课管理系统
项目概述
哔哩哔哩系统功能演示地址,请点击我跳转!https://www.bilibili.com/video/BV1SQ7Q6gEsT/?spm_id_from=333.1387.homepage.video_card.click&vd_source=1cc74f9f7d21efd4b52085adfbba22f7
基于 Spring Boot 和 Vue 开发的现代化学生选课管理系统,采用前后端分离架构,支持管理员、教师、学生三种角色的完整业务流程。
技术栈
后端技术
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 2.2.1 | Java EE 后端框架 |
| MyBatis Plus | 3.3.0 | ORM 框架,简化数据库操作 |
| MySQL | 5.7+ | 关系型数据库 |
| Spring AOP | - | 面向切面编程,统一异常处理 |
| Jsoup | 1.12.1 | HTML 解析工具 |
| Apache POI | 4.1.2 | Excel 文件处理 |
前端技术
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue.js | 2.6.10 | 渐进式 JavaScript 框架 |
| Vue Router | 3.1.3 | 路由管理 |
| Vuex | 3.1.2 | 状态管理 |
| Element UI | 2.13.0 | 组件库 |
| ECharts | 4.5.0 | 数据可视化图表 |
| Axios | 0.19.0 | HTTP 客户端 |
| Font Awesome | 4.7.0 | 图标库 |
功能架构
┌─────────────────────────────────────────────────────────────┐
│ 学生选课管理系统 │
├─────────────────────────────────────────────────────────────┤
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 管理员 │ │ 教师 │ │ 学生 │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ ┌─────▼────────────────────────────────▼─────┐ │
│ │ 核心业务模块 │ │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ │用户管理│ │课程管理│ │选课管理│ │成绩管理│ │系统设置│ │
│ │ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
角色功能详解
1. 管理员模块
| 功能模块 | 功能描述 |
|---|---|
| 用户管理 | 管理员账号管理、教师信息管理、学生信息管理(支持 Excel 批量导入) |
| 院系管理 | 院系信息的增删改查 |
| 专业管理 | 专业信息管理,关联院系 |
| 班级管理 | 班级信息管理,关联专业 |
| 课程管理 | 课程信息管理,包括课程安排 |
| 选课管理 | 查看学生选课情况,支持选课调整 |
| 公告管理 | 发布系统公告通知 |
2. 教师模块
| 功能模块 | 功能描述 |
|---|---|
| 课程管理 | 查看授课课程列表 |
| 成绩管理 | 录入和管理学生成绩 |
| 课表查询 | 查看个人授课时间表 |
3. 学生模块
| 功能模块 | 功能描述 |
|---|---|
| 课程浏览 | 查看可选课程列表 |
| 选课操作 | 选择和退选课程 |
| 课表查询 | 查看个人课程表 |
| 成绩查询 | 查看考试成绩 |
| 个人信息 | 修改个人资料 |
核心特性
🔐 权限控制
- 基于 Spring AOP 的自定义权限注解
- 支持
@Admin、@Teacher、@Student角色注解 - 登录状态管理与权限拦截
📊 数据可视化
- 使用 ECharts 实现数据统计图表
- 支持课程选课统计、成绩分析等
📱 响应式设计
- 使用 Element UI 构建现代化界面
- 支持多种屏幕尺寸
📤 数据导入
- 支持 Excel 批量导入学生信息
- 简化数据初始化流程
核心业务流程
1. 用户登录与权限验证流程
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 用户访问 │───▶│ 输入账号密码 │───▶│ 验证登录信息 │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 管理员 │ │ 教师 │ │ 学生 │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 管理员首页│ │ 教师首页 │ │ 学生首页 │
└───────────┘ └───────────┘ └───────────┘
流程说明:
- 用户在登录页面输入账号密码
- 系统验证账号密码的正确性
- 根据用户类型(管理员/教师/学生)跳转到对应角色的首页
- 使用 Session 机制保持登录状态
2. 学生选课流程
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 浏览课程 │───▶│ 选择课程 │───▶│ 校验选课条件 │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 人数已满 │ │ 时间冲突 │ │ 选课成功 │
└───────────┘ └───────────┘ └─────┬─────┘
│
▼
┌───────────┐
│ 更新课表 │
└───────────┘
流程说明:
- 学生浏览可选课程列表,支持按课程名、教师名搜索
- 选择心仪的课程后,系统进行条件校验:
- 检查课程选课人数是否已满
- 检查是否与已选课程时间冲突
- 校验通过后,添加选课记录并更新个人课表
核心API接口:
| 接口 | 方法 | 说明 |
|---|---|---|
/student/course/select/page/{index} |
GET | 分页查询可选课程 |
/student/course/select/{id} |
POST | 选择指定课程 |
3. 教师成绩录入流程
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 选择授课课程│───▶│ 查看选课学生 │───▶│ 录入/修改成绩 │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
▼
┌───────────┐
│ 保存成绩 │
└─────┬─────┘
│
▼
┌───────────┐
│ 更新统计 │
└───────────┘
流程说明:
- 教师登录后查看个人授课课程列表
- 选择某门课程,查看已选课的学生名单
- 录入或修改学生成绩(支持分数、等级等多种形式)
- 保存成绩后更新数据库,并刷新统计信息
核心API接口:
| 接口 | 方法 | 说明 |
|---|---|---|
/teacher/grade/page/{index} |
GET | 分页查询成绩列表 |
/teacher/grade/{id} |
GET | 查询单个成绩详情 |
/teacher/grade |
PUT | 更新成绩信息 |
4. 管理员数据导入流程
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 上传Excel文件│───▶│ 解析文件内容 │───▶│ 数据格式校验 │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 格式错误 │ │ 部分成功 │ │ 全部成功 │
└───────────┘ └───────────┘ └───────────┘
流程说明:
- 管理员选择 Excel 文件上传
- 系统使用 Apache POI 解析文件内容
- 校验数据格式和完整性
- 返回导入结果(成功条数、失败原因)
5. 权限拦截流程(Themis框架)
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 用户请求 │───▶│ 拦截器拦截 │───▶│ 检查登录状态 │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
┌───────────────┴───────────────┐
▼ ▼
┌───────────┐ ┌───────────┐
│ 未登录 │ │ 已登录 │
└─────┬─────┘ └─────┬─────┘
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ 跳转登录页│ │ 校验权限 │
└───────────┘ └─────┬─────┘
│
┌─────────────┴─────────────┐
▼ ▼
┌───────────┐ ┌───────────┐
│ 权限不足 │ │ 允许访问 │
└───────────┘ └───────────┘
流程说明:
ThemisInterceptor拦截所有请求- 检查用户是否已登录(通过 Session)
- 解析 Controller 上的权限注解(
@Admin、@Teacher、@Student) - 根据用户角色判断是否具有访问权限
- 无权限时返回 403 错误或跳转到登录页
数据模型关系
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Department │──────│ Major │──────│ Class │
│ (院系) │ │ (专业) │ │ (班级) │
└──────────────┘ └──────────────┘ └──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Teacher │──────│ Course │──────│ Student │
│ (教师) │ │ (课程) │ │ (学生) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │
└──────────┬────────┘
▼
┌──────────────┐
│StudentCourse │
│ (选课记录) │
└──────────────┘
关系说明:
- 院系与专业:一对多关系,一个院系包含多个专业
- 专业与班级:一对多关系,一个专业包含多个班级
- 班级与学生:一对多关系,一个班级包含多个学生
- 教师与课程:一对多关系,一个教师可教授多门课程
- 课程与学生 :多对多关系,通过
StudentCourse中间表关联
项目结构
Course-Selection-System/
├── springboot/ # 后端代码
│ ├── src/main/java/com/rainng/coursesystem/
│ │ ├── controller/ # REST API 控制层
│ │ ├── service/ # 业务逻辑层
│ │ ├── manager/ # 业务管理层
│ │ ├── dao/ # 数据访问层
│ │ ├── model/ # 数据模型
│ │ ├── config/ # 配置类
│ │ └── Application.java # 启动类
│ ├── src/main/resources/
│ │ ├── mapping/ # MyBatis 映射文件
│ │ └── application.yaml # 应用配置
│ └── pom.xml # Maven 依赖
├── vue/ # 前端代码
│ ├── src/
│ │ ├── components/ # 公共组件
│ │ ├── views/ # 页面视图
│ │ ├── router/ # 路由配置
│ │ ├── store/ # 状态管理
│ │ └── App.vue # 根组件
│ └── package.json # npm 依赖
└── course.sql # 数据库初始化脚本
运行方式
环境要求
- JDK 1.8+
- Maven 3.6+
- Node.js 12+
- MySQL 5.7+
启动步骤
- 数据库配置
sql
-- 创建数据库
CREATE DATABASE course CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 导入初始化脚本
source course.sql;
- 后端启动
bash
cd springboot
mvn spring-boot:run
- 服务地址:
http://localhost:8085
- 前端启动
bash
cd vue
npm install
npm run serve
- 访问地址:
http://localhost:8080
适用场景
- ✅ 毕业设计项目:完整的前后端分离架构,适合作为计算机专业毕业设计
- ✅ 课程设计:涵盖用户管理、权限控制、数据统计等核心功能
- ✅ 学习参考:代码结构清晰,适合学习 Spring Boot + Vue 技术栈
项目亮点
- 架构规范:采用经典的分层架构,代码结构清晰
- 权限系统:自定义注解实现灵活的权限控制
- 业务完整:覆盖选课系统的全流程业务
- 技术主流:使用当前企业级主流技术栈
- 文档齐全:代码注释规范,便于学习和维护
项目截图
登录页面

管理员页面





教师页面



学生选课页面





如果您对本项目感兴趣,欢迎交流学习!
📌 提示:本项目适合作为计算机科学与技术、软件工程等专业的毕业设计选题,功能完整、技术栈主流、扩展性强。