资讯动态

微信小程序竞赛管理系统毕设源码:Spring Boot+Vue全栈项目实战与避坑指南

发布时间:2026/10/19 5:18:45 来源:尧图企业网站定制
简介本资源面向计算机相关专业毕业生与Java初学者提供一套基于微信小程序的大学生科技竞赛管理系统完整实现方案采用Spring Boot后端、Vue后台页面与MySQL数据库开发环境兼容Eclipse、MyEclipse、STS及IDEAJDK版本为1.8。系统覆盖学生注册、在线报名、竞赛信息与分类管理、公告栏、报名与成绩管理、收藏及个人中心等模块并区分管理员、主办方与学生三类角色适合作为毕业设计选题或课程设计参考。压缩包共1338个文件约77.3MB包含131个Java源码、141个Vue组件、187个JavaScript脚本、92个WXSS与90个WXML小程序页面文件以及PNG、SVG等界面素材另附数据库脚本、论文、开题报告、环境工具包与同框架项目安装教程。已有132人学习可帮助读者快速理解前后端分离与小程序端联调流程掌握从建库到部署的完整思路。1. 从一份“能跑起来”的毕设源码说起这套竞赛管理系统到底值不值得拆每年到了毕设季后台被问得最多的一类问题就是有没有一套能直接跑起来、代码结构还算干净、文档齐全的 Java 毕设项目这套基于微信小程序的大学生科技竞赛管理系统就是被反复问到的那一类。它的技术栈很典型后端 Spring Boot后台管理页面用 Vue前端是微信小程序数据库 MySQLJDK 1.8开发工具 Eclipse、MyEclipse、STS、IDEA 都能开。功能覆盖了竞赛分类、公告、竞赛信息、报名、成绩、收藏、个人中心角色分学生、主办方、管理员三层。我拿到这份资源的第一反应不是看功能列表而是先翻目录里那几个.bak文件和1-install.bat、2-run.bat、3-build.bat。有经验的都知道带.bak备份文件和批处理脚本的项目通常是作者在本地反复调过、能跑通之后才打包的不是那种从别处扒来凑数的空壳。这套东西适合谁适合时间紧、需要一套完整可演示系统撑起答辩的毕业生也适合想拿一个真实三层角色权限项目练手 Spring Boot Vue 小程序全链路的人。接下来我按“能不能用、怎么用、坑在哪”的顺序把它拆开讲。2. 环境与工程结构JDK 1.8 到 MySQL 的落地链路2.1 为什么这套项目锁死在 JDK 1.8 和 Spring Boot 2.x先说要害。这套项目用的是 JDK 1.8这不是随便写的而是和 Spring Boot 版本、MyBatis 或 MyBatis-Plus、以及微信小程序 Java 后端 SDK 的兼容性绑在一起的。Spring Boot 2.x 系列在 JDK 1.8 上最稳升到 JDK 17 之后一些老版本的反射调用、javax包路径、Lombok 版本都会出问题。我一般建议别手贱去升 JDK就用 1.8省掉一堆玄学报错。工程结构上后端是标准的 Maven 多模块或单模块结构src/main/java下按controller、service、mapper、entity分层resources下放application.yml和mapperXML。前端 Vue 部分在独立目录小程序代码在另一个目录。数据库脚本单独一个.sql文件。这种“后端 后台前端 小程序 SQL”四件套的结构是毕设项目里最省心的形态因为每一层都能单独启动、单独排查。提示拿到项目先别急着导入 IDE先确认本机 JDK 版本。命令行敲java -version看到1.8.0_xxx再往下走。2.2 从零把后端跑起来导入、改配置、建库第一步导入工程。IDEA 选File - Open指向项目根目录的pom.xml让它自动下载依赖。Eclipse 或 STS 就选Import - Existing Maven Projects。这一步最容易翻车的地方是 Maven 镜像如果依赖下不动换成国内镜像源再重试。第二步建数据库。用 Navicat 或命令行都行先建一个库字符集选utf8mb4然后执行项目里的 SQL 脚本。# 登录 MySQL 并创建数据库 mysql -u root -p CREATE DATABASE competition_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE competition_db; SOURCE /path/to/your/project/sql/competition_db.sql;第三步改后端配置。打开application.yml把数据库连接改成你自己的spring: datasource: url: jdbc:mysql://localhost:3306/competition_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 你的密码 driver-class-name: com.mysql.cj.jdbc.Driver server: port: 8080这里serverTimezone必须写不写的话 MySQL 8 会报时区错误这是血泪经验。driver-class-name用com.mysql.cj.jdbc.Driver对应 MySQL 8 的驱动如果你装的是 MySQL 5.7驱动类名去掉cj也行但建议统一用 8 的驱动。第四步启动。找到主启动类右键Run。控制台看到Started XxxApplication in x seconds就算成功。如果报Table xxx doesnt exist说明 SQL 没执行全回去补。2.3 后台 Vue 页面和小程序的启动顺序后台 Vue 部分进目录先装依赖再跑cd admin-frontend npm install npm run servenpm install卡住是常态换cnpm或者配淘宝镜像。跑起来后默认在localhost:8081之类具体看vue.config.js里的devServer.port。注意跨域Vue 请求后端 8080如果没配代理浏览器会拦。项目里一般已经在vue.config.js写了proxy没有的话自己补一段。小程序端用微信开发者工具打开改app.js或config.js里的baseUrl指向你本机后端地址。真机调试时localhost不通要换成局域网 IP手机和电脑在同一 WiFi 下。这一步是新手最容易卡住的地方不是代码问题是网络问题。3. 三层角色与核心业务学生报名、主办方管赛、管理员兜底3.1 角色权限是怎么在代码里落地的这套系统的角色分三层学生、主办方、管理员。学生能注册、在线报名、查成绩、收藏主办方管竞赛、看报名、录成绩管理员管用户、分类、公告、系统配置。权限落地方式常见做法是登录后后端返回角色标识前端路由做菜单过滤后端接口做拦截校验。后端一般用一个拦截器或 Spring Security 配置判断当前请求的 token 对应角色有没有访问该接口的权限。小程序端登录后把 token 存storage每次请求带在 header 里。这里有个坑前端隐藏菜单不等于安全接口层必须再校验一次否则学生直接调管理员接口就能越权。毕设答辩时老师很爱问这个点。// 简化的权限拦截逻辑示意 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token request.getHeader(token); if (token null || !jwtUtil.validate(token)) { response.setStatus(401); return false; } String role jwtUtil.getRole(token); String uri request.getRequestURI(); // 管理员接口只允许 admin 角色 if (uri.startsWith(/admin/) !admin.equals(role)) { response.setStatus(403); return false; } return true; }preHandle在 Controller 执行前拦截jwtUtil.validate验签getRole取角色路径前缀判断做粗粒度控制。生产项目会做得更细毕设这个粒度够用。3.2 报名与成绩这条主链路怎么走通核心业务链路是主办方发布竞赛 - 学生看到竞赛信息 - 在线报名 - 主办方审核/录入成绩 - 学生查成绩。这条链路串起了竞赛信息表、报名表、成绩表三张主表。报名接口典型逻辑先查该学生是否已报名同一竞赛防重复再查竞赛是否在报名时间窗口内都通过才插入报名记录。成绩录入后学生端查询走的是成绩表关联报名表再关联竞赛表。-- 查询某学生的竞赛成绩三表关联 SELECT c.competition_name, r.register_time, s.score, s.rank FROM score s JOIN registration r ON s.registration_id r.id JOIN competition c ON r.competition_id c.id WHERE r.student_id #{studentId};registration是报名中间表score挂报名 id这样设计的好处是一个学生可以报多个竞赛成绩互不干扰。如果直接把成绩挂在学生表上多竞赛场景就崩了。这是数据库设计里值得在论文里写一笔的点。3.3 公告、分类、收藏这些“配角”功能的价值很多人觉得公告、分类、收藏是凑数功能其实它们在答辩里是加分项。公告栏体现的是信息发布能力分类管理体现的是数据组织能力收藏体现的是用户粘性设计。而且这几个模块代码简单、逻辑清晰适合拿来演示 CRUD 全流程。收藏功能的实现通常是收藏表存user_id和target_id加type查询时按用户 id 拉列表。分类管理是典型的树形或平铺结构平铺更简单毕设够用。公告一般是富文本或纯文本注意 XSS 过滤虽然毕设不查这么细但论文里提一句会显得专业。4. 避坑与排查那些让项目起不来的常见问题4.1 启动报数据库连接失败现象控制台抛Communications link failure或Access denied for user。原因通常是 MySQL 没启动、端口不对、密码错、或者application.yml里 url 的库名和实际建的不一致。解决先mysql -u root -p手动登一次确认能连再核对 yml 里的url、username、password三处注意 yml 缩进缩进错了配置根本不生效。4.2 前端 npm install 报错或跑起来白屏现象npm install卡在某个包或者npm run serve后页面空白。原因一是网络拉包失败二是 Node 版本过高和项目里的node-sass之类不兼容。解决换镜像源或者把 Node 降到 14/16。白屏的话按 F12 看控制台多半是接口 404 或跨域检查vue.config.js的proxy和后端端口是否对上。4.3 小程序请求后端拿不到数据现象开发者工具里请求失败报request:fail或 404。原因一是baseUrl没改还是模板里的地址二是开发者工具没勾“不校验合法域名”三是真机调试用了localhost。解决改baseUrl为本机 IP工具里勾上不校验域名真机确保同一局域网。这个坑几乎每个人都会踩一次。4.4 中文乱码现象数据库里中文变问号或页面显示乱码。原因数据库字符集不是utf8mb4或连接 url 没带characterEncodingutf8。解决建库时指定utf8mb4url 补上编码参数已经建错的库可以ALTER改字符集但表里已有数据可能要重导。4.5 改了代码不生效现象改了 Java 代码重启没用或改了 Vue 页面刷新没变。原因IDE 没重新编译或者跑的是旧的 target 目录。解决IDEA 里Build - Rebuild ProjectVue 的话确认npm run serve的热更新开着实在不行删node_modules重装。这种问题不涉及逻辑纯粹是缓存但能卡人半小时。5. 进阶玩法把毕设项目改出“可讲的故事”5.1 用批处理脚本一键起环境项目里带了1-install.bat、2-run.bat、3-build.bat这三个脚本是作者留的后悔药。1-install装依赖2-run启动3-build打包。我一般会先读一遍这三个脚本内容确认它调用的命令和当前环境匹配再执行。Windows 下双击即可但要注意脚本里的路径是相对路径还是绝对路径绝对路径换机器就废。# 如果 bat 脚本路径写死手动执行等价命令更稳 mvn clean install -DskipTests mvn spring-boot:run-DskipTests跳过测试加速构建spring-boot:run直接启动。打包成 jar 用mvn package然后java -jar xxx.jar。5.2 把论文和开题报告当成“需求文档”反推功能资源里含论文和开题报告很多人只当交差材料其实可以反过来用先读论文的功能模块章节对照代码找对应实现这样答辩时被问“这个功能怎么实现的”能立刻定位到类和接口。我习惯把论文里的功能点列成表逐个在代码里打勾没实现的要么补要么在答辩时绕开。论文功能点对应代码位置状态学生注册登录UserController / 小程序 login 页已实现在线报名RegistrationController已实现成绩查询ScoreController已实现公告管理NoticeController已实现收藏CollectController已实现5.3 二次开发时优先动哪里如果想让项目看起来更像自己的优先改三个地方一是 UI 配色和 logo成本低见效快二是加一个论文里提到但代码没做的功能比如竞赛推荐或数据统计图表三是把硬编码的常量抽到配置文件。改的时候记住一条先跑通再改改一处测一处别一次性大改否则出了问题不知道是哪改坏的。从那以后我每次拿到这类毕设源码都强制先跑一遍原始版本、确认能起来再动任何一行代码。这个习惯帮我省了无数次“改完起不来又不知道原来能不能起来”的扯皮。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