# 毕业设计实战:基于SpringBoot+Vue的电影院购票系统,从需求到上线全流程拆解,新手必看避坑指南! 谁懂啊!当初做电影院购票系统毕设时,光"电影座

47 阅读23分钟

毕业设计实战:基于SSM+MySQL的宠物商城网站设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

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

一、先搞懂“宠物商城网站要啥”!需求分析别瞎蒙

刚开始我跳过需求分析就写代码,花两周加了个“宠物商品智能推荐算法”,结果导师一句“核心是商品管理、订单处理、用户交互,不是复杂算法”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走90%弯路。

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

宠物商城网站就两类核心用户:管理员普通用户(别加“客服子角色”!我当初加了后,权限逻辑混乱,客服能修改商品价格,最后砍掉才顺畅),功能要明确区分,避免越权操作:

  • 管理员端(必做功能):
    • 用户管理:维护用户账号(新增/重置密码/禁用账号)、查看用户信息(姓名、手机号、身份证号、余额、积分)、按用户名/注册时间筛选(我当初没加,找用户要翻几十页)
    • 商品管理:维护宠物商品(新增名称/类型/库存/价格、上传商品照片、修改简介、设置是否上架、标记“逻辑删除”状态)、管理商品互动(查看评价/回复评价)、按商品类型/名称筛选
    • 订单与收藏管理:订单管理(查看订单号/实付价格/支付类型、跟踪订单状态)、商品收藏管理(查看用户收藏记录、删除无效收藏)
    • 内容与基础管理:百科信息管理(新增宠物百科名称/图片/详情、管理百科类型)、留言板管理(查看用户留言、回复用户疑问)、论坛管理(审核帖子、删除违规内容)、字典表维护(新增字段编码/名称)
  • 用户端(核心功能):
    • 商品操作:浏览商品列表(按类型/价格排序)、查看商品详情(照片、简介、库存、现价)、收藏感兴趣商品、评价已购商品(填写评价内容)
    • 订单与购物车:加入购物车(选择购买数量)、提交订单(选择收货地址、支付类型)、查看订单记录(订单号、实付价格、订单状态)
    • 互动与信息查询:浏览宠物百科(按百科类型筛选)、发布论坛帖子(分享养宠经验)、留言咨询(向管理员提问)、查看公告与回复
    • 个人中心:管理收货地址(新增/修改/设置默认地址)、查看个人信息(收藏记录、评价历史、余额、积分)、修改密码/联系方式/头像

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

  • 别光靠“空想”!找2个同学分别模拟管理员和用户提意见:比如有用户说“想快速区分已收藏/未收藏的商品”,我才加了“收藏状态标色”(已收藏标红色实心星/未收藏标灰色空心星),比瞎加“智能推荐”实用多了
  • 一定要画用例图!用DrawIO画简单版,标清“管理员-审核论坛帖子”“用户-收藏宠物商品”,跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听25分钟还没get到逻辑)
  • 写“需求规格说明书”!不用复杂,把“功能描述、约束条件”写清楚(比如“商品名称非空”“商品照片格式为JPG/PNG”“用户手机号需唯一”“订单实付价格≥0”),编码时对着做,不会跑偏

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

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

  • 技术可行性:SSM框架、MySQL、JSP、Java都是课堂学过的,图书馆有《SSM实战》《MySQL数据库设计与优化》,遇到问题能查资料(别用高版本Java!我当初试Java 17,部分SSM依赖不兼容,换回Java 8才顺利)
  • 经济可行性:所有工具全免费!MyEclipse(社区版)、MySQL、Tomcat官网直接下,不用花钱买版权,答辩时说“开发成本为0,且系统上线后能帮宠物商家节约手工管理成本”,导师会觉得你懂成本控制
  • 操作可行性:界面参考主流电商平台,按钮布局简洁(比如“加入购物车”“立即购买”按钮放商品详情页显眼位置),我找同学测试,10分钟就学会收藏商品、提交订单,导师直接认可

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

