毕业设计实战:基于Spring Boot+MySQL的高校竞赛管理系统设计与实现全流程指南

48 阅读19分钟

毕业设计实战:基于Spring Boot+MySQL的高校竞赛管理系统设计与实现全流程指南

在开发“基于Spring Boot+MySQL的高校竞赛管理系统”毕业设计时,曾因“赛事报名与评审分配未关联”踩过关键坑——初期未在“赛事报名表”与“评审分配表”间通过“报名唯一编号”设置外键,导致专家接收评审任务时无法同步获取参赛用户信息、赛事详情及报名材料,需手动跨表查询,耗费1.9天重构表结构、补全关联逻辑才解决问题📝。基于此次实战经验,本文将系统拆解从需求分析、技术选型、功能实现到测试验收的全流程要点,附避坑技巧与实操细节,为同类毕设提供可落地的实施指南。

一、需求分析:锚定高校竞赛核心诉求,避免功能冗余返工

部分同学在毕设初期易陷入“功能堆砌”误区,比如笔者曾耗时2.4天开发“竞赛数据可视化大屏模块”,最终因偏离“赛事管控、报名审核、评审流程、结果管理”核心需求被导师要求删减。明确“用户角色-核心功能”对应关系,是降低返工率的关键前提。

1. 核心用户与功能拆解(优化后角色权限体系)

系统核心用户分为管理员、用户(学生)、老师、专家四类,前期曾因混淆“老师”与“管理员”的“赛事类型修改权限”,导致老师可随意新增赛事分类,明确角色边界后系统规范性显著提升,具体功能分工如下:

管理员端(核心必做功能)
  • 全角色用户管理:维护管理员、用户、老师、专家账号生命周期(新增、密码重置、逻辑删除),支持按姓名/身份证号/角色精准筛选,查看用户完整资料(如老师工号、专家研究领域),可编辑基础信息(修正手机号、更新账号启用状态);
  • 核心竞赛管控
    • 赛事全流程管理:维护赛事基础信息(录入名称、编号、类型、地点、介绍、照片)、设置赛事状态(报名中/已截止/已结束)、管理赛事提交作品(审核作品合规性、标记提交状态),确保赛事数据与实际进度同步;
    • 评审与结果管理:分配评审任务(关联专家与报名记录)、审核评审打分(校验分数合理性)、管理获奖信息(录入获奖名称、类型、排名、照片),生成赛事获奖公示;
  • 信息与论坛管理:发布竞赛公告(编辑名称、类型、详情、封面图)、维护论坛内容(审核帖子合规性、删除违规言论)、统计核心数据(赛事报名率、评审完成率、获奖率),通过数据看板监控竞赛全流程进度。
用户端(学生角色,核心需求功能)
  • 竞赛参与与互动:浏览赛事列表(按类型、状态筛选)、提交赛事报名(填写报名理由、关联指导老师)、上传参赛作品(支持多格式附件、预览确认)、查看报名审核结果(待审核/通过/驳回);
  • 进度跟踪与信息获取:查看个人参赛记录(已报名/已提交/已评审/已获奖)、浏览竞赛公告(了解赛事时间调整、评审规则)、参与论坛讨论(发布赛事相关疑问、回复他人帖子);
  • 个人中心管理:维护个人资料(修改手机号、邮箱、头像)、管理报名记录(取消未审核报名)、查看获奖证书(下载电子版),无修改赛事数据、删除评审记录的权限,确保数据安全。
老师端(核心需求功能)
  • 指导与审核辅助:查看学生报名记录(按赛事筛选)、确认指导关系(同意/拒绝学生指导申请)、查看学生参赛作品(提供修改建议);
  • 信息同步与查询:浏览赛事信息(了解赛事要求、截止时间)、查看竞赛公告(获取官方通知)、统计指导成果(已指导学生数、获奖数),无赛事创建、评审分配权限,仅辅助管理员完成学生指导工作。
专家端(核心需求功能)
  • 评审任务处理:接收评审分配(查看报名唯一编号、参赛作品、赛事要求)、填写评审打分(按维度评分、填写评语)、提交评审结果(支持修改未审核打分);
  • 评审记录查询:按时间(本周/本月)筛选已完成评审任务、查看评审反馈(管理员对打分的审核意见)、统计评审工作量(已评审作品数、平均打分时长),确保评审流程规范可追溯。

