基于Spring Boot的二手车交易系统毕设稳过秘籍!从需求到测试全流程,新手也能抄作业✨

49 阅读18分钟

基于Spring Boot的二手车交易系统毕设稳过秘籍!从需求到测试全流程,新手也能抄作业✨

谁懂啊!去年做二手车交易系统毕设时,光汽车表和商家表的关联就卡了4天——一开始没设外键,查某商家名下的汽车时全是错乱数据,导师看了直接让我“重画ER图”😫 后来踩遍坑才摸出一套能快速落地的流程,今天把需求分析、技术选型、功能实现到测试的全细节说透,宝子们再也不用熬夜改代码,轻松搞定毕设!

一、先搞懂“用户要啥”!需求分析别瞎蒙

刚开始我直接跳过需求分析就写代码,结果做了半个月的“汽车试驾预约”功能,导师一句“核心是交易信息管理,不是试驾服务”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走80%弯路。

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

二手车交易系统有三类核心用户:管理员商家普通用户(别加“中介角色”!我当初加了后,权限逻辑乱成一团,最后砍掉才轻松):

  • 管理员端(必做功能):
    • 商家管理:新增/审核商家、修改商家信息、重置商家密码(别漏“商家资质审核”!我当初没加,导致虚假商家入驻,全是投诉)
    • 汽车管理:查看所有汽车信息、下架违规汽车、统计汽车上架数量(支持“按品牌筛选”,比如“宝马/丰田”,别让管理员手动翻页找)
    • 论坛管理:删除违规帖子、审核精华帖、查看用户评论(要支持“批量删除”,不然删几十条帖子点到手软)
    • 公告管理:发布交易规则公告、修改公告内容、删除过期公告(公告标题要加粗显示,重要信息别被忽略)
  • 商家端(核心功能):
    • 汽车管理:新增汽车信息、上传汽车照片、设置汽车价格/库存(别让商家填太多!只留“品牌+型号+车况+价格”,我当初加了“保养记录”,商家嫌麻烦)
    • 留言管理:查看用户对汽车的留言、回复咨询、删除恶意留言(要显示“留言时间”,方便商家按时间顺序回复)
    • 收藏管理:查看哪些用户收藏了汽车、推送优惠信息(支持“一键导出收藏用户列表”,商家做营销超方便)
  • 用户端(核心功能):
    • 汽车浏览:按品牌/价格筛选汽车、查看汽车详情、点赞/踩汽车(详情页要放高清照片,至少3张,我当初只放1张,用户说“看不清车况”)
    • 论坛互动:发布购车经验帖、评论他人帖子、收藏有用内容(帖子要标“发布人身份”,比如“商家/普通用户”,避免误导)
    • 公告查看:浏览最新交易规则、搜索历史公告(支持“按时间筛选”,方便用户查“2024年新规”)

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

  • 别光靠“想”!找2个同学模拟商家和用户提意见:比如有同学说“想快速找到收藏的汽车”,我才加了“个人收藏夹”功能,比自己瞎加实用多了
  • 一定要画用例图!用DrawIO画简单版就行,标清“管理员-审核商家”“商家-新增汽车”,后期跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听了15分钟还没get到我的逻辑)
  • 写“需求规格说明书”!不用太复杂,把“功能描述、约束条件”写清楚(比如“汽车价格不能为0”“帖子内容不能含敏感词”),后期编码时对着做,不会跑偏

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

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

  • 技术可行性:Spring Boot、Java、MySQL都是课堂学过的,图书馆有《Spring Boot实战》《MySQL数据库应用》,遇到问题能查资料(别选Vue3!我当初想试试,结果环境配置卡了一周,最后换回JSP才顺利)
  • 经济可行性:所有工具都是免费的!IDEA(社区版)、MySQL、Tomcat全是官网下载,不用花钱买版权,答辩时说“开发成本为0”,导师会觉得你会控制成本
  • 操作可行性:界面用Bootstrap做,按钮布局跟二手车平台(比如瓜子二手车)类似,我找系里老师测试,她4分钟就学会了上架汽车,导师直接认可

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

刚开始我跟风用Spring Boot+Vue+Redis,结果“汽车照片缓存”卡了5天——Redis的key-value存储逻辑不熟,照片总是加载失败😫 后来换成Spring Boot+JSP+MySQL+Tomcat9,新手友好度直接拉满,调试效率翻了倍!

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

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