刚开始我跟风用SSM+Vue3+Redis,结果“用户购物车缓存”卡了4天——Redis的持久化配置没设对,重启后购物车数据全丢😫 后来换成Java 8+SSM框架(Spring+SpringMVC+MyBatis)+MySQL 8.0+Tomcat 9+MyEclipse 2022+JSP,新手友好度拉满,调试效率翻两倍!

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

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

技术工具为啥选它避坑提醒!(重点!)
Java 8语法简洁,支持面向对象编程,学习资料丰富,SSM框架对其兼容性最佳别用Java 11+!部分SSM依赖(如Spring 5.2.x)对高版本Java支持差,会出现“类加载失败”错误
SSM框架分层清晰(控制层+业务层+数据层),MyBatis灵活操作数据库,SpringMVC简化请求处理别手动整合SSM!用MyEclipse的SSM模板自动生成,避免applicationContext.xml与spring-mvc.xml配置冲突(我当初手动配,xml文件报错查了3天)
MySQL 8.0支持事务和外键,存商品、订单、用户数据足够用,占内存小,支持utf8mb4编码(解决生僻字乱码)安装时设“utf8mb4”编码!我当初用默认latin1编码,用户姓名含生僻字(如“䶮”)乱码,查2小时才解决
Tomcat 9轻量级服务器,支持Java Web项目部署,配置简单,与SSM兼容性强别用Tomcat 10!版本过高导致Servlet API包名变化(javax.servlet→jakarta.servlet),项目启动报错“类找不到”
MyEclipse 2022对Java Web开发支持好,自带SSM插件,调试工具直观,免费开源别更到2023+版本!高版本对老电脑兼容性差,编译项目时经常卡顿,且部分插件(如MyBatis Tools)适配不完善
JSP与SSM框架无缝衔接,无需额外学习前端框架,适合新手快速开发页面别混用Vue!我当初想加Vue组件,结果JSP的EL表达式与Vue语法冲突({{}}符号重复),调试1天没解决,纯用JSP才顺畅

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

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

  1. 装JDK 1.8:记住安装路径(比如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”环境变量,Path中添加“%JAVA_HOME%\bin”,cmd输入“java -version”显示“1.8.x”即成功
  2. 装MyEclipse 2022(社区版):选“Eclipse IDE for Enterprise Java Developers”,首次打开勾选“Spring Tools”“MyBatis Tools”插件,自动安装
  3. 装MySQL 8.0:用Navicat管理(可视化工具超方便),新建数据库“chongwushangcheng”,编码设“utf8mb4”,排序规则选“utf8mb4_general_ci”
  4. 装Tomcat 9:解压到本地路径(如D:\Tomcat 9),在MyEclipse中配置“Server”,关联JDK 1.8,启动后访问“
  5. 配SSM项目:在MyEclipse中新建“Dynamic Web Project”,导入SSM框架依赖(spring-context.jar、mybatis.jar等),配置applicationContext.xml(数据库连接:url=jdbc:mysql://localhost:3306/chongwushangcheng?useSSL=false&serverTimezone=UTC,用户名=root,密码=自己设的密码)和spring-mvc.xml(视图解析:前缀=/WEB-INF/jsp/,后缀=.jsp),写“查询商品列表”接口,运行后能在页面显示商品即完成初始化

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

用DrawIO画SSM+B/S分层架构图,标清“客户端(浏览器)-表示层(JSP页面)-控制层(Controller)-业务层(Service)-数据访问层(Dao/Mapper)-数据库(MySQL)”:比如用户点“收藏商品”→浏览器传请求→Controller接收参数→Service校验商品状态(是否上架、是否删除)→Mapper操作数据库(插入收藏记录)→返回收藏结果→JSP页面更新收藏状态。去年答辩时,评委特意夸这图“逻辑清晰”,比光说“我用了SSM+MySQL”专业多了!

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

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

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

先确定“实体”(管理员、用户、商品、商品收藏、商品订单、收货地址、百科信息、留言板),再想“属性”,别漏关键字段!我整理了必做的8张表,直接照着画ER图:

  • 用户表(yonghu):id(主键)、yonghu_name(用户姓名)、yonghu_phone(手机号)、yonghu_id_number(身份证号)、yonghu_photo(头像路径)、new_money(余额)、yonghu_sum_jifen(总积分)、yonghu_new_jifen(现积分)、create_time(注册时间)
  • 商品表(shangpin):id(主键)、shangpin_name(商品名称)、shangpin_photo(商品照片路径)、shangpin_types(商品类型)、shangpin_kucun_number(商品库存)、shangpin_old_money(商品原价)、shangpin_new_money(现价)、shangxia_types(是否上架:0=下架,1=上架)、shangpin_delete(逻辑删除:0=未删,1=已删)
  • 商品收藏表(shangpin_collection):id(主键)、shangpin_id(关联商品)、yonghu_id(关联用户)、shangpin_collection_types(收藏类型)、insert_time(收藏时间)
  • 商品订单表(shangpin_order):id(主键)、shangpin_order_uuid_number(订单号)、shangpin_id(关联商品)、yonghu_id(关联用户)、address_id(关联收货地址)、buy_number(购买数量)、shangpin_order_true_price(实付价格)、shangpin_order_payment_types(支付类型)、insert_time(订单创建时间)

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

  1. 矩形代表“实体”(比如“用户”“商品”)
  2. 椭圆代表“属性”(比如用户的“手机号”“余额”,商品的“名称”“库存”)
  3. 菱形代表“关系”(比如“用户-商品收藏”是一对多,一个用户可收藏多个商品;“商品-商品收藏”是一对多,一件商品可被多个用户收藏;“用户-商品订单”是一对多,一个用户可下多个订单) 避坑提醒:别把“商品照片、用户头像”存数据库!我当初存二进制导致数据库崩溃,改成存“文件路径”(比如/static/shangpin/photo1.jpg、/static/yonghu/avatar1.png)才对。

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

ER图画好后,转成实际表,字段类型和约束别瞎设!比如“商品库存”用INT,“商品名称”用VARCHAR(200),“手机号”设UNIQUE约束(避免重复注册),“实付价格”用DECIMAL(10,2)(保留两位小数)。

给宝子们贴“商品表”和“商品收藏表”的建表SQL,复制到Navicat就能用:

-- 商品表
CREATE TABLE `shangpin` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `shangpin_name` VARCHAR(200) NOT NULL COMMENT '商品名称',
  `shangpin_photo` VARCHAR(200) DEFAULT NULL COMMENT '商品照片路径',
  `shangpin_types` INT DEFAULT NULL COMMENT '商品类型(1-宠物粮食,2-宠物玩具,3-宠物用品)',
  `shangpin_kucun_number` INT DEFAULT 0 COMMENT '商品库存',
  `shangpin_old_money` DECIMAL(10,2) DEFAULT NULL COMMENT '商品原价',
  `shangpin_new_money` DECIMAL(10,2) NOT NULL COMMENT '现价',
  `shangpin_clicknum` INT DEFAULT 0 COMMENT '点击次数',
  `shangxia_types` INT DEFAULT 1 COMMENT '是否上架(0-下架,1-上架)',
  `shangpin_delete` INT DEFAULT 0 COMMENT '逻辑删除(0-未删,1-已删)',
  `shangpin_content` TEXT DEFAULT NULL COMMENT '商品简介',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物商品表';

-- 商品收藏表
CREATE TABLE `shangpin_collection` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
  `shangpin_id` INT DEFAULT NULL COMMENT '关联商品ID(外键)',
  `yonghu_id` INT DEFAULT NULL COMMENT '关联用户ID(外键)',
  `shangpin_collection_types` INT DEFAULT 1 COMMENT '收藏类型(1-正常收藏)',
  `insert_time` DATETIME DEFAULT NULL COMMENT '收藏时间',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `fk_shangpin_collection` (`shangpin_id`),
  KEY `fk_yonghu_collection` (`yonghu_id`),
  CONSTRAINT `fk_shangpin_collection` FOREIGN KEY (`shangpin_id`) REFERENCES `shangpin` (`id`),
  CONSTRAINT `fk_yonghu_collection` FOREIGN KEY (`yonghu_id`) REFERENCES `yonghu` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品收藏表';

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

建完表一定要测关联!比如在“商品表”插数据(id=1,名称=“宠物天然粮”,类型=1,照片=/static/shangpin/photo1.jpg,库存=100,现价=59.90),在“用户表”插数据(id=1,姓名=“张三”,手机号=13800138000,余额=200.00),在“商品收藏表”插关联数据(shangpin_id=1,yonghu_id=1,收藏时间=2024-05-01 10:00:00),用JOIN查询“某件商品的收藏记录”:

SELECT u.yonghu_name, u.yonghu_phone, c.insert_time, c.shangpin_collection_types
FROM shangpin_collection c
JOIN yonghu u ON c.yonghu_id = u.id
WHERE c.shangpin_id = 1;

如果能查出“用户名+手机号+收藏时间+收藏类型”,说明关联没问题;如果报错“Cannot add or update a child row”,大概率是外键没设对,赶紧检查表结构(比如商品ID是否存在、用户ID是否有效)。

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

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

1. 管理员端:商品管理模块(必做!)

这是管理员的核心功能,实现“商品信息维护+上下架管理”,重点说“商品名称唯一性校验”和“逻辑删除逻辑”——别漏这两步,我当初就是这里踩了大坑!

(1)关键操作逻辑
  1. 新增商品前,校验“商品名称非空且唯一”“商品类型已在字典表定义”“库存≥0”“现价≥0”(缺一项提示“请完善商品信息”);
  2. 上传商品照片时,限制格式为JPG/PNG,大小≤5MB(避免占用过多服务器空间,影响访问速度);
  3. 删除商品时,采用“逻辑删除”(修改shangpin_delete为1),避免删除后关联的订单、收藏数据丢失(物理删除会导致用户查不到已购商品信息)。
(2)页面设计要点(JSP+Bootstrap)

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

  • 筛选区:
    • 输入框:商品名称(模糊查)
    • 下拉框:商品类型(全部/宠物粮食/宠物玩具/宠物用品)、是否上架(全部/已上架/已下架)、逻辑删除状态(全部/未删/已删)
    • 按钮:“查询”(蓝色btn-primary)、“新增商品”(绿色btn-success)
  • 商品列表区:
    • 表格列名:商品名称、商品照片、商品类型、库存、现价、是否上架、创建时间、操作
    • 照片显示:缩略图(点击查看大图)
    • 操作按钮:“编辑”(橙色btn-warning)、“删除”(红色btn-danger,点击后执行逻辑删除)、“查看详情”(蓝色btn-info)、“上下架切换”(灰色btn-default,上架→下架/下架→上架)
  • 新增商品弹窗:
    • 表单元素:商品名称(必填)、商品类型(下拉选,必填)、商品照片(上传框,JPG/PNG)、商品库存(数字输入框,≥0,必填)、商品原价(数字输入框,≥0)、现价(数字输入框,≥0,必填)、商品简介(文本域,必填)
    • 按钮:“提交”(绿色)、“取消”(灰色)
(3)避坑提醒
  • 商品名称唯一性校验与逻辑删除逻辑!加代码(Service层):
    // 商品名称唯一性校验
    String goodsName = shangpin.getShangpinName();
    LambdaQueryWrapper nameWrapper = new LambdaQueryWrapper<>();
    nameWrapper.eq(Shangpin::getShangpinName, goodsName)
               .eq(Shangpin::getShangpinDelete, 0); // 只校验未删除的商品
    if (shangpinService.count(nameWrapper) > 0) {
        return Result.error(&#34;该商品名称已存在,请勿重复添加!&#34;);
    }
    // 商品类型校验(需在字典表存在)
    Integer goodsType = shangpin.getShangpinTypes();
    LambdaQueryWrapper typeWrapper = new LambdaQueryWrapper<>();
    typeWrapper.eq(Dictionary::getDicCode, &#34;shangpin_type&#34;)
               .eq(Dictionary::getCodeIndex, goodsType);
    if (dictionaryService.count(typeWrapper) == 0) {
        return Result.error(&#34;商品类型无效,请选择正确类型!&#34;);
    }
    // 逻辑删除逻辑(不物理删除)
    public Result deleteGoods(Integer id) {
        Shangpin goods = shangpinService.getById(id);
        goods.setShangpinDelete(1); // 1表示已删除
        shangpinService.updateById(goods);
        return Result.success(&#34;商品已删除!&#34;);
    }
    

2. 用户端:商品收藏模块(核心需求!)

用户用系统的核心是“找商品-收藏-购买”,流程别复杂:浏览商品→查看详情→点击收藏→在个人中心查看/取消收藏,我当初漏了“重复收藏”校验,导致用户多次收藏同一件商品,补了半天逻辑才好。

(1)关键操作逻辑
  1. 收藏商品前,校验“未重复收藏该商品”“商品状态为已上架且未删除”(不满足提示“无法收藏此商品”);
  2. 收藏成功后,页面实时更新收藏状态(空心星→实心星,标红);
  3. 取消收藏时,直接删除收藏记录,不影响商品本身数据。
(2)页面设计要点(JSP+Bootstrap)

页面标题:用户-商品详情与收藏页面
(插入图片位置:此处放“商品详情与收藏页面截图”,需包含以下元素)

  • 商品详情区:
    • 显示:商品照片(大图,支持轮播)、名称、类型、库存(标红提示“库存不足”当库存≤10时)、原价(划横线)、现价(红色加粗)、商品简介(分段显示)
    • 按钮:“加入购物车”(橙色btn-warning)、“立即购买”(红色btn-danger)、“收藏”(空心星/实心星切换,已收藏标红,点击触发收藏/取消收藏)
  • 评价区:
    • 显示:其他用户评价列表(按时间倒序,包含用户名、评价内容、评价时间、管理员回复)
    • 输入框:我的评价(提示“请输入您的使用体验”,已购用户可见)
    • 按钮:“提交评价”(蓝色,已购用户可点击)
  • 我的收藏区(个人中心):
    • 表格列名:商品名称、商品照片、商品类型、收藏时间、操作
    • 操作按钮:“查看商品”(蓝色)、“取消收藏”(红色,点击后删除收藏记录,页面实时刷新)
(3)避坑提醒
  • 重复收藏校验!加代码(Controller层):
    @RequestMapping(&#34;/collectGoods&#34;)
    @ResponseBody
    public Result collectGoods(Integer shangpinId, Integer yonghuId) {
        // 1. 校验商品状态(已上架且未删除)
        Shangpin goods = shangpinService.getById(shangpinId);
        if (goods == null || goods.getShangpinDelete() == 1 || goods.getShangxiaTypes() == 0) {
            return Result.error(&#34;该商品已下架或已删除,无法收藏!&#34;);
        }
        // 2. 校验是否重复收藏
        LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShangpinCollection::getShangpinId, shangpinId)
               .eq(ShangpinCollection::getYonghuId, yonghuId);
        if (shangpinCollectionService.count(wrapper) > 0) {
            return Result.error(&#34;您已收藏过此商品,请勿重复操作!&#34;);
        }
        // 3. 保存收藏记录
        ShangpinCollection collection = new ShangpinCollection();
        collection.setShangpinId(shangpinId);
        collection.setYonghuId(yonghuId);
        collection.setInsertTime(new Date());
        shangpinCollectionService.save(collection);
        return Result.success(&#34;商品收藏成功!&#34;);
    }
    

3. 管理员端:百科信息管理模块(答辩亮点!)

这个功能最能体现“宠物商城的专业性”,导师超爱问!核心是“新增宠物百科-管理百科类型-用户学习”,别漏“百科图片预览”,不然用户看不到宠物知识的直观内容。

页面设计要点(JSP+Bootstrap)

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

  • 筛选区:
    • 输入框:百科名称(模糊查)
    • 下拉框:百科类型(全部/宠物喂养/宠物健康/宠物训练)
    • 按钮:“查询”(蓝色)、“新增百科”(绿色)、“管理百科类型”(灰色,跳转百科类型管理页)
  • 百科列表区:
    • 表格列名:百科名称、百科图片、百科类型、发布时间、操作
    • 图片显示:缩略图(点击预览)
    • 操作按钮:“编辑”(橙色)、“删除”(红色,逻辑删除)、“查看详情”(蓝色)
  • 新增百科弹窗:
    • 表单元素:百科名称(必填)、百科类型(下拉选,必填)、百科图片(上传框,JPG/PNG)、百科详情(文本域,必填,描述宠物知识,支持换行)、发布时间(日期选择器,默认当前时间)
    • 按钮:“提交”(绿色)、“取消”(灰色)
  • 百科类型管理页:
    • 功能:新增百科类型(输入类型名称、编码)、编辑现有类型、删除无效类型(无关联百科时可删)
(3)避坑提醒
  • 百科图片上传与预览!加代码(Controller层):
    @RequestMapping(&#34;/uploadBaikePhoto&#34;)
    @ResponseBody
    public Result uploadBaikePhoto(@RequestParam(&#34;file&#34;) MultipartFile file) {
        try {
            // 1. 校验文件格式
            String originalFilename = file.getOriginalFilename();
            String suffix = originalFilename.substring(originalFilename.lastIndexOf(&#34;.&#34;));
            if (!&#34;.jpg&#34;.equals(suffix) && !&#34;.png&#34;.equals(suffix)) {
                return Result.error(&#34;仅支持JPG、PNG格式图片!&#34;);
            }
            // 2. 校验文件大小(≤5MB)
            if (file.getSize() > 5 * 1024 * 1024) {
                return Result.error(&#34;图片大小不能超过5MB!&#34;);
            }
            // 3. 上传图片(存到项目static目录)
            String filePath = &#34;D:/MyEclipseWorkspace/chongwushangcheng/WebContent/static/baike/&#34;;
            File destDir = new File(filePath);
            if (!destDir.exists()) {
                destDir.mkdirs(); // 创建目录
            }
            String newFileName = System.currentTimeMillis() + suffix;
            File destFile = new File(filePath + newFileName);
            file.transferTo(destFile);
            // 4. 返回图片路径(前端预览用)
            String photoUrl = &#34;/chongwushangcheng/static/baike/&#34; + newFileName;
            return Result.success(&#34;图片上传成功!&#34;, photoUrl);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(&#34;图片上传失败!&#34;);
        }
    }
    

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

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

很多宝子觉得“功能能跑就行”,结果答辩时评委一测就出问题!我当初没测“已下架商品仍可收藏”场景,导致用户能收藏下架商品,导师说“不符合电商逻辑”,当场扣分😫 测试一定要针对性做!

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

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

(1)商品管理测试(表1:商品测试用例)
测试场景操作步骤预期结果实际结果测试结论
商品名称重复新增新增商品→填已存在名称→提交提示“该商品名称已存在,请勿重复添加!”
商品库存为负数新增商品→库存填-10→提交提示“商品库存不能为负数,请重新输入!”
正常新增商品填唯一名称+选有效类型+传PNG照片+库存100+现价59.9→提交提示“新增成功!”,列表显示该商品(已上架、未删除)
逻辑删除商品后查询删除商品→选“已删”筛选→查询显示该商品;选“未删”筛选→不显示
(2)商品收藏测试(表2:收藏测试用例)
测试场景操作步骤预期结果实际结果测试结论
重复收藏同一商品选已收藏商品→点击“收藏”→确认操作提示“您已收藏过此商品,请勿重复操作!”
收藏已下架商品选“已下架”商品→点击“收藏”→确认操作提示“该商品已下架或已删除,无法收藏!”
正常收藏商品选“已上架且未删”商品→点击“收藏”→确认操作提示“商品收藏成功!”,个人中心显示该收藏(实心红星)
取消收藏商品选已收藏商品→点击“取消收藏”→确认操作提示“取消收藏成功!”,个人中心不显示该收藏(空心星)
(3)百科信息管理测试(表3:百科测试用例)
测试场景操作步骤预期结果实际结果测试结论
上传非支持格式图片新增百科→上传Excel文件→提交提示“仅支持JPG、PNG格式图片!”
百科名称为空新增新增百科→名称不填→提交提示“百科名称不能为空,请重新输入!”
正常新增百科填名称+选类型+传JPG图片+写详情→提交提示“百科新增成功!”,列表显示该百科

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

别只在自己电脑测!答辩时评委可能用不同浏览器,我当初没测IE,结果商品照片显示变形,赶紧加兼容性CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(别让页面出现横向滚动条,用Bootstrap的“container-fluid”布局,加“overflow-x: hidden”样式)

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

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

  • 问题总结:“IE浏览器下商品照片显示变形,通过添加IE专属CSS(*html .shangpin-photo { width: 120px !important; height: 120px !important; })修复;已下架商品仍可收藏,加商品状态校验(判断shangxiaTypes是否为1)修复”
  • 测试结论:“核心功能(商品管理、商品收藏、百科信息管理)均通过测试,无严重bug;兼容性问题已修复,系统可正常使用,满足宠物商城日常管理与用户操作需求”

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

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

  1. 演示流程要顺畅:提前录演示视频(怕现场系统崩),按“管理员新增商品→用户浏览并收藏商品→用户提交订单→管理员查看订单→管理员新增宠物百科”的流程来,别跳步,每个操作后停顿2秒,让评委看清结果
  2. 重点讲“你解决了啥问题”:比如“一开始用户能重复收藏商品,加重复校验(查询收藏表是否已有该用户-商品关联)解决;已下架商品仍可收藏,加商品上架状态(shangxiaTypes)校验修复;表关联错误导致查不到收藏记录,重新设计外键(shangpin_id关联商品表id,yonghu_id关联用户表id)解决”,比光说“我用了SSM+MySQL”有亮点
  3. 准备常见问题:导师大概率问“为啥选SSM不选SpringBoot”“商品数据多了怎么优化”,提前答:“SSM分层清晰(Controller/Service/Dao),适合本科毕设理解开发流程;数据多就给商品表的shangpin_name加索引(CREATE INDEX idx_shangpin_name ON shangpin(shangpin_name);),优化模糊查询速度,还能分表存储历史订单数据(按年份分表,如shangpin_order_2024、shangpin_order_2025)”

最后:毕设通关的小私心

以上就是基于SSM+MySQL的宠物商城网站从0到1的避坑干货!毕设没那么难,关键是找对方法,别瞎做复杂功能(比如智能推荐、AI客服),把核心功能(商品、订单、收藏)做扎实,答辩就能过。

需要核心源码(带详细注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“宠物商城”,我私发你;卡在某个模块(比如商品上传、订单提交),也可以留言,我看到必回!

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