2. 需求分析避坑要点(实战经验总结)

  • 拒绝空想调研:邀请3-4名同学模拟“学生报名赛事-老师确认指导-管理员分配评审-专家打分”“管理员发布公告-学生查看报名”场景,收集真实诉求。例如,基于学生“快速跟踪报名审核进度”需求,增设“报名状态实时提醒”功能,实用性远高于冗余的“数据可视化大屏模块”;
  • 绘制可视化用例图:使用DrawIO工具绘制核心业务用例图(如“管理员-赛事管理”“用户-报名提交”“专家-评审打分”),汇报时直观呈现逻辑,避免纯文字描述导致的理解偏差;
  • 明确约束条件:提前规定“赛事照片仅限JPG/PNG(≤3MB)”“报名唯一编号自动生成(格式:BM+日期+序号)”“评审打分需在0-100分区间”“获奖信息发布后不可删除(仅可修改排名)”,为编码提供明确依据,避免功能偏离需求。

3. 可行性分析:从三维度论证,提升毕设专业性

可行性分析是开题关键,需从技术、经济、操作三维度展开,避免泛泛而谈“可行”:

  • 技术可行性:Spring Boot、Java、MySQL、Vue均为高校核心课程内容,开发资料丰富(如《Spring Boot实战》《Vue.js入门到精通》),技术门槛可控;需注意避免使用Spring Boot 3.x版本,笔者前期尝试该版本与MySQL 8.0联调时,赛事报名接口频繁报“数据库事务异常”,切换至2.7稳定版后问题解决;
  • 经济可行性:开发工具均为免费/开源版本(IDEA社区版、MySQL社区版、Navicat学生版、Vue CLI),开发成本为零;系统上线后可替代传统纸质竞赛管理,减少人工统计误差、评审沟通成本,帮助高校规范竞赛流程,具备实际应用价值;
  • 操作可行性:界面参考主流教育类系统交互,高频功能(赛事报名、作品提交、评审打分)置于首页显眼位置,经测试,学生5分钟内可掌握账号注册、赛事报名、作品上传操作,专家3分钟内可完成单份作品评审,易用性达标。

二、技术选型:优先稳定适配,拒绝盲目追新

前期曾跟风选用Spring Boot 3.x+Vue 3+Redis技术栈,因Redis缓存配置不当,导致赛事报名数据重启后丢失,调试耗时1.2天。后续调整为“Java 8+Spring Boot 2.7+MySQL 8.0+Vue 2+ElementUI+IDEA”组合,兼顾稳定性与开发效率,非常适合新手快速上手。

1. 核心技术栈选型说明(含避坑提醒)

技术工具选型理由避坑提醒
Java 8语法简洁,支持面向对象编程(封装、继承、多态),与Spring Boot 2.7兼容性最佳,能满足多角色权限、竞赛流程等核心功能开发避免使用Java 11+版本,部分Spring依赖(如spring-boot-starter-jdbc)支持不完善,易出现“类加载失败”
Spring Boot 2.7简化Spring配置,自带Tomcat服务器,支持快速开发接口(如赛事报名、评审打分),减少XML配置工作量,提升开发效率直接使用官方starter(spring-boot-starter-web、spring-boot-starter-mybatis),勿自定义启动器,避免赛事提交接口失效
MySQL 8.0支持事务与外键约束,可满足多表关联(如赛事-报名、报名-评审),utf8mb4编码解决赛事名称、用户姓名生僻字乱码安装时手动设置编码为utf8mb4,默认编码会导致赛事介绍、评审评语含特殊符号时乱码;需开启事务,确保报名提交与作品上传原子性
Vue 2+ElementUI前端组件丰富(表格、表单、弹窗、上传组件),快速构建响应式界面(适配电脑、平板),学生可通过平板现场提交参赛作品避免使用Vue 3+Element Plus,部分组件(如文件上传、日期选择器)兼容性差,前期曾导致赛事报名时间选择错乱,切换版本后恢复
IDEA社区版集成Java开发环境,支持Vue插件扩展,调试功能便捷(断点调试评审打分逻辑),可快速定位代码错误安装“Vue.js”“MyBatis Log Plugin”插件,避免前端代码无提示、SQL执行日志无法查看;配置JDK为1.8,勿使用默认自动匹配