技术工具为啥选它避坑提醒!(重点!)
Spring Boot比SSM配置简单,自带依赖管理,不用手动整合别用3.x版本!2.7.x就行,3.x和JSP兼容性差,会报“视图解析器错误”
MySQL 8.0占内存小,存储汽车/商家数据足够用安装时一定要设“utf8mb4”编码!我当初用默认编码,汽车名称含特殊符号时乱码,查了3小时才解决
Tomcat 9.0稳定!和Spring Boot、JSP适配性最好别用Tomcat 10!会出现“Servlet API包名变更”问题,答辩时崩了就完了
JSP+Bootstrap不用单独学前端框架,上手快Bootstrap用3.x版本!4.x版本按钮样式错乱,汽车列表页会变成“竖排”,巨丑

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

很多宝子卡在“环境配置”,其实跟着步骤来超简单,我当初就是这么搭的,一次成功:

  1. 装JDK 1.8:记住安装路径(比如D:\Java\jdk1.8.0_301),配置环境变量时“JAVA_HOME”要填对,不然IDEA认不到
  2. 装IDEA(社区版):选“Community Edition”,免费且够用,自带Spring Boot插件,不用手动装
  3. 装MySQL 8.0:用Navicat管理数据库(可视化工具超方便,新建表时直接选字段类型,比命令行快10倍)
  4. 配置Spring Boot项目:在IDEA里选“Spring Initializr”,勾选“Spring Web”“MySQL Driver”“MyBatis Framework”,启动时看到“Started Application in XXX seconds”就是成功

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

用DrawIO画三层架构图(就像论文里的“图2.1 系统架构图”),标清“表现层-业务层-数据访问层”的交互逻辑:比如商家在浏览器新增汽车→Controller接收请求→Service处理数据→Mapper操作MySQL存储汽车信息。去年答辩时,评委特意夸这个图“逻辑清晰”,比光说“我用了Spring Boot”专业多了!

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

这部分是毕设的“核心骨架”,我当初把“汽车表”和“商家表”没做关联,查“某商家的汽车”时要写3层嵌套SQL,调试到凌晨2点😫 后来按“实体-属性-关系”来设计,终于理清了。

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

先确定系统里的“实体”(比如商家、汽车、用户),再想每个实体有啥“属性”,别漏关键字段!我整理了必做的8张表,直接照着画ER图:

  • 商家表(shangjia):id(主键)、username(账号,唯一)、password(密码,MD5加密!不然存明文,导师会说“不安全”)、shangjia_name(商家名称)、shangjia_phone(联系方式)、shangjia_email(邮箱)
  • 汽车表(cheliang):id(主键)、shangjia_id(关联商家表)、cheliang_name(汽车名称)、cheliang_photo(照片路径)、cheliang_types(品牌)、cheliang_new_money(价格)、stock(库存)
  • 用户表(yonghu):id(主键)、username(账号)、password(密码)、yonghu_name(姓名)、yonghu_phone(手机号)、yonghu_id_number(身份证号,唯一)
  • 汽车留言表(cheliang_liuyan):id(主键)、cheliang_id(汽车)、yonghu_id(用户)、cheliang_liuyan_text(留言内容)、insert_time(留言时间)、reply_text(回复内容)
  • 汽车收藏表(cheliang_collection):id(主键)、cheliang_id(汽车)、yonghu_id(用户)、insert_time(收藏时间)
  • 论坛表(forum):id(主键)、forum_name(帖子标题)、yonghu_id(用户)、shangjia_id(商家)、forum_content(帖子内容)、insert_time(发帖时间)
  • 公告表(news):id(主键)、news_name(公告标题)、news_types(公告类型)、news_content(公告内容)、insert_time(发布时间)
  • 管理员表(admin):id(主键)、username(账号)、password(密码)、role(角色)、addtime(新增时间)

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

  1. 矩形代表“实体”(比如“商家”“汽车”)
  2. 椭圆代表“属性”(比如商家的“名称”“联系方式”)
  3. 菱形代表“关系”(比如“商家-上架-汽车”是一对多,一个商家能上架多辆汽车,一辆汽车只属于一个商家) 避坑提醒:别把“汽车照片”存数据库!我当初直接存图片二进制,数据库炸了,后来改成存“文件路径”(比如/static/photos/car1.jpg)才对。

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

ER图画好后,要转成实际的数据库表,字段类型和约束别瞎设!比如“汽车价格”要用DECIMAL(10,2),别用INT,不然没法存“10.5万”;“商家账号”要设UNIQUE约束,避免重复。

