1. 项目背景与核心价值
这个基于SpringBoot+Vue的在线互动学习平台,是我在指导计算机专业毕业设计时反复打磨的经典案例。它完美解决了高校毕设项目中"有界面无业务"、"有功能无交互"的通病,特别适合需要展示完整企业级开发能力的学生。
平台采用前后端分离架构,包含课程管理、在线测试、即时通讯、学习进度跟踪等核心模块。与市面上单纯的教学管理系统不同,我们特别强化了"互动性"设计:
- 教师端支持富文本课件编辑与实时批注
- 学生端可提交代码作业并获取自动评测
- 集成WebSocket实现课堂实时问答
- 学习行为数据可视化分析
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术栈
java复制// 典型Controller示例
@RestController
@RequestMapping("/api/course")
public class CourseController {
@Autowired
private CourseService courseService;
@PostMapping("/create")
public Result createCourse(@Valid @RequestBody CourseDTO dto) {
return courseService.createCourse(dto);
}
@GetMapping("/{id}/students")
public Result getCourseStudents(@PathVariable Long id) {
return courseService.getCourseStudents(id);
}
}
关键技术选型:
- SpringBoot 2.7.x + MyBatis-Plus 3.5.x
- Redis 6.x 缓存热点数据
- WebSocket 实现即时通讯
- EasyExcel 处理数据导入导出
- JWT + Spring Security 认证方案
特别注意:MyBatis-Plus配置需关闭Banner打印,避免日志污染:
mybatis-plus: global-config: banner: false
2.2 前端技术栈
javascript复制// 典型Vue3组件
<script setup>
import { ref } from 'vue'
const courseList = ref([])
const loadData = async () => {
const res = await api.getCourseList()
courseList.value = res.data
}
</script>
<template>
<el-table :data="courseList">
<el-table-column prop="name" label="课程名称"/>
</el-table>
</template>
核心依赖:
- Vue 3.x + Element Plus
- Axios 封装请求拦截
- ECharts 5.x 数据可视化
- WebSocket 客户端实现
- Markdown编辑器集成
3. 数据库设计要点
3.1 关键表结构
sql复制CREATE TABLE `t_course` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '课程名称',
`cover_url` varchar(255) DEFAULT NULL COMMENT '封面图',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '0未发布 1已发布',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 设计技巧
- 所有表必须包含
create_time和update_time - 状态字段使用tinyint而非varchar
- 建立合理的联合索引:
sql复制ALTER TABLE t_homework_submit ADD INDEX idx_course_user (course_id, user_id); - 大文本字段单独建表存储
4. 典型业务实现
4.1 在线代码评测
java复制// 使用Docker实现沙箱环境
public class CodeRunner {
public String executeCode(String code) {
DockerClient docker = DefaultDockerClient.fromEnv().build();
String containerId = docker.createContainer(
CreateContainer.builder()
.image("openjdk:11")
.cmd("sh", "-c", "echo '" + code + "' > Main.java && javac Main.java && java Main")
.build());
// 获取执行结果...
}
}
4.2 实时互动消息
javascript复制// WebSocket事件处理
socket.on('teacher_annotation', (data) => {
const { pageId, coordinates, content } = data
annotationStore.addAnnotation({
pageId,
x: coordinates.x,
y: coordinates.y,
content
})
})
5. 部署与上线
5.1 后端部署
bash复制# 打包命令示例
mvn clean package -DskipTests
# Dockerfile关键指令
FROM openjdk:11
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
5.2 前端部署
nginx复制# Nginx配置要点
location / {
try_files $uri $uri/ /index.html;
gzip on;
gzip_types text/plain application/xml;
}
6. 毕设答辩技巧
- 演示时先展示架构图和技术栈
- 重点讲解1-2个技术难点实现
- 准备SQL脚本执行演示
- 展示Swagger接口文档
- 提前模拟问答环节
项目源码已包含:
- 完整Maven工程
- Vue3前端项目
- 数据库初始化脚本
- Postman接口集合
- 部署文档
- PPT模板
