微信小程序个人日程安排系统毕业设计资源包实战指南

发布时间:2026/10/18 19:55:01
微信小程序个人日程安排系统毕业设计资源包实战指南
简介面向计算机专业学生这是一份微信小程序个人日程安排系统的毕业设计完整项目采用微信小程序开发工具搭配Java后端与MySQL数据库实现了个人中心、用户管理、重要日管理、工作日程管理、会面管理、用餐管理、日程管理及系统管理等模块可覆盖日常个人日程规划场景。压缩包共1175个文件以Java后端源码、Vue与JavaScript前端逻辑、WXML与WXSS页面结构样式、PNG图片素材、JSON配置及SQL脚本为主整体大小约40.44MB。已有160人学习浏览。除完整源码外资源还附带演示视频、说明文档、构建运行脚本与Eclipse工程配置备份便于导入开发工具后快速运行理解系统模块划分参考界面前端与后端接口设计也可直接作为毕业设计交付基础实用性与参考价值兼顾。1. 这套个人日程安排系统毕设资源包为什么值得你花两小时研究刚拿到【微信小程序毕业设计】个人日程安排系统开发项目(源码演示视频说明).rar 时我的建议不是急着解压而是先把它当成一份“可以复现的产品需求”来拆。这个标题翻译成一句话就是给你一套能跑通的小程序前端、一个服务端、一份数据库脚本以及演示和说明让你在毕业设计里不用从零开始。资源本身不神秘真正拉开差距的是你能不能在两小时内把它跑起来并在答辩前把它改造成带个人思考的系统。这篇笔记适合三类人第一次做全栈毕设的学生、想快速了解小程序前后端联调流程的同学以及只需要一个基础项目做二次开发的开发者。我会从拆资源包开始一步步讲到改造和避坑并给你一份答辩前的检查单。2. 拆开资源包源码、演示视频、说明文档各承担什么角色这类带“源码演示视频说明”的毕业设计压缩包是一个完整交付物而不是单纯的代码压缩包。如果你只盯着源码看会漏掉一半信息。我一般会按“先看演示视频、再看说明文档、最后读源码”的顺序处理。这样做的原因是视频定义了“应该有什么效果”文档定义了“需要什么环境”源码负责回答“怎么实现的”。顺序反了你会在代码里迷路然后觉得到处都是玄学。2.1 源码目录结构一眼分清小程序端、服务端和配置文件项目根目录通常由四部分组成小程序前端、服务端、数据库脚本、文档。目录可能叫miniprogram、client、frontend也可能叫server、backend、api但结构基本逃不出下面这张图project-root/ ├── miniprogram/ # 小程序前端代码 │ ├── pages/ │ │ ├── index/ # 日程列表页 │ │ ├── add/ # 新增/编辑日程页 │ │ ├── calendar/ # 日历视图页部分项目没有 │ │ └── mine/ # 个人中心页 │ ├── components/ # 自定义组件比如日期选择器 │ ├── utils/ │ │ ├── request.js # 封装 wx.request │ │ └── date.js # 日期格式化工具 │ ├── app.js │ ├── app.json │ └── config.js # 前端全局配置 ├── server/ # 服务端常见用 Koa/Express/Flask │ ├── routes/ │ ├── controllers/ │ ├── models/ │ ├── app.js │ └── package.json ├── db/ # 数据库初始化脚本 │ └── schedule.sql ├── doc/ # 说明文档 │ └── README.md └── package.json # 可能没有取决于是否把服务端独立建包判断代码归属有一条捷径看到app.json、app.wxss和pages/开头的是小程序端看到package.json、routes/和express()之类的则是服务端。数据库脚本一般以.sql结尾里面全是CREATE TABLE。配置文件的特征也很明显小程序端有config.js服务端则可能是.env或config/index.js。先把这些顶层文件找出来后续改接口地址和数据库密码时就不会找错地方。# 在解压目录下快速定位三种关键文件 find . -name *.sql -o -name config.js -o -name project.config.json | sort这条命令的价值在于它能立刻告诉你老项目把配置放在哪个位置。我见过不少项目把所有敏感信息写在config.js里答辩前因为没改数据库密码当场报错。先定位文件再动代码是省时间的好习惯。如果解压后还发现dist、node_modules这种目录一般不用管它们要么是构建产物要么是依赖包不是你要改的地方。2.2 演示视频要怎么看它其实是需求文档演示视频通常八到十五分钟覆盖登录、主页面加载、新增日程、编辑、完成/删除、日历切换。很多人把视频快进过去这是浪费。演示视频其实是可执行的需求文档它告诉你页面跳转关系、按钮文案、操作顺序而这些信息在静态代码里反而不明显。边看边记录比读源码快得多。我推荐用一张表格做记录时间点操作页面/模块值得注意的字段00:12输入账号密码登录登录页账号是 demo还是 openid 自动登录00:30进入主页加载当日日程日程列表页默认按时间排序还是倒序01:05点击加号填写标题、时间、重复规则新增页有没有分类、优先级、地点等扩展字段02:20点击日程进入详情并编辑详情页状态字段如何展示03:40长按日程删除列表页有没有二次确认弹窗05:00切换周视图/月视图日历页日期数字上有没有小红点拿这张表去对照源码你会发现很多“视频里有但代码里没有”的功能。不要慌这很常见。视频可能是早期版本录的源码是最终版本两者偶有出入。处理办法是以源码为准把视频当作交互预期而不是验收标准。真正需要照做的只有“登录、新增、编辑、删除”这条主链路其他都算加分项。2.3 说明文档先看这几节能省三个小时说明文档是压缩包里最容易被低估的资产。大多数项目会写环境要求、数据库初始化、接口列表和运行步骤。不要从头到尾咬牙读先跳着看三块。第一是“环境版本”例如 Node.js 版本、MySQL 版本、微信开发者工具基础库版本。版本不对后面会出现一堆黑匣子问题比如npm install装一半报错、SQL 导入失败表面看是命令问题其实是版本兼容问题。第二是“数据库初始化”它通常会给你一句source或让你把.sql文件导入这一步如果漏了后端一启动就连不上表。第三是“测试账号”或“演示账号”没有它你连登录页都进不去。一般说明文档会写admin/123456但也可能藏在“常见问题”里找不到就去源码里搜123456或password。# 在文档和源码里快速搜 demo 账号 grep -rIn demo\|123456\|password\|测试账号 --include*.md --include*.js --include*.sql .这里要提醒一句说明文档里写的运行步骤是按作者的环境写死的不要照着敲一遍就说跑通了。你要把它当成一张“环境拓扑图”理解每个命令背后要启动哪个进程、依赖哪个数据库而不是命令本身。比如文档说npm run dev你要知道它实际执行的是node app.js还是nodemon这决定改完代码要不要重启。文档读完你应该能画出一张链路图小程序 → 请求 → 服务端 → MySQL后面排错就是沿着这条链逐段查。能画这张图才算真正读懂了说明文档。3. 跑通项目从工具准备到完成一次日程增删改查的最小路径现在解决一个最实际的问题把资源包变成能在你电脑上运行的系统。很多人卡住不是因为代码难而是因为环境不完整或顺序不对。我的建议是严格按照“准备工具 → 导入前端 → 初始化数据库 → 启动服务端 → 联调验证”的顺序走每做完一步就先用最简单的方式确认不要等最后一起点。这样出了问题能很快确认是哪一段而不是对着黑屏猜。3.1 准备微信开发者工具、数据库环境与服务端运行环境先确认本机已安装三样东西微信开发者工具、Node.js或项目对应的运行时有些老项目用 Java/Koa/Flask以及 MySQL。项目说明文档里一般会标明需要哪个版本。这里给一组最小检测命令node -v # 要求 12 以上建议 16/18 LTS npm -v # 与 Node 匹配即可 mysql --version # 5.7 和 8.0 都能跑但字符集要统一如果本机已有更高版本 Node不用急着降级。多数个人日程项目只用了基础 APINode 16 到 20 都能跑但如果npm install编译原生模块失败再考虑用nvm切换到项目指定版本。微信开发者工具直接装“稳定版”即可导入项目时需要选择“小程序”而非“小游戏”。这里有个细节如果你没有注册小程序 appid工具允许你使用测试号但测试号无法调用订阅消息等部分开放接口。为了后面改造演示建议花十分钟去公众平台注册一个个人类型小程序拿到自己的 appid 再继续。这一步不需要付费个人主体就能注册唯一要做的就是实名验证。3.2 导入小程序端修改 appid 与接口地址打开微信开发者工具点击“导入项目”选择解压目录里的miniprogram文件夹如果项目把前后端放在同一目录就选择包含app.json的那个文件夹。导入成功后第一件事不是点编译而是修改两个文件。第一个是project.config.json把appid改成你自己的{ appid: wx1234567890abcdef, compileType: miniprogram, libVersion: 2.33.0, projectname: personal-schedule }第二个是前端接口地址。这个文件在不同项目里可能是config.js、api.js也可能藏在utils/request.js顶部。我一般先用全局搜索定位baseUrlgrep -rIn baseUrl\|BASE_URL\|apiBase\|localhost --include*.js miniprogram然后把localhost改成你电脑在局域网下的 IP例如module.exports { baseUrl: http://192.168.1.100:3000/api/v1, timeout: 10000 };这里有两个关键点。第一不要用localhost因为真机预览时手机访问不到你电脑上的localhost它访问的是手机自己。第二如果服务端不在3000端口这里要改成服务端实际监听端口。改完接口地址后先编译一次确认没有语法错误再继续。这时候页面可能白屏因为服务端还没启动别急下一步启动服务端。3.3 初始化数据库并启动服务端数据库脚本通常长这样建库、建表、插入测试数据。打开 MySQL 命令行先建库再导入脚本CREATE DATABASE IF NOT EXISTS schedule_db DEFAULT CHARACTER SET utf8mb4; USE schedule_db; SOURCE /your/path/db/schedule.sql;注意SOURCE后面跟的是绝对路径不要写相对路径。导入完成后用下面这句快速确认表是否存在SHOW TABLES;看到的表一般有user、schedule、category也可能有remind。如果你的脚本导入报错先检查字符集是否是utf8mb4再检查是否在USE schedule_db之后才执行。服务端要能连上数据库还得改服务端配置。找到server下的.env或config/index.js把数据库名、用户名、密码改成你自己的module.exports { db: { host: 127.0.0.1, user: root, password: your_password, database: schedule_db }, port: 3000 };配置改完后启动服务端。Node 项目的常见命令是cd server npm install npm run dev如果npm install报权限错误可能是没有用管理员权限或目录被锁定如果报某个包版本不存在多半是项目太老需要手动指定版本。启动后终端会打印监听端口通常是3000或8080。看到日志输出“数据库连接成功”或者用浏览器访问http://127.0.0.1:3000/health能返回 JSON说明服务端已经就绪。3.4 联调验证先用接口测试工具跑通后端再回到小程序操作不要急着在小程序端点按钮先用 Postman、Apifox 或 curl 单独验证后端接口。这样可以隔离问题接口通了说明问题在小程序端接口不同说明问题在后端。假设说明文档里给了登录接口你可以这样测试curl -X POST http://127.0.0.1:3000/api/v1/user/login \ -H Content-Type: application/json \ -d {username:demo,password:123456}能返回token或用户信息继续下一步如果返回 404先去查路由路径如果返回 500看服务端终端日志通常能直接看到 SQL 报错。后端验证通过后再回到微信开发者工具点“编译”。按演示视频的顺序操作输入账号密码登录进入首页后新增一条日程比如“明天上午 9 点开组会”保存后看列表是否出现这条记录再点进详情编辑时间最后删除。这一串操作全部成功才叫真正跑通。跑通之后我习惯立刻在小程序端把baseUrl从127.0.0.1改回局域网 IP 并用真机预览一次因为后面答辩大概率是在真机上演示早发现网络问题比晚发现好。另外每次重启服务端后建议重新执行一次curl健康检查避免服务端启动了但数据库连接失败导致小程序端报 500。4. 把“演示品”改造成“能答辩的作品”四个必改点跑通只是开始。毕业设计评分通常不只看出程序能不能点更看重你有没有考虑真实场景。个人日程安排系统最常见的问题是“只有增删改查没有提醒没有优先级没有数据统计”。下面这四个改造点工作量不大但能明显提升项目的完整度和答辩时的可讲性。每一个我都给出对应的改动思路和关键代码你可以直接照着做。4.1 添加日程提醒用订阅消息替代本地模拟通知很多初学者会想用setTimeout或setInterval在微信小程序里做定时提醒。这个做法在小程序端行不通小程序进入后台后定时器会被系统挂起用户关掉微信后更不会执行。真正能触达用户的方案是微信订阅消息或者使用服务端定时任务发送。对于毕设项目订阅消息的实现成本最低演示效果也直观。前提是你要在微信公众平台申请一个“日程提醒”模板拿到模板 ID。在小程序端用户新增日程时先请求订阅授权wx.requestSubscribeMessage({ tmplIds: [订阅消息模板ID], success(res) { if (res.errMsg requestSubscribeMessage:ok) { wx.setStorageSync(remind_open, true); } else { wx.showToast({ title: 无法发送提醒, icon: none }); } }, fail: () wx.showToast({ title: 订阅失败, icon: none }) });服务端收到创建日程的请求后按计划时间调用微信发送接口。这里最核心的代码是获取 access_token 并调用订阅消息接口const got require(got); async function sendSubscribeMessage(openid, templateId, time, desc) { const token await getAccessToken(); // 从缓存取不要每次都要 const url https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token${token}; await got.post(url, { json: { touser: openid, template_id: templateId, page: pages/index/index, data: { time: { value: time }, thing: { value: desc.slice(0, 20) } } } }); }需要说明的是订阅消息要求用户主动点击授权一次才能发送一条且模板字段有长度限制。因此演示时要设计成“先新增日程并授权再到服务端手动或定时触发发送”避免对着评委解释微信政策。这段代码加入后你的项目就从“记事本”变成了“提醒工具”这是答辩时一个很自然的亮点。如果项目本身是云开发架构也可以直接使用云函数定时触发器但标题里那种自建后端项目用订阅消息更合适。4.2 数据模型加一个 priority 字段让日程列表变成优先级矩阵现成的表结构通常只有标题、时间、状态这几个字段。真实日程管理场景里用户会希望把重要事项排在最前面。常见做法是给schedule表加一个priority字段普通日程为 0重要日程为 1。用一条ALTER TABLE就能完成迁移ALTER TABLE schedule ADD COLUMN priority TINYINT NOT NULL DEFAULT 0 COMMENT 0普通,1重要 AFTER status; ALTER TABLE schedule ADD INDEX idx_priority_time (priority, plan_time);加索引是为了让排序查询走索引数据量很小时看不出差别但评委如果问你“为什么这么加”你可以把这个理由讲出来。前端新增/编辑页加一个开关或选择器提交时把priority一起传过去。列表查询语句改成SELECT id, title, plan_time, status, priority FROM schedule WHERE user_id ? ORDER BY priority DESC, plan_time ASC;前端渲染时对priority 1的记录加一个“重要”标签比如红底白字。这个改动看起来简单但它让系统从“按时间堆叠”变成了“按价值排序”在答辩中属于“业务思考”而不是“功能罗列”。如果还想更进一步可以把priority扩展成枚举值低、中、高分别对应 1、2、3查询时用ORDER BY FIELD(priority, 3, 2, 1)这样能聊的东西更多。4.3 个人中心页增加统计视图用一周数据验证系统价值日程系统做完 CRUD 之后下一步通常是统计。个人中心页可以显示“未来 7 天日程数”“本周完成率”“今日已完成”。这些数据用一条 SQL 聚合就能取到不需要额外引入图表库。后端增加一个统计接口SELECT DATE(plan_time) AS day, COUNT(*) AS total, SUM(CASE WHEN status 1 THEN 1 ELSE 0 END) AS done FROM schedule WHERE user_id ? AND plan_time CURDATE() - INTERVAL 6 DAY GROUP BY DATE(plan_time) ORDER BY day;接口返回 7 天数据后小程序端不需要引入重的图表组件。我一般会用简单的 view 模拟柱状图把每天的完成率转成百分比再通过setData更新。这样既避开 ECharts 体积问题也展示了你对“轻量化渲染”的理解。核心代码片段如下const days res.data.map(item ({ date: item.day.slice(5), done: item.done || 0, total: item.total || 0, percent: item.total 0 ? Math.round(item.done / item.total * 100) : 0 })); this.setData({ days });在wxml里用一个view根据days[index].percent设置高度。这个功能属于“可视化和数据洞察”放个人中心页几乎不会影响原有演示流程却能让评委觉得你做了完整的业务闭环。需要注意的坑是时区问题如果服务端和数据库时区不一致CURDATE()取到的日期可能和用户本地日期差一天。解决办法是在服务端统一用Asia/Shanghai时区启动或者在 SQL 里用DATE_FORMAT(plan_time, %Y-%m-%d)配合DATE_ADD做位移。4.4 登录逻辑换成 openid 与自动注册避免死账户老的毕设项目通常使用“用户名密码”登录用户表里预置一个测试账号。这在演示时没问题但显得不真实。小程序生态里更合理的做法是wx.login拿到code后端向微信接口换取openid然后判断用户是否存在不存在就自动注册。这样用户第一次进入系统就是登录不需要手动注册账号。后端代码示意const { code } req.body; const { openid } await getOpenIdByCode(code); // code2session let user await findUserByOpenId(openid); if (!user) { user await createUser({ openid, nickname: 微信用户, avatar: , created_at: new Date() }); } const token sign({ userId: user.id }, SECRET, { expiresIn: 7d }); res.json({ token, user });小程序端只需要调用wx.login获取 code然后请求登录接口wx.login({ success: async (res) { const { code } res; const result await wx.request({ url: ${baseUrl}/user/login, method: POST, data: { code } }); wx.setStorageSync(token, result.data.token); } });这里有两个坑需要提前说明小程序的appsecret只能放在服务端不能写进前端代码code只能用一次不能反复使用。如果你不想动登录逻辑至少要把原来写死在代码里的测试账号改成环境变量。否则代码一旦公开等于把你的数据库后台也公开了。改成 openid 登录后还能在用户表里加一个last_login_at字段展示“最近登录时间”这是成本极低的小亮点。接口封装时记得在utils/request.js里统一带上Authorization头否则后端 token 校验会一路 401。5. 避坑清单日程小程序毕设最容易翻车的 5 个隐藏问题下面这些坑我都有过真实踩坑记录整理成“现象 → 原因 → 解决”的格式你可以直接对着排查。每个问题单独看都很小但组合起来足以让一次演示彻底翻车。5.1 开发者工具正常真机预览白屏或请求超时现象电脑上的微信开发者工具里一切正常拿手机扫码预览后页面白屏或者点击登录一直转圈。原因小程序端把接口地址写成了localhost或127.0.0.1手机访问的是手机本地根本到不了你的电脑另外开发者工具默认打开了“不校验合法域名”这个设置只对工具内调试生效真机上会直接拦截非 HTTPS 请求。解决把baseUrl改成电脑的局域网 IP例如http://192.168.1.100:3000/api/v1同时保证手机和电脑在同一个 Wi-Fi。如果项目没有 HTTPS 证书小程序后台的“开发设置-服务器域名”里无法添加非 HTTPS 域名答辩用“真机调试-局域网模式”可以避开但你要提前确认手机能访问电脑端口。实际操作用ipconfigWindows或ifconfigmacOS查到本机 IP然后随手用手机浏览器访问http://192.168.1.100:3000/health验证一次比在小程序里猜可靠得多。5.2 接口一直 404代码里路径看起来没错现象启动服务端后前端请求登录接口控制台显示 404但接口路径和后端路由看起来完全一样。原因最常见的是后端有统一前缀比如路由写在/api/v1/user/login但前端baseUrl里已经写了/api/v1请求最终变成/api/v1/api/v1/user/login还有一种是服务端监听了/api但前端多写了端口或路径大小写不一致。解决先用浏览器或 curl 直连后端接口确认可用的完整 URL 是什么样的再对着前端baseUrl和url拼一层。不要用视觉比对直接复制最终地址到浏览器打开最有效率。如果curl得到 404再看后端路由表用grep -rn router.*login server/routes找到真正注册的路径。5.3 删除日程后列表不刷新必须手动下拉现象点击删除提示“删除成功”但页面列表里的那条记录还在要重新下拉或退出页面再进来才消失。原因删除成功的回调里只弹了 toast没有删除本地数据也没有重新拉列表。前端data里的数组还是旧数据视图自然不会更新。解决在删除回调里同步更新data。如果后端没有返回剩余列表就先用setData把当前项从数组里过滤掉更稳妥的方式是调用列表接口重新请求wx.request({ url: ${baseUrl}/schedule/${id}, method: DELETE, success: (res) { if (res.data.code 0) { this.setData({ list: this.data.list.filter(item item.id ! id) }); wx.showToast({ title: 已删除, icon: success }); } } });这里还有个隐藏问题如果列表接口本身返回按时间排序删除后重新拉列表会比 filter 更可靠因为 filter 只处理了当前页数据删除位置附近的列表顺序不会变。我的习惯是“删除后直接重新拉首页列表”这样成本低且能顺便刷新状态。注意请求失败时也要恢复按钮状态否则界面会停在“删除中”。5.4 数据库脚本导入报错或者服务端连不上数据库现象执行SOURCE schedule.sql时报错可能是Unknown database、语法错误或者导入成功后后端起不来日志提示Cant connect to database。原因第一建库语句和建表语句顺序问题部分脚本不会自己建库你需要先建库再导入第二字符集不统一脚本里有 emoji 或中文字段而表的字符集是latin1第三服务端配置里的数据库密码、库名与本地不一致。解决导入前先手动执行一次CREATE DATABASE IF NOT EXISTS schedule_db DEFAULT CHARACTER SET utf8mb4;然后重新USE schedule_db再SOURCE。服务端连不上时先检查.env或配置文件里db.user和db.password不要想当然认为和 MySQL 命令行输入的账号一致。如果还是不行在服务端代码里临时加一行console.log(config.db)输出配置看看实际读到的是什么。血泪经验很多同学把密码写错成默认的123456但自己的 MySQL root 密码是别的值这一行日志能立刻救回来。5.5 说明文档、演示视频和源码三者对不上现象说明书写着“登录就是微信一键登录”但源码里是用户密码视频里有日历视图代码里找不到对应页面。原因很多毕设资源包是不同阶段打包的视频是演示时录制说明文档是早期版本源码是最终提交也可能是从别的项目改造时把文档留在了原项目。解决以源码为准视频只当作“预期效果”的参考。找不到视频里的页面时别按页面名找直接搜索拼音或关键词。比如视频里点了“统计”源码里可能叫statistics或charts用全局搜索字符串最有效grep -rIn 统计\|chart\|calendar\|日历时 --include*.js --include*.wxml --include*.json .如果确实没有实现那就在答辩材料里明确说明“我在原项目基础上增加了统计功能”而不是隐瞒。比起让评委发现功能对不上主动讲清楚改了什么更能拿分。文档里的接口列表可以当作参考但真正可用的接口一定以服务端routes目录为准。6. 答辩前的三个验证给项目装上“后悔药”我发现最容易翻车的时候不是开发而是答辩前十分钟。电脑休眠唤醒后 MySQL 没启动或者服务端被上一个演示同学占用端口都是真实事故。所以我会准备一个三分钟的检查流程每次演示前按顺序做一遍。第一项确认数据库能连上。直接执行一条最简单的查询mysql -u root -p -e USE schedule_db; SHOW TABLES;能看到表结构说明数据库服务正常。看不到就检查 MySQL 是否启动。第二项确认服务端还活着。用一行命令看健康检查接口curl -s -o /dev/null -w %{http_code}\n http://127.0.0.1:3000/health返回200就继续如果超时或 502回终端重启npm run dev。第三项确认小程序真机是亮的且不是休眠前打开的旧进程。我最常用的是“清后台重新进入”的方式因为旧进程可能还连着旧接口或缓存了错误数据。这三个检查跑完再按“登录 → 新增 → 编辑 → 删除 → 查看统计”的路径快速过一遍基本就能稳住正式演示。如果你还想多做一步可以把这三个检查写成一个check.sh脚本丢在桌面因为脚本里记录了端口和账号也帮你固定住“项目应该怎么启动”的记忆。我就是靠这个习惯救过自己一次当时答辩前电脑刚重启MySQL 服务没自启我跑了一遍脚本才发现半分钟解决而不是整个人愣在台上。希望这个清单也能帮到你让毕业设计在演示时少一点玄学多一点底气。本文还有配套的精品资源点击获取