给宝子们贴一段“汽车表”的建表SQL,直接复制到Navicat就能用:

CREATE TABLE `cheliang` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '汽车ID',
  `shangjia_id` INT DEFAULT NULL COMMENT '关联商家ID',
  `cheliang_name` VARCHAR(200) NOT NULL COMMENT '汽车名称',
  `cheliang_photo` VARCHAR(200) DEFAULT NULL COMMENT '汽车照片路径',
  `cheliang_types` INT DEFAULT NULL COMMENT '汽车品牌:1宝马/2丰田/3本田',
  `cheliang_new_money` DECIMAL(10,2) NOT NULL COMMENT '汽车价格',
  `stock` INT NOT NULL DEFAULT 0 COMMENT '库存数量',
  `cheliang_content` TEXT DEFAULT NULL COMMENT '汽车详情',
  `shangxia_types` INT DEFAULT 1 COMMENT '是否上架:0下架/1上架',
  `cheliang_delete` INT DEFAULT 0 COMMENT '逻辑删除:0正常/1删除',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `fk_shangjia` (`shangjia_id`), -- 外键关联商家表
  UNIQUE KEY `uk_cheliang_name` (`cheliang_name`) -- 汽车名称唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='汽车表';

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

建完表一定要测试关联是否正常!比如在“汽车表”插入一条数据(商家ID=1),然后用JOIN查询:

SELECT s.shangjia_name, c.cheliang_name, c.cheliang_new_money, c.shangxia_types
FROM cheliang c
JOIN shangjia s ON c.shangjia_id = s.id
WHERE s.id = 1;

如果能查出“商家名称+汽车名+价格+上架状态”,说明关联没问题;如果报错“Unknown column”,大概率是外键没设对,赶紧检查表结构。

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

不用做所有功能!先搞定4个核心模块,答辩时足够出彩。每个模块我都附了代码片段和页面设计要点,宝子们直接套就行。

1. 商家端:汽车管理模块(必做!)

这是商家最常用的功能,主要实现“新增汽车、修改汽车信息、上架/下架汽车”,重点说“汽车上架”的逻辑——别漏了“库存校验”,我当初就是这里踩了大坑!

(1)核心代码片段(Spring Boot)

Service层(处理汽车上架):

@Service
public class CheliangServiceImpl implements CheliangService {
    @Autowired
    private CheliangMapper cheliangMapper;
    @Autowired
    private ShangjiaMapper shangjiaMapper;

    @Override
    @Transactional // 事务管理,确保数据一致性
    public void addCheliang(Cheliang cheliang, Integer shangjiaId) {
        // 1. 校验商家是否存在
        Shangjia shangjia = shangjiaMapper.selectById(shangjiaId);
        if (shangjia == null) {
            throw new RuntimeException("商家不存在,无法上架汽车!");
        }
        // 2. 校验汽车名称是否重复
        if (cheliangMapper.existsByName(cheliang.getCheliangName()) > 0) {
            throw new RuntimeException("该汽车名称已存在,请修改!");
        }
        // 3. 校验库存不能为负
        if (cheliang.getStock() < 0) {
            throw new RuntimeException("库存不能为负数!");
        }
        // 4. 关联商家,设置默认状态(上架)
        cheliang.setShangjiaId(shangjiaId);
        cheliang.setShangxiaTypes(1); // 1表示上架
        cheliang.setCreateTime(new Date());
        // 5. 保存汽车信息
        cheliangMapper.insert(cheliang);
    }
}

Controller层(接收前端请求):

@Controller
@RequestMapping("/shangjia/cheliang")
public class ShangjiaCheliangController {
    @Autowired
    private CheliangService cheliangService;

    @PostMapping("/add")
    public String addCheliang(Cheliang cheliang, HttpSession session, HttpServletRequest request) {
        // 获取当前登录商家ID
        Shangjia shangjia = (Shangjia) session.getAttribute("loginShangjia");
        if (shangjia == null) {
            return "redirect:/shangjia/login";
        }
        try {
            cheliangService.addCheliang(cheliang, shangjia.getId());
            request.setAttribute("msg", "汽车上架成功!");
        } catch (Exception e) {
            request.setAttribute("msg", e.getMessage());
            return "shangjia/cheliang/add"; // 失败返回添加页
        }
        return "redirect:/shangjia/cheliang/list"; // 成功跳列表页
    }
}
(2)页面设计要点(Bootstrap)

