ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于微信小程序的膳食健康管理系统设计与实现

基于微信小程序的膳食健康管理系统设计与实现 打开微信开发者工具的那一刻大多数毕设选手的内心其实是懵的。页面怎么写、接口怎么调、食物数据从哪来、营养分析怎么算这些在开题报告里看起来都清清楚楚的问题真到了动手阶段每一环都能卡住你三五天。这篇内容就是给正在做或准备做“基于微信小程序的膳食健康管理系统”这个题目的同学写的我会把整个系统从需求拆解到功能落地再到上线踩坑一条线讲透代码和思路都可直接复用。先说结论这个题目在计算机毕设里属于“中等偏上难度、高分回报率”的类型。它既有微信小程序前端又有后端服务还涉及营养学领域的基础计算逻辑展示的时候可以讲的故事很多——从食物识别、热量计算到个人健康档案每一块都能展开。但它最大的坑也恰恰在这里一旦你只把它当成一个“增删改查”项目来做答辩的时候就会非常单薄。所以这篇内容我打算先带你拆掉题目本身——把“膳食健康管理系统”这个抽象名字翻译成具体的功能清单和数据库表结构再给你一套能直接落地的技术方案然后进入核心代码和实操细节最后把我在测试和上线过程中遇到的坑一条一条列出来。整个过程不绕弯子,你照着做,至少能节省两周以上的无效摸索时间。1. 系统整体设计与思路拆解1.1 这个系统到底要解决什么问题“膳食健康管理”听起来是一个很大很泛的概念但落到一个毕设项目里它必须收窄成一个具体的、可验证的功能闭环。我建议这样理解用户打开小程序记录自己每天吃了什么系统根据食物数据算出热量和营养素摄入再结合用户的个人身体参数身高、体重、年龄、活动量给出一个饮食评价和调整建议。核心业务闭环是“记录 → 计算 → 评估 → 建议”四个环节缺一不可。只做记录不做分析就是一个备忘录没有技术含量只做分析不做记录就是无源之水数据都是编的。只有把这条链路完整打通系统的价值感才能体现出来也才能在答辩的时候说清楚你的系统到底做了什么。1.2 用户角色与核心功能划分系统不建议做太复杂的角色体系两条线就够了普通用户端和管理员端。普通用户端是整个系统的核心功能按使用频率排序如下用户注册登录微信授权登录为主手机号绑定作为辅助不要自己单独做一套账号密码体系又慢又不讨好个人健康档案填写性别、出生年份、身高、体重、活动强度用于计算每日推荐摄入热量BMR基础代谢率 TDEE总能量消耗膳食记录这是最高频的功能用户选择一餐早餐/午餐/晚餐/加餐搜索食物并填写份量记录当日摄入食物数据库检索支持关键词搜索、分类浏览每个食物需要包含热量、蛋白质、脂肪、碳水化合物、膳食纤维等核心营养数据营养分析按日/周/月维度展示热量摄入趋势对比推荐摄入量分析三大营养素供能比例健康建议根据分析结果生成简单可读的提示内容例如“本周蛋白质摄入偏低建议增加蛋奶类摄入”个人中心修改档案、查看历史记录、数据导出或清空管理员端做轻量版不需要做成完整后台管理系统那种体量食物库管理新增食物、编辑营养数据、上下架用户管理查看用户列表、禁用异常账号数据统计首页用户总数、日活跃记录数、热门食物排行很多同学会在管理员端功能上控制不住越加越多最后变成一场漫长的自我消耗。毕设项目讲究的是功能闭环完整、逻辑自洽而不是功能数量堆砌。你能把上述这些做扎实已经足够应付答辩和演示了。1.3 为什么这个选题容易拿高分这个题目有一个天然优势它同时踩中了“技术”和“业务”两个评分维度。技术维度上前端是微信小程序涉及组件化开发、本地缓存、网络请求封装、图表组件适配后端是接口服务涉及用户认证、数据校验、复杂的聚合统计查询。这些都是面试官和评委会重点关注的能力点。业务维度上系统涉及健康数据计算、目标管理、可视化分析这些能体现你的需求分析能力和产品设计能力而不是一个单纯的“增删改查搬运工”。我见过很多分数不低的同类项目它们的共同特点是在基础功能之外都有一到两个“亮点工程”。比如食物搜索联想、月度热力图展示、饮食评分卡甚至对接了免费的食物OCR识别接口。哪怕只把这些做出一两个答辩现场的效果就会立刻不一样。后面我会给出具体建议哪些亮点性价比最高。2. 技术方案选型与核心细节解析2.1 前端原生小程序还是uniapp这是你会遇到的第一个选择题。原生小程序使用微信官方语法WXML、WXSS、JSuniapp则是一套支持多端发布的Vue语法框架。我的建议很明确如果这个项目只作为毕设不打算发布到支付宝、抖音、鸿蒙等多端用原生就足够了学习曲线更短调试更方便遇到问题时社区答案直接可参考。原生开发的代码结构也更贴合小程序自身的生命周期写起来直白。如果你计划以后从事跨端开发工作或者想同时出App版本演示那选uniapp也确实是一个合理选项。需要注意一点uniapp写完之后仍然需要在小程序开发者工具里编译运行并没有省掉微信开发者工具这一环。对于毕设节奏来说它反而多了一层编译概念需要理解。无论选哪个我建议在小程序端做这些技术约定请求封装独立成utils层统一处理baseURL、token注入、错误提示、超时控制页面数据统一通过接口获取不在前端写死测试数据方便答辩演示时切换真实环境使用微信账号登录获取openid后与后端用户表绑定下次进入自动静默登录2.2 后端SpringBoot是毕设场景的安全牌后端选型上SpringBoot是当前计算机类毕设最稳妥的选择没有之一。它的生态成熟、资料丰富、答辩时老师的接受度高。结合MyBatis-Plus做数据访问省去大量手写SQL的重复工作再把重点放在业务逻辑本身的实现上。如果你的Java基础比较薄弱那么SpringBoot MyBatis-Plus MySQL这套组合最大的好处是“约定大于配置”几乎所有毕设需要的功能都有现成模板可以参考。这里需要特别留意的版本兼容问题我后面在踩坑部分细说。项目结构建议按标准分层模式搭建com.example.diet ├── controller // 接收请求、参数校验、返回结果 ├── service // 业务逻辑层核心计算都在这里 ├── mapper // 数据访问层 ├── entity // 数据库实体类 ├── dto // 前端交互参数对象 ├── common // 通用返回结果、异常处理、工具类 └── config // 配置类拦截器、跨域、WebMVC2.3 数据库设计五张核心表撑起整个系统数据库是毕设系统最重要的一层也是最容易被低估的一层。很多同学一开始就急着写代码后面发现表结构不合理返工成本极高。我把这个系统的核心表结构整理了一下照着落地基本够用。用户表user_info字段类型说明idbigint主键自增openidvarchar微信openid唯一标识nicknamevarchar昵称gendertinyint性别1男 2女birth_yearint出生年份用于计算年龄heightdecimal身高cmweightdecimal体重kgactivity_leveltinyint活动强度1低 2中 3高create_timedatetime注册时间食物表food_info字段类型说明idbigint主键namevarchar食物名称categoryvarchar分类主食/肉类/蔬菜/水果/奶类等caloriesdecimal每100g热量千卡proteindecimal每100g蛋白质gfatdecimal每100g脂肪gcarbohydratedecimal每100g碳水化合物gfiberdecimal每100g膳食纤维gunit_descvarchar常见份量描述如“1碗约200g”statustinyint0下架 1上架膳食记录表diet_record字段类型说明idbigint主键user_idbigint用户IDfood_idbigint食物IDmeal_typetinyint餐次1早餐 2午餐 3晚餐 4加餐food_weightdecimal实际摄入份量grecord_datedate记录日期create_timedatetime创建时间健康档案表health_profile该表与用户表为一对一关系主要存的是BMI、基础代谢率BMR、每日推荐摄入热量target_calorie等计算结果这样在展示分析页时不需要每次实时计算查询效率更高。建议表diet_advice存管理员预设的建议模板按条件匹配例如“蛋白质偏低”“热量超标”“膳食纤维不足”各对应若干条建议文案。2.4 核心算法逻辑热量和营养素计算怎么做整个系统里最有技术含量的部分是营养计算逻辑它不复杂但要算得对、算得合理。要算“每日推荐摄入热量”需要先用Mifflin-St Jeor公式计算基础代谢率BMR男性BMR 10 × 体重(kg) 6.25 × 身高(cm) - 5 × 年龄 5 女性BMR 10 × 体重(kg) 6.25 × 身高(cm) - 5 × 年龄 - 161然后根据活动系数得到TDEE久坐少动1.2轻度活动1.375中度活动1.55高强度1.725每日推荐摄入热量 BMR × 活动系数。记录某餐摄入时按食物份量比例换算摄入热量 食物100g热量 × 实际克数 / 100三大营养素同理。最后按日聚合所有记录得到当日总摄入。三大营养素供能比的计算方法是蛋白质供能 蛋白质克数 × 4千卡脂肪供能 脂肪克数 × 9千卡碳水供能 碳水克数 × 4千卡分别除以总热量即可得到百分比。合理范围参考碳水化合物50%-60%蛋白质10%-20%脂肪20%-30%。这个逻辑不必追求医学级精度但必须自洽并且要在答辩时能清晰解释。3. 实操过程与核心环节实现3.1 后端工程初始化与基础配置先用Spring Initializr或IDEA自带工具创建SpringBoot项目Java版本建议用JDK 8或11不要一上来就追新。JDK 17以上版本虽然也能跑但在毕设场景里没必要冒险一组兼容问题可能就消耗你一整晚。pom.xml里需要引入的关键依赖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 /dependency dependency groupIdcom.auth0/groupId artifactIdjava-jwt/artifactId version3.19.2/version /dependencyapplication.yml里的关键配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/diet_health?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 你的数据库密码 jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8 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这里需要特别提醒的是时区问题。如果你的数据库连接串里没有serverTimezoneAsia/Shanghai部署到服务器后时间会差8小时排查起来非常隐蔽。还有map-underscore-to-camel-case开启后数据库字段record_date才能自动映射到实体的recordDate不配置就会因为字段名不匹配查询不到数据。3.2 微信登录与用户体系实现小程序端调用wx.login获取临时code发送到后端后端调用微信接口换取openid。这里有一个很实用的细节wx.getUserProfile接口在2022年后调整过现在获取头像昵称需要用户主动点击授权按钮不能一进页面就弹窗。所以毕设项目建议采用“先静默登录、后完善资料”的模式——进入小程序即用code换openid创建用户用户进个人中心时再主动填档案。后端登录接口PostMapping(/login) public Result login(RequestBody LoginRequest request) { // 使用code换取openid String url https://api.weixin.qq.com/sns/jscode2session?appid appid secret secret js_code request.getCode() grant_typeauthorization_code; // 发起HTTP请求获取openid // 查询用户表不存在则创建新用户 // 生成JWT token并返回 }token方案可以使用JWT将userId放入payload中设置7天过期时间。小程序端拿到token后存到storage每次请求放在header里后端用拦截器统一解析校验。这个方案简单、清晰答辩时能讲清楚也不用引入Spring Security这种重框架否则光是security的配置和过滤器理解就能让你多花三四天。3.3 食物数据库的构建策略食物数据从哪来是几乎所有做这个题目的同学都会卡住的地方。一份“看起来像那么回事”的食物库至少需要300条数据覆盖主食、肉类、蔬菜、水果、蛋奶、豆制品、零食多个类别。数据源可以是公开的食物成分表网络上可以找到整理好的Excel或JSON版本也可以用免费的食物营养数据API调用后存入库中。我建议采用“预置管理”双轨制系统上线前批量导入一份基础食物数据300-500条上线后管理员通过后台维护新食物。需要注意的是数值必须看起来真实每100g米饭热量116千卡、每100g鸡胸肉热量133千卡这样的基础常识不能错。答辩时评委很可能随手搜一个食物来核对数据错了会非常减分。食物表在导入时可以用一段批量插入脚本SQL文件准备好后一次性执行。数据格式类似INSERT INTO food_info (name, category, calories, protein, fat, carbohydrate, fiber, unit_desc) VALUES (米饭, 主食, 116, 2.6, 0.3, 25.9, 0.3, 1碗约200g), (鸡胸肉, 肉类, 133, 19.4, 5.0, 2.5, 0, 1块约150g), (苹果, 水果, 52, 0.2, 0.2, 13.7, 1.7, 1个约200g);3.4 小程序端核心页面实现小程序端我建议页面结构如下保持精简但功能完整pages/login登录页pages/home首页展示今天摄入概况pages/record记录页选择餐次、搜索食物、填写份量pages/stats分析页图表展示pages/profile个人中心pages/food-detail食物详情页首页和记录页是使用频率最高的页面也是评委打开后第一眼看到的页面交互做得好不好直接影响第一印象。首页设计为“今日概况卡片”模式顶部显示日期和今日已摄入热量用进度条展示与目标热量的占比下面放“早餐/午餐/晚餐/加餐”四个入口卡片点击直接进入对应餐次的记录流程。记录页的核心是一个搜索框 分类筛选器。用户可以输入食物名称关键词下方列表展示匹配的食物每一项显示名称、每100g热量、常见份量描述。用户点击后弹出份量选择组件支持滑动选择或数字输入实时显示“本次摄入XX千卡”。这个交互细节很关键它让用户可以即时看到计算结果是整个系统里用户感知最强的设计。下面是记录提交的核心前端逻辑示例// pages/record/record.js 中的提交方法 submitRecord() { const { food, weight, mealType } this.data if (!food || !weight) { wx.showToast({ title: 请选择食物和份量, icon: none }) return } const calories (food.calories * weight / 100).toFixed(0) const protein (food.protein * weight / 100).toFixed(1) // 组装营养数据后提交到后端 const data { foodId: food.id, mealType, weight, recordDate: this.data.currentDate, calories, protein, } request.post(/diet/record, data).then(res { wx.showToast({ title: 记录成功, icon: success }) // 刷新首页数据 }) }在本地计算热量值再传给后端可以显著降低后端聚合统计的压力同时保证前端反馈的即时性。但要注意体重参数校验比如米饭实际摄入量填了5000g这种数据要能拦下来关键词就是合理性检查。我的方案是限制单次记录份量在10g-1000g之间超出范围直接Toast提示。3.5 营养分析页的图表实现分析页是系统的第二个“面儿”直接用文本罗列数据太干瘪必须上图表。小程序端图表推荐使用ec-canvasECharts小程序版或uCharts。两者选哪个各有利弊ec-canvas比较重但图表类型丰富、文档多uCharts轻量一些但部分图表类型需要授权。我选了ec-canvas用折线图展示近7天热量摄入趋势用饼状图展示当日三大营养素供能比。加载图表组件时有一个常见坑ECharts初始化需要一定的dom渲染时间在onReady生命周期里初始化成功率最高不要在onLoad里急着初始化否则图表会不显示或者空白。数据加载完成后通过setOption更新图表注意数据要按日期排序不是按查询结果顺序排列。图表数据接口设计GetMapping(/diet/stats) public Result stats(RequestParam Long userId, RequestParam String startDate, RequestParam String endDate) { // 按日期分组聚合查询 // 返回每天总热量、蛋白质、脂肪、碳水化合物 // 同时返回用户的每日推荐摄入热量作为对比基准 }SQL层面可以这样写SELECT record_date, SUM(calories) AS total_calorie, SUM(protein) AS total_protein, SUM(fat) AS total_fat, SUM(carbohydrate) AS total_carb FROM diet_record WHERE user_id #{userId} AND record_date BETWEEN #{startDate} AND #{endDate} GROUP BY record_date ORDER BY record_date查询结果按日期分组返回后前端再补齐缺失日期的数据。比如近7天里用户只记录了3天那么剩下4天的热量值应该补0否则折线图会断掉看起来像系统出bug了。3.6 健康建议模块的设计健康建议模块是内容生成式的不建议做复杂算法用“规则匹配 模板文案”就能做出不错的效果。系统根据用户的营养分析结果逐条判断并拼接建议内容如果蛋白质供能比低于10%匹配“蛋白质摄入偏低建议每餐增加一个鸡蛋或一杯牛奶”如果脂肪供能比高于30%匹配“脂肪摄入偏高建议减少油炸食品和肥肉摄入”如果当日总热量超出目标值的120%匹配“今日热量摄入超标建议晚餐选择清淡蔬菜”如果膳食纤维摄入低于25g匹配“膳食纤维不足建议增加全谷物和绿叶蔬菜”如果连续3天记录完整匹配“记录习惯良好继续保持”在数据库里建一张advice_template表字段包括condition_type条件类型、threshold_min、threshold_max、content。后端分析时循环匹配返回建议列表。这个模块看着不大但在答辩时非常讨巧因为它直接体现了你从数据分析到业务应用的完整思路。4. 常见问题与排查技巧实录4.1 微信开发者工具里的高频报错我把自己在开发过程中遇到频率最高的问题做成一个速查表供你对照排查很多问题不需要上网搜就能解决。问题现象常见原因解决方案请求后端接口报“url not in domain list”开发者工具中未关闭域名校验或真机调试时未配置合法域名开发阶段在“详情→本地设置”勾选“不校验合法域名”上线前必须在微信公众平台配置https域名wx.request请求一直pending后超时后端服务未启动或请求地址填了localhost真机调试不能用localhost需使用电脑局域网IP或已部署的服务器域名进入页面后数据渲染为空数据接口返回格式与前端预期不一致或字段名大小写不匹配统一后端Result结构为{code, message, data}前端在request封装里统一解包datasetData报“Setting data field to undefined”对象中某个字段未定义就参与渲染在初始化data时给每个字段赋默认值避免渲染时空值异常ECharts图表不显示初始化时机不对或canvas尺寸为0在onReady中初始化并给canvas容器设置明确高度真机预览时图片加载失败图片域名未加入downloadFile合法域名在微信公众平台配置downloadFile合法域名或用base64编码图片4.2 部署与上线过程中的几个坑部署是本项目中最容易翻车的一环。你代码全写完了但是在微信公众平台“开发管理→开发设置→服务器域名”里没有配置合法域名真机预览时接口直接全部请求失败。这个配置需要你的后端接口必须走HTTPS协议也就是说你需要一台云服务器再给域名做好备案和HTTPS证书。如果你的预算和时间都比较紧张还有一条路是使用微信云托管或云开发CloudBase小程序端可以用wx.cloud.callFunction方式请求云函数省去域名备案的流程。但我要提醒你一点如果走云开发路线你的项目架构会发生较大变化后端不再是独立的SpringBoot服务而是云函数。这个选择要在开题时就想清楚不要代码写了一半再换方案。采用自建服务器方案时服务器配置不需要很高1核2G的轻量应用服务器足够支撑毕设演示的并发量。上线前还有一件事必须做在小程序后台配置合法请求域名并且把HTTP改成HTTPS。没有HTTPS微信会直接拦截所有请求。Nginx配HTTPS证书其实不复杂申请免费证书后一段配置就能跑起来server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/yourdomain.pem; ssl_certificate_key /etc/nginx/ssl/yourdomain.key; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }4.3 小程序审核经验如果你的最终目标是真正上线发布到微信平台那审核这一关绕不过去。就膳食健康小程序来说审核被拒最常见的理由是“医疗健康类目资质”问题。微信对涉及医疗、药品、保健功能的类目审核非常严格你的系统如果出现“治疗”“疗效”“药用”等字眼大概率被驳回。解决办法是弱化医疗属性、强化生活记录属性把系统描述为“记录每日饮食、查看营养摄入的辅助工具”而不是“健康诊断系统”。建议文案要避免绝对化表述不要写“可治愈”“能改善某某病”只用“推荐”“建议”“参考”这类词。你的代码里也不能存在隐藏的“治疗”暗示食物名称和推荐文案里的每一个词都值得过一遍。不少同学的审核噩梦都出在这上面改一版文案重新提审等两三天再被驳回来来回回一周就没了。提前把文案规范化这个时间就能省下来。4.4 后端常见的编译与版本问题SpringBoot版本和MyBatis-Plus版本不兼容是最典型的编译报错来源。有些同学从网上找个模板SpringBoot用的是2.7MyBatis-Plus用的是最新版对应SpringBoot3启动时直接报Failed to configure a DataSource或者各种类找不到。这里给你一个稳定的版本组合SpringBoot 2.7.x MyBatis-Plus 3.5.x MySQL 5.7或8.0这个组合经过了大量项目的验证问题最少。还有一类问题是Lombok版本与JDK版本不兼容导致的编译失败。JDK11以上时Lombok版本过旧会报java: java.lang.ExceptionInInitializerError。解决方法是在pom中指定较新版本dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.18.30/version optionaltrue/optional /dependency另一个隐蔽问题是跨域。小程序请求后端时不存在浏览器同源策略限制所以不需要处理CORS但如果你用浏览器直接访问后端接口做测试就可能遇到跨域错误。为了联调方便建议还是加一个CORS配置类允许所有来源访问开发期会舒服很多。5. 拿出来就能用的几个亮点建议5.1 亮点一食物搜索联想在小程序搜索框里输入关键词时通过防抖请求后端接口获取匹配的食物列表下拉显示联想结果。这个功能技术实现非常简单但用户体验提升极其明显。后端就是一个模糊查询接口SELECT * FROM food_info WHERE name LIKE CONCAT(%, #{keyword}, %) LIMIT 10前端加上300ms的防抖即可。5.2 亮点二每日饮食评分卡记录完一顿饭后根据当前摄入量与推荐值的接近程度给出一个60-100的评分评分附带一句话描述热量刚好“搭配不错”热量超标“有点超了晚餐控制一下”。生成规则放在后端前端只管展示。这个功能非常有“产品感”展示时自然加分。5.3 亮点三本地缓存设计小程序端把用户基本信息、今日已记录的数据缓存在storage中进入首页时先渲染缓存再请求接口更新。这个设计在弱网环境下效果明显更重要的是它展现了你对小程序性能优化的理解。实现时注意在用户修改档案或提交新记录后同步更新缓存避免数据不同步。6. 答辩前你应该准备的几个问题答辩不会因为你把代码跑起来就给你高分评委更关心的是“你能不能把系统里的设计决策讲清楚”。以下是我总结的高频追问和应对思路“为什么不用云开发而自建后端”先说明云开发的优点再讲你的考量自建后端可以完整展示后端设计能力表结构设计、接口设计、业务逻辑实现同时便于扩展到其他端云开发适合快速原型验证但不是本系统的核心架构诉求。“热量计算公式的依据是什么”直接回答Mifflin-St Jeor公式这是目前应用最广泛的基础代谢率估算公式然后分别解释男性和女性公式参数差异的来源。能讲清这个公式就能证明你确实研究过营养学基础而不是随便找一个数字。“如果用户记录的数据不准确怎么办”这个问题考察你的容错设计能力。可以回答系统支持食物库的持续维护更新管理员可修正错误食物数据用户可删除和修改历史记录未来可接入图像识别或条码扫描功能减少手工录入误差。即使你只做了前两项这样的回答也能体现你的产品思维。“项目的扩展方向”给出三个方向接入智能设备手环/体脂秤数据、营养师在线咨询模块、基于用户习惯的智能推荐。不要说得太远紧扣现有架构可以扩展的范围表明你的项目有清晰的可生长性。7. 一些实在话做毕设这件事最忌讳的是总想着憋一个大招最后连基础功能都没做完。基于微信小程序的膳食健康管理系统它的完成度比复杂度更重要。先把记录、计算、分析这条主链路跑通把数据做得真实、图表做得好看再去想亮点功能的事情。我见过太多同学一开始就计划做智能识别、做社区、做消息推送最后连基础的食物记录都做得不完整答辩现场演示到一半就卡壳。另外建议你每天写一点开发日志不用长两三句话即可记录今天做了什么、遇到什么问题、怎么解决的。这个习惯在写毕业设计说明书和准备答辩PPT时会有巨大帮助——你不需要靠回忆拼凑开发过程翻日志就能想起来每一个决策的前因后果。同时把项目部署到服务器上给小程序配置好合法域名哪怕答辩是在教室做演示一个能通过真机访问的系统也比只在开发者工具里能跑的系统更有说服力。我在做这个项目的过程中最深的一个体会是很多看起来复杂的系统只要把它拆成一条清晰的业务链路然后一步一步补齐每一个环节其实并没有想象中那么难。饮食记录这个领域数据库表结构简单清晰营养计算逻辑有明确的标准可依据小程序端的界面模式也有大量成熟案例可参考。沉下心按主链路推进每一天都在往终点靠近这个过程本身就是做毕业设计最有价值的部分。
返回列表