毕业设计实战:基于Spring Boot的善筹网设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

60 阅读17分钟

毕业设计实战:基于Spring Boot的善筹网设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

谁懂啊!当初做善筹网毕设时,光用户表和众筹表的关联就卡了3天——一开始没设外键,查某用户参与的众筹记录时数据全串错,导师看了直接让我“重画数据库E-R图”😫 后来踩遍无数坑才摸出一套高效落地流程,今天把需求分析、技术选型、功能实现到测试的细节全说透,宝子们不用再熬夜改代码,轻松搞定毕设!

一、先搞懂“善筹网要啥”!需求分析别瞎蒙

刚开始我跳过需求分析就写代码,花两周加了个“众筹直播带货功能”,结果导师一句“核心是众筹管理与商品交互,不是直播”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走90%弯路。

1. 核心用户&功能拆解(踩坑后总结版)

善筹网就两类核心用户:管理员普通用户(别加“访客角色”!我当初加了后,权限逻辑混乱,未登录就能删众筹留言,最后砍掉才顺畅):

  • 管理员端(必做功能):
    • 众筹管理:查看众筹列表(按状态/类型筛选)、新增众筹(填金额/时间/商品关联)、修改众筹状态(下拉框选“正在众筹/众筹成功/已截止”)、删除无效众筹(支持批量操作,效率翻倍)
    • 商品管理:维护商品信息(传图片/填原价现价/选类型)、修改商品上架状态、删除淘汰商品(带逻辑删除,避免误删数据)
    • 用户管理:查看用户列表、重置用户密码、统计用户参与众筹次数(支持按姓名/手机号模糊查,我当初没加,查用户要翻几十页)
    • 互动管理:审核众筹留言、回复商品留言、管理用户收藏(标红未回复留言,避免遗漏)
  • 用户端(核心功能):
    • 众筹参与:浏览众筹列表(按热度/截止时间排序)、查看众筹详情(含已筹金额/进度条)、提交参与金额(关联个人账户余额,自动扣减)
    • 商品交互:查看商品详情、收藏心仪商品、发表商品留言(支持上传图片辅助说明)
    • 个人中心:修改个人信息(头像/手机号/收货地址)、查看参与记录(众筹进度/物流状态)、管理我的收藏(按类型分类,方便查找)

2. 需求分析避坑指南(血泪教训!)

  • 别光靠“空想”!找2个同学模拟管理员和用户提意见:比如有用户说“想快速看众筹进度”,我才加了“进度条+百分比显示”,比瞎加“直播功能”实用多了
  • 一定要画用例图!用DrawIO画简单版,标清“管理员-审核众筹”“用户-参与众筹”,跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听20分钟还没get到逻辑)
  • 写“需求规格说明书”!不用复杂,把“功能描述、约束条件”写清楚(比如“众筹总额不能小于已筹金额”“商品图片仅支持JPG/PNG”),编码时对着做,不会跑偏

3. 可行性分析别敷衍!3点写清楚就能过

导师超爱问“你这系统可行吗”,别只说“我觉得可行”,从3个角度写,显得专业:

  • 技术可行性:Spring Boot、Java、MySQL都是课堂学过的,图书馆有《Spring Boot实战》《MySQL从入门到精通》,遇到问题能查资料(别选Vue3!我当初想试,组件通信逻辑不熟,卡了一周,换回Vue2才顺利)
  • 经济可行性:所有工具全免费!IDEA(社区版)、MySQL、Navicat(试用版)、Vue CLI官网直接下,不用花钱买版权,答辩时说“开发成本为0”,导师会觉得你懂成本控制
  • 操作可行性:界面参考主流众筹平台(如京东众筹),按钮布局简洁,我找系里同学测试,3分钟就学会参与众筹,导师直接认可

二、技术选型别跟风!这套组合稳到爆

刚开始我跟风用Spring Boot+Vue3+Redis,结果“众筹数据缓存”卡了5天——Redis的过期策略没设对,新发起的众筹刷不出来😫 后来换成Spring Boot+Vue2+MySQL+Tomcat9,新手友好度拉满,调试效率翻两倍!

1. 技术栈详细对比(附避坑提醒)