页面标题:商家-汽车上架页面
(插入图片位置:此处放“汽车上架页面截图”,需包含以下元素)

  • 表单元素:
    • 汽车名称(输入框,必填,提示“如:2023款宝马3系”)
    • 汽车品牌(下拉框:宝马/丰田/本田,必填)
    • 汽车价格(数字输入框,保留2位小数,必填)
    • 库存数量(数字输入框,默认1,必填)
    • 汽车照片(文件上传框,支持JPG/PNG,提示“建议上传3张,尺寸800*600”)
    • 汽车详情(文本域,选填,提示“描述车况、里程、保养记录”)
  • 按钮:“确认上架”(绿色btn-success)和“重置”(灰色btn-default)
  • 提示信息:红色字体显示“上架失败”,绿色显示“上架成功”
(3)避坑提醒
  • 照片上传要限制大小!在application.properties配置:
    spring.servlet.multipart.max-file-size=10MB
    spring.servlet.multipart.max-request-size=20MB
    
  • 汽车下架要先查关联数据!如果汽车有用户收藏,要提示商家:
    if (collectionMapper.countByCheliangId(cheliang.getId()) > 0) {
        request.setAttribute("msg", "该汽车有用户收藏,下架前请通知用户!");
        return "redirect:/shangjia/cheliang/list";
    }
    

2. 用户端:汽车留言模块(核心需求!)

用户用系统就是为了“咨询车况、交流经验”,这个功能别搞复杂!流程要简单:查看汽车→提交留言→看商家回复,我当初加了“留言点赞”功能,代码量翻倍,其实“纯文本留言”更实用。

(1)核心代码片段

Controller层(处理留言提交):

@Controller
@RequestMapping("/yonghu/liuyan")
public class YonghuLiuyanController {
    @Autowired
    private CheliangLiuyanService liuyanService;
    @Autowired
    private CheliangMapper cheliangMapper;

    @PostMapping("/add")
    public String addLiuyan(CheliangLiuyan liuyan, HttpSession session, HttpServletRequest request) {
        // 1. 获取当前登录用户
        Yonghu yonghu = (Yonghu) session.getAttribute("loginYonghu");
        if (yonghu == null) {
            return "redirect:/yonghu/login";
        }
        // 2. 校验汽车是否存在
        Cheliang cheliang = cheliangMapper.selectById(liuyan.getCheliangId());
        if (cheliang == null) {
            request.setAttribute("msg", "该汽车已下架,无法留言!");
            return "redirect:/yonghu/cheliang/detail?id=" + liuyan.getCheliangId();
        }
        // 3. 设置留言信息
        liuyan.setYonghuId(yonghu.getId());
        liuyan.setInsertTime(new Date());
        liuyan.setReplyText(""); // 初始无回复
        // 4. 保存留言
        liuyanService.insert(liuyan);
        request.setAttribute("msg", "留言成功,商家将尽快回复!");
        return "redirect:/yonghu/cheliang/detail?id=" + liuyan.getCheliangId();
    }
}
(2)页面设计要点

页面标题:用户-汽车详情&留言页面
(插入图片位置:此处放“汽车详情&留言页面截图”,需包含以下元素)

  • 汽车详情区:
    • 汽车照片(轮播图,至少3张)
    • 基础信息表格:品牌、型号、价格、库存、车况描述
    • 点赞/踩按钮(显示当前点赞数)
  • 留言区:
    • 留言输入框(文本域,必填,提示“请输入您的问题,如:这辆车的里程数是多少?”)
    • “提交留言”按钮(蓝色btn-primary)
    • 历史留言列表:显示用户姓名、留言内容、留言时间、商家回复(回复内容标蓝,区分留言)
(3)避坑提醒
  • 未登录用户不能留言!加拦截器判断:
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Yonghu yonghu = (Yonghu) request.getSession().getAttribute("loginYonghu");
        if (yonghu == null) {
            response.sendRedirect("/yonghu/login");
            return false;
        }
        return true;
    }
    
  • 留言内容不能为空!前端加校验:
    function checkLiuyan() {
        let content = document.getElementById("liuyanText").value;
        if (content.trim() === "") {
            alert("请输入留言内容!");
            return false;
        }
        return true;
    }
    

3. 管理员端:商家管理模块(提升专业性)

管理员需要“管控商家资质”,这个功能能体现系统的“安全性”,答辩时多提一句,导师会觉得你考虑周全。

