1. 项目概述:SpringBoot+Vue+MySQL全栈毕业设计管理系统
这套"毕业设计信息管理系统"采用前后端分离架构,是典型的全栈开发教学案例。后端基于SpringBoot 2.x构建RESTful API,前端使用Vue 2.x+ElementUI实现响应式管理界面,数据库选用MySQL 5.7+。系统包含学生选题、导师审核、进度管理、文档提交、成绩评定等完整功能模块,源码经过完整测试可直接运行,特别适合计算机相关专业学生作为毕业设计参考项目。
提示:系统默认使用8080(后端)和8081(前端)端口,建议在本地开发环境运行前检查端口占用情况
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术栈
- SpringBoot 2.5.4:简化配置的starter依赖包含spring-boot-starter-web(Web MVC)、spring-boot-starter-data-jpa(数据库访问)
- 安全控制:Spring Security + JWT实现RBAC权限模型
- 数据库:MySQL 5.7+(兼容8.0),连接池使用HikariCP
- API文档:集成Swagger UI(访问路径/swagger-ui.html)
- 文件存储:本地文件系统存储(可扩展为阿里云OSS)
关键依赖示例:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.1</version>
</dependency>
2.2 前端技术栈
- Vue 2.6.11:核心框架
- Vue Router:前端路由管理
- Vuex:状态管理
- Axios:HTTP请求封装
- ElementUI 2.15.1:UI组件库
- ECharts:数据可视化
前端工程结构:
code复制src/
├── api/ # 接口定义
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── store/ # Vuex状态
├── utils/ # 工具类
└── views/ # 页面组件
3. 数据库设计
3.1 核心表结构
| 表名 | 字段示例 | 说明 |
|---|---|---|
| sys_user | id, username, password, role | 用户基础表 |
| student | user_id, stu_no, class | 学生扩展信息 |
| teacher | user_id, title, college | 教师扩展信息 |
| project | id, title, desc, teacher_id | 课题表 |
| selection | id, student_id, project_id, status | 选题记录 |
| progress | id, selection_id, content, attachment | 进度报告 |
| defense | id, selection_id, score, comment | 答辩成绩 |
3.2 关键关系设计
- 用户角色分离:采用主表(sys_user)+扩展表(student/teacher)设计
- 选题状态机:
java复制public enum SelectionStatus { PENDING, // 待审核 APPROVED, // 已通过 REJECTED // 已拒绝 } - 文件存储策略:数据库只保存文件路径,实际文件存储在upload目录
4. 系统功能实现
4.1 核心业务流程
-
课题发布流程:
- 教师登录→创建课题→设置要求与人数限制
- 系统自动生成课题二维码(用于学生扫码选题)
-
学生选题流程:
mermaid复制graph TD A[学生登录] --> B[浏览可选课题] B --> C{选择课题} C -->|确认| D[提交申请] D --> E[等待导师审核] -
导师审核流程:
- 实时WebSocket通知新申请
- 批量审核支持Excel导出
4.2 特色功能实现
-
进度甘特图:
javascript复制// Vue组件中使用ECharts initGantt() { this.chart = echarts.init(this.$refs.gantt); this.chart.setOption({ tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: this.milestones }, yAxis: { type: 'value' }, series: [{ data: this.progressData, type: 'bar' }] }); } -
文档查重:
java复制// 基于SimHash的简易查重 public double checkSimilarity(String text1, String text2) { SimHash hash1 = new SimHash(text1, 64); SimHash hash2 = new SimHash(text2, 64); return hash1.hammingDistance(hash2); }
5. 部署指南
5.1 开发环境运行
-
后端启动:
bash复制# 配置application-dev.yml中的数据库连接 mvn spring-boot:run -Pdev -
前端启动:
bash复制
npm install npm run serve
5.2 生产环境部署
-
后端打包:
bash复制mvn clean package -DskipTests nohup java -jar target/thesis-system.jar --spring.profiles.active=prod & -
前端部署:
bash复制npm run build # 将dist目录内容部署到Nginx
6. 常见问题解决
6.1 启动报错排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 数据库连接失败 | 1. 密码错误 2. 时区未设置 |
1. 检查application.yml配置 2. 添加?serverTimezone=Asia/Shanghai |
| 端口冲突 | 8080/8081被占用 | 修改application.yml和vue.config.js |
| 跨域问题 | 前端访问后端API失败 | 配置CorsFilter或使用Nginx反向代理 |
6.2 功能异常处理
-
文件上传失败:
- 检查upload目录权限(Linux需chmod -R 777 upload)
- 修改application.yml中的file.upload-dir
-
JWT失效问题:
java复制// 适当延长token有效期 jwt: expire: 7200 # 单位:秒 secret: your-256-bit-secret
7. 扩展建议
-
性能优化方向:
- 添加Redis缓存热门数据
- 实现Elasticsearch全文检索
- 使用Quartz定时备份数据
-
功能增强建议:
- 集成钉钉/微信消息通知
- 增加多维度统计报表
- 开发移动端小程序版本
-
毕设答辩技巧:
- 重点讲解技术选型对比(如为什么选Vue而非React)
- 演示时准备多套测试数据
- 提前模拟问答环节
注意事项:系统默认管理员账号admin/123456,首次登录后请立即修改密码。测试数据可通过src/main/resources/sql/init.sql初始化