宝子们别盲目选“最新技术”,稳定比炫酷重要!我整理了5个核心工具的选择理由和坑点,直接抄:

技术工具为啥选它避坑提醒!(重点!)
Spring Boot比SSM配置简单,自带依赖管理,开发效率高别用3.x版本!2.7.x就行,3.x和Vue2兼容性差,会报“接口请求404错误”
MySQL 8.0占内存小,存用户、众筹、商品数据足够用安装时设“utf8mb4”编码!我当初用默认编码,用户姓名含生僻字乱码,查2小时才解决
Tomcat 9.0稳定!和Spring Boot、Vue适配最好,支持热部署别用Tomcat 10!会出现“Servlet API包名变更”,答辩时系统崩了就完了
Vue 2文档丰富,新手易上手,组件生态成熟(如Element UI)别用Vue CLI 5!用4.x版本,5.x创建项目时依赖加载慢,还容易报“node-sass错误”
Java 1.8兼容性强,所有主流框架都支持,避免版本冲突别用Java 11+!部分老教材案例基于1.8,遇到问题难查资料

2. 开发环境搭建(step by step 实操)

很多宝子卡在“环境配置”,跟着步骤来超简单,我当初一次成功:

  1. 装JDK 1.8:记住安装路径(比如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”环境变量别写错,不然IDEA认不到JDK
  2. 装IDEA(社区版):选“Community Edition”,免费够用,首次打开勾选“Spring Boot”“Maven”插件,自动安装
  3. 装MySQL 8.0:用Navicat管理(可视化工具超方便,新建表直接选字段类型,比命令行快10倍),新建数据库“shanchouwang”,编码设“utf8mb4”
  4. 配Vue项目:用Vue CLI 4创建项目(命令:vue create shanchou-frontend),勾选“Router”“Vuex”“CSS Pre-processors”,启动后看到“Compiled successfully”就是成功

3. 架构图一定要画!答辩加分项

用DrawIO画三层架构图(像论文里的“系统架构图”),标清“表现层-业务层-数据访问层”:比如用户点“参与众筹”→Vue页面传请求→Spring Boot Controller接收请求→Service校验余额→Mapper将数据存入MySQL。去年答辩时,评委特意夸这图“逻辑清晰”,比光说“我用了Spring Boot”专业多了!

三、数据库设计:别让表关联坑了你

这部分是毕设的“核心骨架”,我当初没关联“用户表”和“参与的众筹表”,查“某用户的所有众筹记录”要写3层嵌套SQL,调试到凌晨1点😫 后来按“实体-属性-关系”设计,终于理清了。

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

先确定“实体”(用户、众筹、商品、留言),再想“属性”,别漏关键字段!我整理了必做的8张表,直接照着画ER图:

  • 用户表(yonghu):id(主键)、yonghu_name(姓名)、yonghu_phone(手机号,唯一)、yonghu_photo(头像路径)、new_money(余额)、create_time(创建时间)
  • 商品表(shangpin):id(主键)、shangpin_name(名称)、shangpin_photo(图片路径)、shangpin_old_money(原价)、shangpin_new_money(现价)、shangxia_types(是否上架)
  • 众筹表(zhongchou):id(主键)、yonghu_id(关联用户,外键)、shangpin_id(关联商品,外键)、zhongchou_name(名称)、yichou_money(已筹金额)、zhongchou_money(总额)、jieshu_time(截止时间)
  • 参与的众筹表(canyu_zhongchou):id(主键)、yonghu_id(关联用户)、zhongchou_id(关联众筹)、canyu_jine(参与金额)、canyu_time(参与时间)

画ER图用Visio或亿图,记住3个规则:

  1. 矩形代表“实体”(比如“用户”“众筹”)
  2. 椭圆代表“属性”(比如用户的“姓名”“余额”)
  3. 菱形代表“关系”(比如“用户-参与-众筹”是一对多,一个用户能参与多个众筹,一个众筹能被多个用户参与;“商品-关联-众筹”是一对一,一个众筹关联一个商品) 避坑提醒:别把“用户头像、商品图片”存数据库!我当初存二进制导致数据库崩溃,改成存“文件路径”(比如/static/photo/shangpin1.jpg)才对。

2. 数据库物理设计(附建表SQL示例)

ER图画好后,转成实际表,字段类型和约束别瞎设!比如“众筹名称”用VARCHAR(200),别用TEXT,不然查询速度慢;“用户手机号”设UNIQUE约束,避免重复注册。

给宝子们贴“众筹表”的建表SQL,复制到Navicat就能用:

CREATE TABLE `zhongchou` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '众筹ID',
  `yonghu_id` INT DEFAULT NULL COMMENT '关联用户ID(外键)',
  `shangpin_id` INT DEFAULT NULL COMMENT '关联商品ID(外键)',
  `zhongchou_uuid_number` VARCHAR(50) DEFAULT NULL COMMENT '众筹编号',
  `zhongchou_name` VARCHAR(200) NOT NULL COMMENT '众筹名称',
  `zhongchou_types` INT DEFAULT NULL COMMENT '众筹类型(1-公益,2-产品)',
  `zhongchou_kucun_number` INT DEFAULT NULL COMMENT '众筹数量',
  `yichou_money` DECIMAL(10,2) DEFAULT 0.00 COMMENT '已筹金额',
  `zhongchou_money` DECIMAL(10,2) NOT NULL COMMENT '众筹总额',
  `zhongchou_clicknum` INT DEFAULT 0 COMMENT '热度',
  `zhongchou_zhuangtai_types` INT DEFAULT 1 COMMENT '众筹状态(1-正在众筹,2-众筹成功,3-已截止)',
  `jieshu_time` DATETIME DEFAULT NULL COMMENT '众筹截止时间',
  `zhongchou_content` TEXT DEFAULT NULL COMMENT '众筹详情',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `fk_yonghu_zhongchou` (`yonghu_id`), -- 外键关联用户表
  KEY `fk_shangpin_zhongchou` (`shangpin_id`), -- 外键关联商品表
  UNIQUE KEY `uk_zhongchou_uuid` (`zhongchou_uuid_number`) -- 众筹编号唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='众筹表';

3. 表关联测试!别等编码才发现错

建完表一定要测关联!比如在“参与的众筹表”插数据(用户ID=1,众筹ID=1,参与金额=100),用JOIN查询“某用户的众筹参与记录”:

SELECT u.yonghu_name, z.zhongchou_name, c.canyu_jine, c.canyu_time, z.yichou_money, z.zhongchou_money
FROM canyu_zhongchou c
JOIN yonghu u ON c.yonghu_id = u.id
JOIN zhongchou z ON c.zhongchou_id = z.id
WHERE u.id = 1;

如果能查出“用户名+众筹名称+参与金额+参与时间+已筹/总额”,说明关联没问题;如果报错“Unknown column”,大概率是外键没设对,赶紧检查表结构。

四、功能实现:核心模块操作+页面设计

不用做所有功能!先搞定3个核心模块,答辩时足够出彩。每个模块我都附关键操作逻辑和页面设计要点,宝子们直接套就行。

1. 管理员端:众筹管理模块(必做!)

这是管理员的核心功能,实现“新增众筹、修改状态、删除众筹”,重点说“金额校验”和“商品关联”——别漏这两步,我当初就是这里踩了大坑!

(1)关键操作逻辑
  1. 新增众筹前,先校验“众筹总额>0”“截止时间>当前时间”(避免无效数据);
  2. 关联商品时,仅显示“已上架”的商品(下拉框加载,不用手动输ID);
  3. 修改众筹状态为“众筹成功”时,自动校验“已筹金额≥总额”,不满足则提示“未达目标金额,无法标记成功”。
(2)页面设计要点(Vue+Element UI)

页面标题:管理员-众筹管理页面
(插入图片位置:此处放“众筹管理页面截图”,需包含以下元素)

  • 筛选条件:众筹状态(下拉框)、众筹类型(下拉框)、众筹名称(模糊查)、时间范围(截止时间筛选)
  • 众筹列表表格:列名“众筹编号、名称、商品、已筹/总额、热度、状态、截止时间、操作”,状态“正在众筹”标蓝色,“众筹成功”标绿色,“已截止”标灰色
  • 操作按钮:“新增众筹”(蓝色el-button--primary)、“修改”(橙色el-button--warning)、“删除”(红色el-button--danger)、“查看详情”(灰色el-button)
  • 新增/修改弹窗:含众筹所有属性输入框,商品关联用下拉框,截止时间用日期选择器(禁用过去时间)
(3)避坑提醒
  • 禁止众筹总额≤0!加校验逻辑:
    if (zhongchou.getZhongchouMoney().compareTo(new BigDecimal("0")) <= 0) {
        return Result.error("众筹总额必须大于0!");
    }
    
  • 删除众筹前先查参与记录!避免数据混乱:
    LambdaQueryWrapper<CanyuZhongchou> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(CanyuZhongchou::getZhongchouId, zhongchouId);
    if (canyuZhongchouService.count(wrapper) > 0) {
        return Result.error("该众筹已有用户参与,无法删除!");
    }
    

2. 用户端:众筹参与模块(核心需求!)

用户用系统的核心是“参与众筹”,流程别复杂:看详情→填金额→确认支付,我当初加“多级支付验证”,代码量翻倍,其实“余额校验+一次确认”更实用。

(1)关键操作逻辑
  1. 参与众筹前,校验“用户余额≥参与金额”(不足则提示“余额不足,请充值”);
  2. 填写参与金额时,限制“≥1元且≤众筹剩余金额”(避免超额参与);
  3. 确认参与后,自动扣减用户余额,同步增加众筹“已筹金额”和“热度”。
(2)页面设计要点(Vue+Element UI)

页面标题:众筹详情-参与页面
(插入图片位置:此处放“众筹参与页面截图”,需包含以下元素)

  • 众筹信息区:商品图片、众筹名称、众筹详情(富文本显示)、进度条(含已筹百分比)、已筹/总额、剩余时间、热度
  • 参与操作区:
    • 参与金额输入框(默认100元,提示“请输入1-XXX元”)
    • 余额提示(显“当前余额:XXX元”,不足时标红)
    • 确认按钮(蓝色el-button--primary,禁用条件:金额为空/余额不足)
  • 参与记录区:显示“其他用户参与记录”,含用户名(脱敏显示)、参与金额、参与时间
(3)避坑提醒
  • 防止余额超扣!加事务控制:
    @Transactional
    public Result canyuZhongchou(Integer yonghuId, Integer zhongchouId, BigDecimal jine) {
        // 扣减用户余额
        Yonghu yonghu = yonghuService.getById(yonghuId);
        yonghu.setNewMoney(yonghu.getNewMoney().subtract(jine));
        yonghuService.updateById(yonghu);
        // 增加众筹已筹金额
        Zhongchou zhongchou = zhongchouService.getById(zhongchouId);
        zhongchou.setYichouMoney(zhongchou.getYichouMoney().add(jine));
        zhongchou.setZhongchouClicknum(zhongchou.getZhongchouClicknum() + 1);
        zhongchouService.updateById(zhongchou);
        // 新增参与记录
        CanyuZhongchou canyu = new CanyuZhongchou();
        canyu.setYonghuId(yonghuId);
        canyu.setZhongchouId(zhongchouId);
        canyu.setCanyuJine(jine);
        canyu.setCanyuTime(new Date());
        canyuZhongchouService.save(canyu);
        return Result.success("参与众筹成功!");
    }
    

3. 管理员端:商品管理模块(答辩亮点!)

这个功能最能体现“管理属性”,导师超爱问!核心是“维护商品信息、控制上架状态”,别漏“商品关联众筹统计”,不然管理员没法掌握商品热度。

页面设计要点

页面标题:管理员-商品管理页面
(插入图片位置:此处放“商品管理页面截图”,需包含以下元素)

  • 筛选条件:商品类型(下拉框)、是否上架(下拉框)、商品名称(模糊查)
  • 商品列表表格:列名“商品编号、名称、图片、原价/现价、类型、上架状态、关联众筹数、操作”,上架状态“是”标绿色,“否”标灰色
  • 操作按钮:“新增商品”(蓝色btn-primary)、“修改”(橙色btn-warning)、“上架/下架”(切换按钮,上架显绿色,下架显灰色)、“查看关联众筹”(灰色btn-default)
  • 商品统计弹窗:点“查看关联众筹”弹出,显“该商品关联的众筹列表”,含众筹名称、已筹金额、状态,支持按状态筛选 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试别敷衍!这3步让答辩不翻车

很多宝子觉得“功能能跑就行”,结果答辩时评委一测就出问题!我当初没测“众筹截止自动改状态”,导致截止时间到了众筹还显示“正在众筹”,导师说“不符合业务逻辑”,当场扣分😫 测试一定要针对性做!

1. 功能测试(必测3个模块)

别全测!重点测“核心功能”,我整理了测试用例表,直接填结果:

(1)众筹参与测试(表1:众筹参与测试用例)
测试场景操作步骤预期结果实际结果测试结论
余额不足参与用户余额50元→参与众筹填100元→提交提示“余额不足,请充值!”
参与金额超剩余额度众筹剩余金额80元→填100元→提交提示“参与金额不能超过剩余额度80元!”
正常参与余额200元→填50元→提交提示“参与众筹成功!”,余额扣减50元,众筹已筹金额增加50元
(2)众筹状态修改测试(表2:众筹状态测试用例)
测试场景操作步骤预期结果实际结果测试结论
未达目标标成功已筹500元,总额1000元→改状态为“众筹成功”提示“未达目标金额,无法标记成功!”
截止时间未到标截止截止时间为明天→改状态为“已截止”提示“未到截止时间,无法标记截止!”
正常改状态已筹1000元,总额1000元→改状态为“众筹成功”提示“状态修改成功!”,众筹状态显“众筹成功”
(3)用户登录测试(表3:登录测试用例)
测试场景操作步骤预期结果实际结果测试结论
密码错误账号:user1→密码:12345(正确123456)→登录提示“账号或密码不正确!”
未填手机号账号:空→密码:123456→登录提示“请输入手机号!”
正常登录(用户角色)账号:13800138000→密码:123456→登录登录成功,跳用户首页
正常登录(管理员角色)账号:admin→密码:admin123→登录登录成功,跳管理员首页

2. 兼容性测试(容易忽略的点)

别只在自己电脑测!答辩时评委可能用不同浏览器,我当初没测IE,结果众筹进度条显示错乱,赶紧加兼容性CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(别让页面出现横向滚动条,用Element UI的响应式布局)

3. 测试报告要写好!答辩加分

把测试结果整理成“测试报告”,含“目的、范围、用例、结果、问题总结”,导师会觉得你“做事严谨”。比如:

  • 问题总结:“IE浏览器下众筹进度条错乱,通过引入兼容JS修复;未登录用户能访问管理员页面,加Spring Security拦截器控制”
  • 测试结论:“核心功能(众筹参与、状态修改、登录)均通过测试,无严重bug;兼容性问题已修复,系统可正常使用”

六、答辩准备:3个加分小技巧

毕设不仅要做出来,还要说清楚!我当初准备了这3点,导师直接给“良好”:

  1. 演示流程要顺畅:提前录演示视频(怕现场系统崩),按“管理员新增商品→管理员新增众筹→用户登录参与众筹→管理员查看数据”的流程来,别跳步
  2. 重点讲“你解决了啥问题”:比如“一开始商品图片存数据库加载慢,改成存路径后,加载速度提升60%;用户参与众筹余额超扣,用事务控制解决”,比光说“我用了Spring Boot”有亮点
  3. 准备常见问题:导师大概率问“为啥选MySQL不选Oracle”“众筹数据多了怎么优化”,提前答:“MySQL轻量适合中小型众筹系统;数据多就加索引(如众筹表的jieshu_time索引),优化查询速度”

最后:毕设通关的小私心

以上就是基于Spring Boot的善筹网从0到1的避坑干货!毕设没那么难,关键是找对方法,别瞎做复杂功能。

需要核心源码(带注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“善筹网”,我私发你;卡在某个模块(比如众筹参与、商品关联),也可以留言,我看到必回!

点赞收藏这篇,下次找流程不迷路~祝宝子们毕设顺利,轻松毕业!😘