2. 开发环境搭建步骤(实操指南)

  1. 安装JDK 1.8:记录安装路径(如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”“Path”环境变量,通过cmd命令“java -version”验证,显示“1.8.x”即为成功;
  2. 安装IDEA社区版:安装Vue.js插件(File→Settings→Plugins)、MySQL插件,配置JDK为1.8,设置工作空间编码为“UTF-8”;
  3. 安装MySQL 8.0:用Navicat创建数据库“college_competition_system”,设置编码utf8mb4、排序规则“utf8mb4_general_ci”;
  4. 创建Spring Boot后端项目
    • 通过IDEA的“Spring Initializr”选择2.7版本,引入Web、MyBatis、MySQL Driver依赖;
    • 在application.yml配置数据库连接(url、用户名、密码)、服务器端口(建议8081)、MyBatis映射路径(mapper-locations: classpath:mapper/*.xml);
  5. 创建Vue前端项目
    • 用Vue CLI创建Vue 2项目(命令“vue init webpack competition-frontend”),引入ElementUI依赖(在main.js中import并use);
    • 开发登录页、赛事列表页、报名页、评审打分页,实现响应式(电脑端3列展示赛事,平板端2列);
  6. 联调测试:编写“查询赛事列表”接口,前端调用后能显示赛事名称、类型、地点、报名状态,说明环境搭建成功。

三、数据库设计:理清实体关联逻辑,避免数据混乱

数据库是高校竞赛管理系统的核心骨架,前期因未在“评审打分表”与“评审分配表”间设置“评审分配ID”外键,导致无法追溯专家打分对应的具体分配任务,需重新编写关联SQL才解决问题😓。后续采用“实体-属性-关系”分析法梳理表结构,效率显著提升。

1. 核心实体与属性设计(附ER图绘制技巧)

明确系统核心实体(管理员、用户、老师、专家、赛事、赛事报名、评审分配、评审打分、获奖、竞赛公告、论坛),梳理各实体属性,核心表结构如下(共14张核心表,可直接用于ER图绘制):

  • 管理员表(admin):id(主键,Int)、username(账号,String)、password(密码,String,MD5加密)、role(角色,String)、addtime(创建时间,Date);
  • 用户表(yonghu):id(主键,Int)、yonghu_name(姓名,String)、yonghu_phone(手机号,String)、yonghu_id_number(身份证号,String)、yonghu_photo(头像,String,存储路径)、yonghu_email(邮箱,String)、create_time(创建时间,Date);
  • 老师表(laoshi):id(主键,Int)、laoshi_name(姓名,String)、laoshi_phone(手机号,String)、laoshi_id_number(身份证号,String)、laoshi_photo(头像,String,存储路径)、laoshi_email(邮箱,String)、create_time(创建时间,Date);
  • 专家表(zhuanjia):id(主键,Int)、zhuanjia_name(姓名,String)、zhuanjia_phone(手机号,String)、zhuanjia_id_number(身份证号,String)、zhuanjia_photo(头像,String,存储路径)、zhuanjia_email(邮箱,String)、create_time(创建时间,Date);
  • 赛事表(saishi):id(主键,Int)、saishi_name(名称,String)、saishi_uuid_number(编号,String,唯一)、saishi_photo(照片,String,存储路径)、saishi_address(地点,String)、saishi_types(类型,Integer)、saishi_content(介绍,String)、saishi_delete(逻辑删除,Integer)、insert_time(录入时间,Date)、create_time(创建时间,Date);
  • 赛事报名表(saishi_yuyue):id(主键,Int)、saishi_yuyue_uuid_number(报名编号,String,唯一)、saishi_id(赛事ID,Integer,外键)、yonghu_id(用户ID,Integer,外键)、laoshi_id(老师ID,Integer,外键)、saishi_yuyue_text(报名理由,String)、saishi_yuyue_yesno_types(报名状态,Integer)、create_time(创建时间,Date);
  • 评审分配表(pingshen_fenpei):id(主键,Int)、pingshen_fenpei_uuid_number(报名唯一编号,String)、pingshen_id(评审ID,Integer,外键)、zhuanjia_id(专家ID,Integer,外键)、pingshen_fenpei_text(内容,String)、insert_time(分配时间,Date)、create_time(创建时间,Date);
  • 评审打分表(pingshen_pingfen):id(主键,Int)、pingshen_pingfen_uuid_number(报名唯一编号,String)、pingshen_fenpei_id(评审分配ID,Integer,外键)、zhuanjia_id(专家ID,Integer,外键)、pingshen_pingfen_pingfen(打分,Integer)、pingshen_pingfen_text(评语,String)、create_time(创建时间,Date);
  • 获奖表(huojiang):id(主键,Int)、huojiang_name(名称,String)、huojiang_uuid_number(编号,String,唯一)、huojiang_photo(照片,String,存储路径)、huojiang_types(类型,Integer)、huojiang_xues(学生排名,Integer)、huojiang_content(介绍,String)、create_time(创建时间,Date)。

ER图绘制建议用Visio或亿图,遵循3个规则:① 矩形代表实体(如“赛事”“赛事报名”);② 椭圆代表属性(如赛事的“名称”“地点”“类型”);③ 菱形代表关系(如“赛事-赛事报名”为一对多,一个赛事可对应多条报名记录)。

关键避坑提醒:切勿将参赛作品、获奖证书等二进制数据存入数据库!前期尝试该方案导致数据库体积骤增(单份参赛作品5MB,100条记录占500MB),后续改为存储文件路径(如/static/competition/works1.pdf),大幅提升查询速度与系统稳定性。

2. 表关联测试:提前验证,避免编码后返工

建表后立即测试关联逻辑,步骤如下:

  1. 在赛事表插入测试数据:id=1,saishi_name=“大学生程序设计竞赛”,saishi_types=1(编程类),saishi_address=“学校礼堂”;
  2. 在赛事报名表插入关联数据:id=1,saishi_yuyue_uuid_number=“BM20240520001”,saishi_id=1,yonghu_id=1,laoshi_id=1,saishi_yuyue_yesno_types=1(已通过);
  3. 在评审分配表插入关联数据:id=1,pingshen_fenpei_uuid_number=“BM20240520001”,zhuanjia_id=1;
  4. 在评审打分表插入关联数据:id=1,pingshen_fenpei_id=1,zhuanjia_id=1,pingshen_pingfen_pingfen=92,pingshen_pingfen_text=“代码规范,功能完整”;
  5. 编写JOIN查询SQL,验证“某赛事的报名-评审-打分全流程数据”:
SELECT s.saishi_name, s.saishi_address, s.saishi_types,
       y.yonghu_name, y.yonghu_phone,
       l.laoshi_name,
       z.zhuanjia_name,
       p.pingshen_pingfen_pingfen, p.pingshen_pingfen_text
FROM saishi s
JOIN saishi_yuyue sy ON s.id = sy.saishi_id
JOIN yonghu y ON sy.yonghu_id = y.id
JOIN laoshi l ON sy.laoshi_id = l.id
JOIN pingshen_fenpei pf ON sy.saishi_yuyue_uuid_number = pf.pingshen_fenpei_uuid_number
JOIN zhuanjia z ON pf.zhuanjia_id = z.id
JOIN pingshen_pingfen p ON pf.id = p.pingshen_fenpei_id
WHERE s.id = 1;

若能查询出“赛事名称、地点、类型、学生姓名、手机号、指导老师、评审专家、打分、评语”,说明关联正确;若出现外键约束错误,需检查字段类型是否匹配(如saishi_id与赛事表id是否同为Integer)。

四、功能实现:聚焦竞赛核心模块,提升答辩竞争力

无需开发所有功能,优先完成3个核心模块即可满足答辩要求,且能突出开发重点:

1. 管理员端:赛事管理模块(必做核心模块)

  • 核心逻辑
    1. 赛事新增:管理员填写赛事名称、编号(校验唯一性)、选择类型(关联字典表)、录入地点与介绍,上传赛事照片(支持预览),设置报名起止时间,提交后状态设为“待开启”;
    2. 状态管理:报名时间到后自动切换为“报名中”,截止后切换为“已截止”,赛事结束后手动标记为“已结束”,支持手动调整状态(应对特殊情况);
    3. 筛选查询:按名称(模糊查询)、类型(下拉选择)、状态(下拉选择)筛选,表格展示核心信息(编号、名称、类型、地点、状态、报名人数),支持分页(每页10条),报名中赛事标蓝提醒。
  • 页面设计(Vue 2+ElementUI)
    • 筛选区:名称输入框、类型下拉框、状态下拉框、“查询”按钮,支持重置筛选条件;
    • 操作区:“新增赛事”按钮(点击弹出表单弹窗)、表格操作列(“编辑”“删除”“查看报名”,删除为逻辑删除);
    • 表格区:展示编号、名称、类型、地点、报名起止时间、状态、报名人数,点击“查看报名”可跳转至该赛事的报名列表页。

2. 用户端:赛事报名与作品提交模块(答辩亮点模块)

  • 核心逻辑
    1. 报名申请:用户浏览“报名中”赛事,点击“报名”按钮,选择指导老师(下拉关联老师表),填写报名理由(不少于20字),提交后状态设为“待审核”,等待管理员与老师双重审核;
    2. 作品提交:报名审核通过后,用户可上传参赛作品(支持PDF、PPT、代码压缩包,单文件≤10MB),填写作品说明,提交后状态设为“已提交”,不可修改(需管理员驳回后才可重新上传);
    3. 进度跟踪:在“我的报名”页面查看报名状态、审核意见、作品提交状态,报名通过后显示“提交作品”按钮,作品审核后显示审核结果(通过/驳回及理由)。
  • 页面设计
    • 赛事列表区:卡片式展示赛事(含照片、名称、类型、报名截止时间),“报名中”赛事显示“立即报名”按钮;
    • 报名表单区:指导老师下拉框、报名理由文本域、“提交报名”按钮,必填项未填时标红提示;
    • 作品提交区:作品上传框(支持多文件上传)、作品说明文本域、“提交作品”按钮,上传进度实时显示,提交后生成作品提交编号。

3. 专家端:评审打分模块(核心需求模块)

  • 核心逻辑
    1. 任务接收:专家登录后,默认展示“待评审”任务(关联评审分配表,含报名唯一编号、赛事名称、参赛学生、指导老师、作品下载地址);
    2. 打分操作:点击“开始评审”,下载参赛作品查看后,按维度(创新性、完整性、规范性)打分(0-100分),填写评审评语(不少于50字),支持暂存草稿(后续继续编辑);
    3. 结果提交:确认打分无误后提交,评审状态设为“已完成”,同步至管理员端,不可修改;若管理员驳回,状态恢复为“待评审”,需重新打分。
  • 页面设计
    • 任务列表区:表格展示待评审任务的报名编号、赛事名称、参赛学生、分配时间,操作列含“开始评审”“查看详情”按钮;
    • 评审打分区:作品下载链接(点击直接下载)、多维度打分输入框(带数值范围提示)、评审评语文本域、“暂存草稿”“提交评审”按钮;
    • 历史记录区:按时间筛选已完成评审任务,查看打分与评语,支持导出评审记录(Excel格式)。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试验收:全面排查问题,保障答辩顺利

笔者前期未测试“用户重复报名同一赛事”场景,导致出现“同一学生生成多条报名记录”,被导师指出“未做防重复校验”并扣分😥。需针对性完成以下测试:

1. 核心功能测试用例

测试场景操作步骤预期结果
用户重复报名同一赛事用户进入“大学生程序设计竞赛”报名页→已提交报名→再次点击“报名”系统提示“已报名该赛事,不可重复申请”,报名失败
专家超范围打分专家评审时输入105分→点击“提交评审”系统提示“打分需在0-100分区间”,提交失败
赛事报名截止后提交赛事已截止→用户尝试提交报名申请系统提示“该赛事报名已截止,无法提交”,报名失败

2. 兼容性与性能测试

  • 兼容性:测试Chrome、Firefox、Edge、IE11浏览器,修复IE11下表单排版错乱(引入babel-polyfill);测试平板、手机终端,确保赛事报名、作品提交页面无错位;
  • 性能:用Jmeter模拟30个用户同时报名同一赛事,系统响应时间≤2秒,无数据错乱;专家下载5MB参赛作品,耗时≤3秒,打分提交响应时间≤1秒。

3. 测试报告撰写

包含“测试目的、范围、用例、结果、问题总结”,明确已修复问题(如重复报名、超范围打分),结论需说明“核心功能无严重bug,可满足高校竞赛日常管理与流程管控需求”。

六、答辩准备:掌握3个技巧,提升通过率

  1. 演示流程梳理:按“管理员创建赛事→用户报名→老师确认指导→用户提交作品→管理员分配评审→专家打分→管理员发布获奖”演示,每个步骤停顿2秒,让评委清晰看功能流转;
  2. 突出问题解决能力:重点讲“赛事报名与评审分配关联逻辑修复”“重复报名防校验实现”“数据库文件路径存储优化”,比单纯讲技术栈更有说服力;
  3. 提前预判问题:针对“如何保障参赛作品安全”,回答“作品路径加密存储、仅授权专家可下载、提交后不可篡改”;针对“如何确保评审公平”,回答“匿名评审(隐藏学生信息)、打分范围限制、管理员审核打分合理性”。

结语

本文基于Spring Boot+MySQL高校竞赛管理系统的实战经验,核心是“聚焦竞赛核心需求、优先稳定技术、提前排查问题”。毕设无需追求复杂功能(如真实支付、人脸识别),把赛事管理、报名审核、评审打分等核心功能做扎实,即可顺利通过答辩。

若需要核心源码(带注释)、数据库脚本(含测试数据)、ER图模板,可在评论区留言“Spring Boot高校竞赛管理系统”获取;若在模块开发中遇问题,也可留言咨询,笔者将及时回复。

收藏本文,便于开发查阅~ 祝各位同学毕设顺利,轻松毕业!🎉