页面设计要点

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

  • 筛选条件:按“商家名称”模糊查询、按“审核状态”下拉筛选(待审核/已通过/已拒绝)
  • 商家列表表格:
    • 列名:商家名称、账号、联系方式、邮箱、审核状态、操作
    • 状态显示:待审核(橙色)、已通过(绿色)、已拒绝(红色)
  • 审核弹窗:点击“审核”按钮弹出,包含:
    • 审核结果(单选框:通过/拒绝)
    • 审核意见(文本域,必填,比如“通过:资质齐全”“拒绝:缺少营业执照”)
    • 按钮:“确认审核”和“取消”

4. 用户端:论坛模块(答辩亮点!)

这个功能最能体现系统的“互动性”,导师超爱问!核心是“发布帖子、评论帖子”,别漏了“帖子分类”,不然用户找内容像“大海捞针”。

页面设计要点

页面标题:用户-在线论坛页面
(插入图片位置:此处放“在线论坛页面截图”,需包含以下元素)

  • 发帖区:
    • 帖子标题(输入框,必填)
    • 帖子分类(下拉框:购车经验/车况鉴定/价格对比,必填)
    • 帖子内容(富文本框,支持换行,必填)
    • “发布帖子”按钮(绿色btn-success)
  • 帖子列表区:
    • 按“发布时间”倒序排列,显示标题、分类、发布人、发布时间、评论数
    • 点击帖子标题进入详情页,详情页显示完整内容和所有评论(评论支持“回复”功能)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

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

很多宝子觉得“功能能跑就行”,结果答辩时评委一测试就出问题!我当初没测“汽车库存为0时上架”的情况,导致商家能上架库存为负的汽车,导师说“不符合交易逻辑”,当场扣了分😫 测试一定要针对性做!

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

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

(1)汽车上架功能测试(表1:汽车上架测试用例)
测试场景操作步骤预期结果实际结果测试结论
汽车名称重复输入已存在的汽车名称→填其他信息→提交提示“该汽车名称已存在,请修改!”
库存为负库存填-5→其他信息正确→提交提示“库存不能为负数!”
正常上架名称唯一+库存10+信息完整→提交提示“汽车上架成功!”,列表显示该汽车(上架状态)
(2)用户留言功能测试(表2:用户留言测试用例)
测试场景操作步骤预期结果实际结果测试结论
未登录留言退出登录→进入汽车详情页→提交留言自动跳登录页,提示“请先登录!”
留言内容为空登录→留言框不填内容→提交提示“请输入留言内容!”
正常留言登录→填留言内容→提交提示“留言成功”,历史留言列表显示该留言
(3)商家审核功能测试(表3:商家审核测试用例)
测试场景操作步骤预期结果实际结果测试结论
审核通过选“待审核”商家→选“通过”→填意见→提交商家状态变为“已通过”,显示绿色
审核拒绝选“待审核”商家→选“拒绝”→填意见→提交商家状态变为“已拒绝”,显示红色
重复审核选“已通过”商家→再次审核提示“该商家已审核,无需重复操作!”

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

别只在自己电脑上测!答辩时评委可能用不同浏览器,我当初没测IE浏览器,结果论坛帖子排版错乱,赶紧改了CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(笔记本常用分辨率,别让页面出现横向滚动条)

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

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

  • 问题总结:“IE浏览器下汽车轮播图不显示,已通过添加CSS的display:block解决;未登录能访问商家后台,已加权限拦截器解决”
  • 测试结论:“核心功能(汽车上架、用户留言、商家审核)均通过测试,无严重bug;兼容性问题已修复,系统可正常使用”

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

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

  1. 演示流程要顺畅:提前录好演示视频(怕答辩时系统崩),演示时按“商家上架汽车→用户留言→管理员审核商家”的流程来,别跳步
  2. 重点讲“你解决了啥问题”:比如“一开始汽车照片存数据库导致加载慢,后来改成存文件路径,访问速度提升80%”,比光说“我用了Spring Boot”更有亮点
  3. 准备常见问题:导师大概率会问“为什么选Spring Boot不选SSM”“如果用户量变大,怎么优化”,提前准备好答案,比如“Spring Boot配置简单,适合快速开发;用户量变大的话,会加Redis缓存热门汽车信息,减少数据库压力”

最后:毕设通关的小私心

以上就是基于Spring Boot的二手车交易系统从0到1的全流程避坑干货!其实毕设没那么难,关键是找对方法,别盲目跟风做复杂功能。

需要核心源码(带注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“二手车系统”,我私发你;要是卡在某个模块(比如汽车上架、用户留言),也可以留言,我看到必回!

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