微信小程序+Spring Boot+MySQL水果店管理系统设计实现与联调解析

发布时间:2026/9/7 2:07:23
微信小程序+Spring Boot+MySQL水果店管理系统设计实现与联调解析 每次接毕业设计或课程设计任务最难的不是写代码而是“从零到一”的那个启动阶段。很多同学拿到“基于微信小程序的水果店管理系统”这类题目后不知道后端该用什么框架、数据库有哪些表、小程序端怎么调接口、前后端怎么联调。网上资料虽然多但大多是零散的代码片段或只有前端没有后端照着做很容易卡住。这篇文章会围绕“微信小程序 Spring Boot MySQL”这套主流毕业设计技术栈完整梳理一个水果店管理系统的设计与实现思路。内容包括需求分析、功能模块拆解、数据库建表、后端核心接口、小程序前端页面、前后端联调和常见问题排查。整套思路同样适用于校园跑腿、超市购物、奶茶点单等类似“商城类小程序”题目拿到源码后改一改也能复用到其他项目里。1. 项目背景与系统定位1.1 为什么选“水果店管理系统”作为实战项目水果店管理系统是一个典型的“前后端分离 移动端”业务系统业务链路清晰用户浏览商品、加入购物车、下单管理员维护商品、处理订单、查看统计。它不涉及复杂的算法也没有晦涩的底层原理但覆盖面很广能同时锻炼小程序开发、后端接口设计、数据库建模和联调排错能力非常适合毕业设计、课程设计作为实战项目。从开发难度上看它处于“低于大型电商系统、高于纯增删改查”的中间位置。如果只做一个商品展示页面太简单答辩时没有亮点如果做成完整的微信支付、多商户平台又超出了大多数本科生的能力和时间范围。水果店管理系统刚好卡在这个平衡点上既把用户端、管理端、后端、数据库完整串联起来又能在核心功能上继续扩展比如优惠券、会员积分、销售统计图表等。1.2 系统的总体目标系统最终要实现的目标可以概括为用户端微信小程序注册/登录、浏览水果商品、按分类筛选、加入购物车、提交订单、查看个人订单。管理端Web 管理页面或小程序管理端商品管理、库存管理、分类管理、订单管理、上下架管理。后端服务提供统一的 RESTful API处理业务逻辑、校验参数、操作数据库、返回统一格式的结果。数据库存储用户、商品、分类、购物车、订单、订单明细等核心数据。有些同学的课程设计要求里不强制要求 Web 管理后台那么管理端也可以做成小程序内的隐藏页面或者一个简单的 H5 管理页面。本文以后端 API 用户端小程序为主要演示范围管理端作为扩展模块说明。1.3 系统技术选型概览层次技术选型说明前端用户端微信小程序原生框架体积小、上手快、社区文档丰富后端Spring Boot MyBatis / MyBatis-Plus主流 Java 后端框架适合毕设数据库MySQL 5.7 / 8.0数据存储需提前安装并初始化接口文档Swagger / Knife4j可选方便调试和写论文功能说明开发工具VS Code / HBuilderX / 微信开发者工具分别编辑后端代码、前端页面、运行调试2. 需求分析与功能拆解2.1 用户端功能用户端是直接面向顾客的小程序功能设计要围绕“顾客下单买水果”这条主线。微信登录首次进入小程序时通过 wx.login 获取临时 code后端调用微信接口换取 openid作为用户唯一标识。首页商品展示轮播图、热门推荐、分类菜单、商品列表。商品搜索按名称模糊搜索。商品详情展示图片、价格、库存、描述支持选择购买数量。购物车添加商品、修改数量、删除商品、全选/取消全选、结算。订单确认填写收货地址、备注生成订单。订单管理查看待付款、待发货、已完成等状态订单支持取消订单。个人中心查看用户信息、收货地址、联系客服。2.2 管理端功能管理端不需要做得太复杂但要能覆盖“日常经营管理”的核心动作。商品分类管理新增、修改、删除分类。商品管理添加商品、编辑商品、上架/下架、库存修改。订单管理查看订单列表、按状态筛选、发货、完成订单。数据统计可选商品销量排行、订单金额趋势可以用 ECharts 图表展示作为论文中的功能亮点。2.3 非功能需求非功能需求虽然不直接写代码但在论文和答辩中很重要。性能要求数据库索引合理列表接口支持分页小程序端图片懒加载。安全要求后端接口要校验参数管理端接口要有权限控制避免未授权访问。兼容性要求小程序基础库版本兼容真机和模拟器表现一致。可维护性要求前后端代码分层清晰命名规范关键逻辑要有注释。3. 数据库设计3.1 数据表总览水果店管理系统的数据库设计其实就是在表达“人、货、单”三个核心概念。建议表结构如下表名中文含义说明user用户表保存微信用户 openid、昵称、头像category商品分类表如苹果、香蕉、柑橘、瓜类等fruit水果商品表商品名称、价格、库存、图片、描述cart购物车表记录用户加入购物车的商品与数量orders订单表一条记录代表一个订单order_item订单明细表一个订单包含多种水果address收货地址表用户配送地址3.2 核心表结构说明用户表的关键字段是 openid这是微信生态里识别用户的唯一凭证。不要把用户的手机号当作主键因为很多用户不会授权手机号。商品表里建议加 status 字段用于逻辑删除和上下架控制而不是直接物理删除商品记录。订单表和订单明细表是一对多关系订单表存总金额、状态、用户 id明细表存每个商品的单价、数量、小计这样设计才能还原订单快照。下面给出完整的建表 SQL你可以在 Navicat 或命令行中直接执行CREATE DATABASE IF NOT EXISTS fruit_shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE fruit_shop; DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID, openid VARCHAR(64) NOT NULL COMMENT 微信openid, nickname VARCHAR(64) DEFAULT COMMENT 昵称, avatar_url VARCHAR(255) DEFAULT COMMENT 头像, phone VARCHAR(20) DEFAULT COMMENT 手机号, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 用户表; DROP TABLE IF EXISTS category; CREATE TABLE category ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 分类ID, name VARCHAR(32) NOT NULL COMMENT 分类名称, sort INT DEFAULT 0 COMMENT 排序值越小越靠前, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 商品分类表; DROP TABLE IF EXISTS fruit; CREATE TABLE fruit ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 商品ID, category_id BIGINT NOT NULL COMMENT 所属分类ID, name VARCHAR(64) NOT NULL COMMENT 商品名称, price DECIMAL(10, 2) NOT NULL COMMENT 价格, stock INT NOT NULL DEFAULT 0 COMMENT 库存, image_url VARCHAR(255) DEFAULT COMMENT 商品图片, description TEXT COMMENT 商品描述, sales INT NOT NULL DEFAULT 0 COMMENT 销量, status TINYINT NOT NULL DEFAULT 1 COMMENT 1上架 0下架, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, KEY idx_category (category_id) ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 水果商品表; DROP TABLE IF EXISTS cart; CREATE TABLE cart ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT 用户ID, fruit_id BIGINT NOT NULL COMMENT 商品ID, quantity INT NOT NULL DEFAULT 1 COMMENT 购买数量, checked TINYINT NOT NULL DEFAULT 1 COMMENT 是否选中 1选中 0未选, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_user_fruit (user_id, fruit_id) ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 购物车表; DROP TABLE IF EXISTS orders; CREATE TABLE orders ( id BIGINT AUTO_INCREMENT PRIMARY KEY, order_no VARCHAR(32) NOT NULL COMMENT 订单号, user_id BIGINT NOT NULL COMMENT 用户ID, total_amount DECIMAL(10, 2) NOT NULL COMMENT 订单总金额, status TINYINT NOT NULL DEFAULT 0 COMMENT 0待付款 1待发货 2待收货 3已完成 4已取消, remark VARCHAR(255) DEFAULT COMMENT 备注, address VARCHAR(255) DEFAULT COMMENT 收货地址快照, receiver_name VARCHAR(64) DEFAULT , receiver_phone VARCHAR(20) DEFAULT , create_time DATETIME DEFAULT CURRENT_TIMESTAMP, pay_time DATETIME DEFAULT NULL, CONSTRAINT uk_order_no UNIQUE (order_no), KEY idx_user (user_id) ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 订单表; DROP TABLE IF EXISTS order_item; CREATE TABLE order_item ( id BIGINT AUTO_INCREMENT PRIMARY KEY, order_id BIGINT NOT NULL COMMENT 订单ID, fruit_id BIGINT NOT NULL COMMENT 商品ID, fruit_name VARCHAR(64) COMMENT 商品名称快照, fruit_image VARCHAR(255) DEFAULT COMMENT 商品图片快照, price DECIMAL(10, 2) NOT NULL COMMENT 下单时单价, quantity INT NOT NULL COMMENT 数量, total_price DECIMAL(10, 2) NOT NULL COMMENT 小计金额, KEY idx_order (order_id) ) ENGINE InnoDB DEFAULT CHARSET utf8mb4 COMMENT 订单明细表;设计时有两个细节容易踩坑。第一个是订单表里要存 address、receiver_name 等“快照字段”因为用户下单后修改地址不应该影响历史订单第二个是订单号和商品表都要建索引否则数据量上来后查询会很慢。4. Spring Boot 后端核心实现4.1 创建项目结构与引入依赖后端使用 Spring Boot 搭建项目结构采用经典的分层架构fruit-admin-server ├── pom.xml └── src/main/java/com/example/fruit ├── FruitApplication.java ├── common │ ├── Result.java │ └── ResultCode.java ├── config │ └── WebConfig.java ├── controller │ ├── FruitController.java │ ├── CartController.java │ ├── OrderController.java │ └── UserController.java ├── entity │ ├── User.java │ ├── Fruit.java │ └── ... ├── mapper │ ├── FruitMapper.java │ └── ... ├── service │ ├── FruitService.java │ └── ... └── service/impl └── FruitServiceImpl.javacontroller 层接收请求并返回结果service 层处理业务逻辑mapper 层操作数据库。这样的分层在论文的“系统设计”章节里也非常好写。pom.xml 核心依赖如下MyBatis-Plus 可以简化单表增删改查代码推荐在毕设中使用dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.18/version /dependency /dependenciesapplication.yml 配置里最重要的是数据库连接和 MyBatis 配置server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/fruit_shop?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0注意如果 MySQL 是 5.7 版本驱动类可以写成com.mysql.jdbc.Driver8.0 版本使用com.mysql.cj.jdbc.Driver并在 url 后面增加serverTimezone参数否则可能报时区错误。4.2 统一返回结果封装小程序端和后端交互时需要一种稳定的 JSON 结构。建议所有接口统一返回Result对象// 文件路径src/main/java/com/example/fruit/common/Result.java Data public class ResultT { private Integer code; private String msg; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.setCode(200); result.setMsg(success); result.setData(data); return result; } public static T ResultT error(String msg) { ResultT result new Result(); result.setCode(500); result.setMsg(msg); return result; } }前端小程序里判断code 200就能知道请求是否成功后续如果要统一处理登录失效、参数错误只需要在code上扩展即可。4.3 微信登录接口微信小程序登录的流程是小程序端wx.login拿到临时code发送到后端后端用 code 调用微信接口换openid然后根据 openid 查表或创建用户返回自定义登录态 token。后端关键代码如下// 文件路径src/main/java/com/example/fruit/controller/UserController.java RestController RequestMapping(/api/user) public class UserController { Autowired private UserService userService; PostMapping(/login) public Result login(RequestBody LoginRequest request) { if (StrUtil.isBlank(request.getCode())) { return Result.error(code不能为空); } // 1. 调用微信 code2Session 接口获取 openid // 这里需要 appid 和 secret用自己的小程序账号配置 String url https://api.weixin.qq.com/sns/jscode2session?appidAPPIDsecretSECRETjs_code request.getCode() grant_typeauthorization_code; // ... 实际项目中用 HttpClient 或 Hutool 发送请求 // 2. 根据 openid 查询用户不存在则创建 // 3. 生成 token 返回给小程序 return Result.success(token); } }JWT 相关依赖可以选配。毕业设计里把 token 存到 Redis 是加分项如果时间不够用 UUID 生成 token 然后存数据库也能跑通。论文里把微信登录流程画成时序图属于最容易拿分的部分。4.4 商品列表与详情接口商品模块是后端最基础的部分。使用 MyBatis-Plus 时不需要手写 mapper XML 也能完成大多数查询。// 文件路径src/main/java/com/example/fruit/service/impl/FruitServiceImpl.java Service public class FruitServiceImpl implements FruitService { Autowired private FruitMapper fruitMapper; Override public PageResultFruitVO getFruitList(FruitQuery query) { PageFruit page new Page(query.getPage(), query.getSize()); LambdaQueryWrapperFruit wrapper new LambdaQueryWrapper(); wrapper.eq(Fruit::getStatus, 1); if (StrUtil.isNotBlank(query.getCategoryId())) { wrapper.eq(Fruit::getCategoryId, query.getCategoryId()); } if (StrUtil.isNotBlank(query.getKeyword())) { wrapper.like(Fruit::getName, query.getKeyword()); } wrapper.orderByDesc(Fruit::getSales); PageFruit result fruitMapper.selectPage(page, wrapper); PageResultFruitVO pageResult new PageResult(); pageResult.setTotal(result.getTotal()); // 拷贝为 VO 并返回 return pageResult; } }控制器只需要接收参数、调用 service、返回结果即可RestController RequestMapping(/api/fruit) public class FruitController { Autowired private FruitService fruitService; GetMapping(/list) public Result list(FruitQuery query) { return Result.success(fruitService.getFruitList(query)); } GetMapping(/{id}) public Result detail(PathVariable Long id) { Fruit fruit fruitService.getById(id); return Result.success(fruit); } }4.5 购物车与下单接口购物车的基本逻辑是每个用户对同一件商品只能有一条购物车记录重复添加时数量累加。下单时先查询购物车选中的商品计算总金额然后开启事务扣减库存、生成订单、生成订单明细、清空购物车。下单接口是后端修改数据最集中的地方如果不加事务用户提交订单时可能出现“扣了库存但没生成订单”的数据不一致现象。下面给出核心事务代码Transactional(rollbackFor Exception.class) public OrderVO createOrder(OrderRequest request) { // 1. 查询用户购物车中选中的商品 ListCartItemVO items cartMapper.selectCheckedItems(request.getUserId()); if (CollUtil.isEmpty(items)) { throw new BusinessException(购物车为空无法下单); } // 2. 计算总金额并校验库存 BigDecimal total BigDecimal.ZERO; for (CartItemVO item : items) { Fruit fruit fruitMapper.selectById(item.getFruitId()); if (fruit null || fruit.getStock() item.getQuantity()) { throw new BusinessException(商品库存不足 item.getFruitName()); } total total.add(fruit.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))); } // 3. 生成订单号并插入订单表 String orderNo FR System.currentTimeMillis(); Orders order new Orders(); order.setOrderNo(orderNo); order.setUserId(request.getUserId()); order.setTotalAmount(total); order.setStatus(1); // 待发货如果没做支付默认提交后就进入待发货 // 保存订单 orderMapper.insert(order); // 4. 保存订单明细扣减库存 for (CartItemVO item : items) { Fruit fruit fruitMapper.selectById(item.getFruitId()); OrderItem orderItem new OrderItem(); orderItem.setOrderId(order.getId()); orderItem.setFruitId(fruit.getId()); orderItem.setFruitName(fruit.getName()); orderItem.setFruitImage(fruit.getImageUrl()); orderItem.setPrice(fruit.getPrice()); orderItem.setQuantity(item.getQuantity()); orderItem.setTotalPrice(fruit.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))); orderItemMapper.insert(orderItem); fruitMapper.updateStock(item.getFruitId(), item.getQuantity()); } // 5. 清空购物车已选商品 cartMapper.deleteCheckedItems(request.getUserId()); return orderVO; }5. 微信小程序前端核心实现5.1 小程序目录结构微信小程序原生开发的项目结构比较简单通常包含以下目录miniprogram/ ├── app.js ├── app.json ├── app.wxss ├── utils/ │ └── request.js ├── pages/ │ ├── index/ │ ├── category/ │ ├── cart/ │ ├── order/ │ └── mine/ └── components/在 app.json 中注册页面路径在 app.js 中配置全局数据和登录逻辑。5.2 封装请求工具小程序中不能直接使用 axios需要通过wx.request发起网络请求。为了方便统一处理 token 和错误提示建议封装一个 request.js// 文件路径utils/request.js const BASE_URL http://localhost:8080; function request(url, method GET, data {}) { return new Promise((resolve, reject) { wx.request({ url: BASE_URL url, method: method, data: data, header: { Content-Type: application/json, Authorization: wx.getStorageSync(token) || }, success: (res) { if (res.statusCode 200) { if (res.data.code 200) { resolve(res.data.data); } else { wx.showToast({ title: res.data.msg, icon: none }); reject(res.data); } } else { wx.showToast({ title: 服务器异常, icon: none }); reject(res); } }, fail: (err) { wx.showToast({ title: 网络错误, icon: none }); reject(err); } }); }); } module.exports { get: (url, data) request(url, GET, data), post: (url, data) request(url, POST, data) };这里的 BASE_URL 是后端服务的地址。用微信开发者工具调试时可以用 localhost但真机预览时 localhost 指向手机本机需要改为电脑的局域网 IP例如http://192.168.1.100:8080。5.3 登录逻辑与全局状态用户进入小程序后先判断是否有 token没有则调用 wx.login 获取 code再发送到后端登录接口// 文件路径app.js const { post } require(./utils/request); App({ globalData: { userInfo: null }, onLaunch() { this.login(); }, login() { wx.login({ success: (res) { post(/api/user/login, { code: res.code }).then((data) { wx.setStorageSync(token, data.token); this.globalData.userInfo data.userInfo; }); } }); } });开发阶段如果后端没有接入真实的微信接口也可以先用一个固定的 openid 模拟用户方便联调商品、购物车和订单功能。5.4 首页商品列表页面首页包含分类菜单和商品列表。商品列表使用 scroll-view 或简单列表即可wxml 代码如下!-- pages/index/index.wxml -- view classsearch-bar input placeholder搜索水果 bindinputonKeywordInput confirm-typesearch bindconfirmonSearch / /view view classcategory-tabs view wx:for{{categoryList}} wx:keyid classtab-item {{currentCategoryId item.id ? active : }} bindtaponCategoryTap >// pages/index/index.js const { get, post } require(../../utils/request); Page({ data: { categoryList: [], fruitList: [], currentCategoryId: , keyword: }, onLoad() { this.loadCategories(); this.loadFruits(); }, loadCategories() { get(/api/category/list).then((data) { this.setData({ categoryList: data }); }); }, loadFruits() { get(/api/fruit/list, { categoryId: this.data.currentCategoryId, keyword: this.data.keyword }).then((data) { this.setData({ fruitList: data.records }); }); }, onCategoryTap(event) { this.setData({ currentCategoryId: event.currentTarget.dataset.id }); this.loadFruits(); }, onAddCart(event) { const fruitId event.currentTarget.dataset.id; post(/api/cart/add, { fruitId: fruitId, quantity: 1 }).then(() { wx.showToast({ title: 已加入购物车 }); }); } });5.5 购物车与订单页面购物车页面需要支持选中、取消选中、修改数量、删除商品。一个简洁的 wxml 片段!-- pages/cart/cart.wxml -- view classcart-item wx:for{{cartList}} wx:keyid checkbox checked{{item.checked}} bindtaponToggleCheck>onCheckout() { post(/api/order/create, { userId: this.data.userId, address: 默认收货地址, receiverName: 张三, receiverPhone: 13800000000 }).then(() { wx.showToast({ title: 下单成功 }); wx.redirectTo({ url: /pages/order/order }); }); }6. 运行与联调验证6.1 后端启动流程安装 JDK 8 或 JDK 11配置环境变量。安装 MySQL执行上面的建表 SQL。修改 application.yml 中的数据库用户名和密码。使用 IDEA 打开项目等待 Maven 依赖下载完成。运行 FruitApplication.java。浏览器访问http://localhost:8080/api/fruit/list能返回 JSON 说明后端正常。6.2 小程序端运行流程打开微信开发者工具导入 miniprogram 目录。在 app.json 中确认页面路径正确。修改 request.js 中的 BASE_URL 为后端地址。编译并打开调试器观察 Console 网络请求。如果一切正常首页能显示商品列表加入购物车后购物车页有数据。6.3 预期运行结果系统运行起来后你应该能看到如下效果小程序首页展示分类和商品列表分类切换后商品列表变化。点击“加入购物车”后购物车角标数字增加。购物车页面可以修改数量、选中商品、结算下单。后端控制台输出 SQL 日志数据库 orders 表中生成订单记录库存同步减少。7. 常见问题与排查思路问题现象常见原因解决思路小程序请求后端报 404后端路由或上下文路径错误检查 RequestMapping 路径和 BASE_URL 是否一致真机预览请求失败手机访问不到电脑 IP将 localhost 改为局域网 IP检查防火墙数据库中文乱码表结构和连接串未指定 utf8mb4建库时指定 utf8mb4url 增加 characterEncodingutf8微信登录失败appid 或 secret 配置错误使用测试号或在小程序后台检查合法域名加入购物车后数量变成两条记录表缺少唯一索引给 cart 表增加 user_id fruit_id 唯一键下单后库存未扣减service 方法没有加 Transactional在写操作的方法上添加事务注解后端端口被占用8080 被其他进程使用修改 server.port或使用netstat -ano查找占用进程需要特别说明的是微信小程序的网络请求在小程序后台需要配置 request 合法域名开发阶段可以在微信开发者工具中勾选“不校验合法域名”。正式发布时后端接口必须使用 HTTPS证书要配置正确否则真机上无法请求。8. 最佳实践与论文写作建议8.1 项目规范建议后端接口统一/api前缀方便做权限过滤和统一错误处理。数据库表名和字段名统一使用小写加下划线风格代码中使用驼峰映射。所有金额字段使用 DECIMAL 而不是 DOUBLE避免精度丢失。商品价格、库存等关键修改操作要记录操作日志方便排查问题。管理端接口要增加登录校验和权限校验防止未授权访问。小程序端图片资源建议使用云存储或七牛云、阿里云 OSS不要直接放本地图片。8.2 论文大纲参考这个题目在写论文时章节结构可以按照“绪论 - 相关技术介绍 - 系统分析 - 系统设计 - 系统实现 - 系统测试 - 总结与展望”展开。其中相关技术介绍写微信小程序、Spring Boot、MySQL、MyBatis。系统分析写可行性分析和需求分析。系统设计重点画功能结构图、数据库 ER 图、核心时序图。系统实现按模块截图给出关键代码。系统测试写测试用例表格和测试结果。答辩前建议准备一个完整的功能演示顺序登录 - 浏览商品 - 加入购物车 - 下单 - 管理端查看订单。这个流程能覆盖系统 80% 的核心功能也是老师最关注的业务闭环。8.3 功能扩展方向如果想让项目更有竞争力可以考虑扩展以下功能接入微信支付需要小程序企业认证个人主体无法开通微信支付。增加优惠券模块用户下单时选择优惠券抵扣。增加用户积分和会员等级。管理端增加销售统计 ECharts 图表按日/周/月展示营收趋势。增加订单定时关闭功能超时未支付自动取消。扩展功能的代码量不需要很多但它们能明显提升项目的完整性和答辩展示效果。9. 总结基于微信小程序的水果店管理系统是一个能完整覆盖“需求分析、数据库设计、后端开发、小程序开发、联调测试、论文撰写”全流程的毕业设计题目也是一个非常适合用来系统化练习前后端开发技能的真实项目。从开发路径来看掌握了“用户表/商品表/购物车表/订单表”这几张核心表之间的关系再看懂 Spring Boot 的 Controller-Service-Mapper 分层写法最后上手机器一端微信小程序的页面调用链整个系统的骨架就会非常清晰。剩下的事情就是持续完善细节参数校验、库存一致性、权限控制、异常处理、图片上传和文档整理。建议你拿到源码后不要只跑通就结束而是自己动手写一遍核心接口。可以先从最基础的商品管理开始再逐步加入购物车、订单事务等复杂逻辑。这样即使面试或答辩时被问到“每个模块怎么实现的”也能答得具体扎实而不是只知道复制粘贴。如果这篇文章对你有帮助可以收藏备用后续实际开发卡住时回来对照排查。