1. 立项背景和目标
背景:学生和家长的痛点在于:考试频繁,分数记录分散(纸质试卷、各种App),难以纵向对比成绩趋势;错题整理极其耗时,手抄错题效率低下,且复习时缺乏系统性。
目标:打造一款轻量级微信小程序,帮学生一键录入成绩、自动生成可视化分析报告,并支持拍照/录入错题,一键导出排版好的PDF错题本进行打印。目标是“让提分有迹可循,让错题整理零门槛”。
2. 软件功能、核心功能模块
成绩管理模块:支持单科/多科成绩录入(手动或拍照OCR),按考试名称、日期分类。
数据分析模块:自动生成成绩折线图(趋势)、雷达图(偏科分析)、班级/年级排名预估(若支持多用户数据)。
错题本模块:支持拍照裁剪题目、录入正确答案、解析、错因标签(如“粗心”、“公式不熟”)。
打印导出模块:将错题按科目、知识点、时间智能排版,生成标准A4排版PDF,用户可直接保存打印。
用户中心:家长/学生角色切换,数据云端同步。
3. 业务流程、功能路径描述
录入路径:微信授权登录 → 选择“成绩录入”或“错题录入” → 手动输入/拍照上传 → 系统自动识别或手动编辑 → 保存入库。
分析路径:首页查看“成绩趋势” → 点击某次考试 → 查看单科得分率、排名变化、薄弱知识点关联。
打印路径:进入“错题本” → 勾选需要打印的错题(或一键全选) → 选择排版样式(单栏/双栏) → 生成PDF → 转发给打印店或自己打印。
1. 整体架构和设计思路,不同模块使用的技术栈
整体架构:前端小程序 + 后端API + 数据库 + 文件存储(云存储/OSS)。采用前后端分离架构,前端负责交互与图表展示,后端负责数据处理与PDF生成。
技术栈:
前端(小程序端):微信小程序原生开发(或Uni-app跨端),使用 ECharts 或 F2 实现成绩趋势图表,使用 Canvas 进行图片裁剪和错题排版预览。
后端(服务端):Node.js (Koa/NestJS) 或 Python (FastAPI),负责业务逻辑、API接口。
数据库:MySQL 存储用户、成绩、错题结构化数据。
文件处理:Python (Pillow/ReportLab) 或 Node.js (Puppeteer) 负责将错题图片和文本动态生成为标准PDF文件。
存储:阿里云OSS 或 腾讯云COS 存储用户上传的错题图片。
2. “我”的负责模块和结果(尽可能量化)
负责模块:独立负责前端小程序全栈开发及PDF排版生成服务。
量化结果:
实现了成绩录入、趋势图展示、错题拍照裁剪、PDF导出等 8个核心页面。
优化了错题图片压缩逻辑,将单张图片平均上传体积从 2MB 压缩至 300KB,节省了 85% 的流量和存储成本。
设计了高效的PDF排版算法,支持双栏/单栏自适应,生成一本包含 50道错题 的PDF仅需 3秒。
项目上线/测试期间,累计处理了 N+ 条成绩数据和 M+ 道错题记录(如果有真实数据可以填,没有就写“完成了全流程压力测试”)。
3. “我”遇到的难点、坑,和解决方案
难点1:PDF排版与图片处理。错题图片尺寸不一,直接排版会很乱。
解决:在后端引入了图片自适应缩放算法,根据A4纸宽度动态计算图片高度和位置,并加入了“分页处理”逻辑,确保错题不会被截断。
难点2:小程序Canvas绘图性能瓶颈。错题预览和裁剪时,大图会导致小程序卡顿。
解决:使用 wx.createOffscreenCanvas 进行离屏渲染,并限制前端预览的图片分辨率,只把原图传给后端处理,提升了流畅度。
难点3:成绩趋势图的动态数据渲染。不同科目数据维度不同,图表配置复杂。
解决:封装了一套通用图表配置组件,通过传入不同的数据格式自动适配折线图/雷达图,减少了重复代码。