从记一笔账到可用的校园账本:AI 协作迭代记录与心得

这次作业选择开发一个大学生生活费记账桌面 GUI,包含记录、统计和提醒。我的总体要求是让 AI 自己跑通、迭代和验证,并在执行中保存截图。下面的迭代要求由 AI 根据这个授权拆解,并非我在每一轮重新提出的指令;代码修改、程序操作和测试也由 AI 实际执行。

程序采用 Python 3.12、Tkinter/ttk 和 SQLite,数据保存在本机。正式账本初始为空,截图和测试使用独立账本。

初始开发提示词

请开发一个面向大学生的生活费记账桌面 GUI,帮助用户记录日常收支、了解消费情况并控制预算。

使用 Python 3.12、Tkinter/ttk 和 SQLite,不增加第三方依赖,提供可双击启动的入口。界面使用中文,以米白色和深绿色为主,布局清晰,操作方便。

程序需要支持:

  1. 记录收入和支出,包含日期、金额、分类和备注。
  2. 按月查看收入、支出、结余和账单明细。
  3. 设置月预算,并提供预算提醒和每日记账提醒。
  4. 本地保存数据,关闭后重新打开仍能查看。

请先完成可以运行的基础版本,自行启动和检查,并保存真实运行截图。正式账本初始为空,演示和测试使用独立数据库。

基础版本:先让一条流程跑通

基础版本先实现新增收入、支出和按月查看账单。使用四笔样例:生活费收入 1500 元,餐饮支出 25.50 元、交通支出 6 元、学习支出 48 元。先确认“输入→保存→列表显示→月度汇总”可以连起来,再继续扩展。

01_基础版

图 1:v0.1 基础版实际窗口,四笔样例显示收入 1500.00 元、支出 79.50 元、结余 1420.50 元,首次运行流程通过。

第一轮迭代:把记录功能补完整

修改要求(AI 自行拆解): 账单应能修改和删除;错误金额不能入账;增加分类和备注搜索,避免记录多了以后只能逐条查找。

实际改动: 增加选中账单后的编辑和删除操作,删除前确认;校验日期、正金额和两位小数;按收支类型调整分类;补充备注搜索和操作反馈。金额统一换算成整数“分”后保存,避免直接用浮点数累计。

验证结果: AI 在真实界面中输入 -1,程序提示“金额必须大于零”,原来的四笔账单和统计没有改变。新增、修改、删除和重启后的数据保存也使用隔离测试账本检查。

02_迭代1_记账

图 2:v0.2 第一轮迭代后的记录界面,编辑、删除、搜索和清空入口可用,原来的四笔账单仍正确显示。

02b_迭代1_金额校验

图 3:v0.2 真实输入负金额后的校验提示,错误输入被拒绝,已有四笔记录和统计不变。

第二轮迭代:统计和提醒要能解释结果

修改要求: 增加分类支出和每日支出图表;每月单独设置预算,达到 80%、用完和超支时分别提醒;默认 21:00 提醒当天尚未记账,并避免同一天重复弹窗。

实际改动: 增加概览、账单、预算与提醒三个页面。结余按“收入-支出”计算,预算剩余按“预算-支出”计算,收入不会自动增加预算。提醒时间和开关可以保存,提醒状态写入数据库,重启后也不会重复弹出同日同级提醒。

验证结果: 第二轮程序已实际运行,分类柱状图和每日支出图使用同一月份的支出数据。预算临界点、每日提醒和持久化去重进行了自动化检查,提醒弹窗另用固定测试时钟检查,不修改系统时间。

03_迭代2_统计

图 4:v1.0 第二轮初次运行的统计页面,学习 48.00 元、餐饮 25.50 元、交通 6.00 元,与账单汇总一致。

04_预算提醒

图 5:v1.0 独立提醒样例,预算 1000.00 元、支出 800.00 元,恰好达到 80%,实际弹出警戒提醒,剩余 200.00 元正确。

05_记账提醒

图 6:v1.0 使用独立空账本和固定时钟 2026-10-10 21:00,当天无记录,实际弹出“每日记账提醒”;系统时间没有修改。

验证过程:既核对数字,也检查真实窗口

固定样例的预期结果先独立算出,再与程序比较:

项目 独立计算 程序结果
当月收入 1500.00 元 1500.00 元
当月支出 25.50+6.00+48.00=79.50 元 79.50 元
当月结余 1500.00-79.50=1420.50 元 1420.50 元

后端测试覆盖非法金额、日期和月份、增改删、跨月统计、搜索、预算以及提醒设置。预算设为 100 元时,分别检查支出 80 元、100 元、100.01 元,对应警戒、用完和超支;同时检查同日重复调用和关闭重启后的去重。每日提醒检查 21:00 前后、当天已有记录及次日重新提醒。

代码审查与窗口验证还发现了两个仅看计算结果不容易发现的问题:

  1. 提醒弹窗停留到下一次定时检查时,回调重入会让后续定时链停止。独立代码审查并模拟嵌套回调复现后,修正为重入分支继续安排下一次检查。
  2. 窗口缩到 1060×760 后,编辑状态的“取消编辑”按钮被截断。量测控件位置后压缩表单间距,并补做最小窗口检查。

图表的延后绘制回调也固定了月份参数,避免切换月份时混用旧界面与新数据。

最终通过 51 项自动化测试:31 项后端测试、20 项 GUI 组件测试。组件测试创建真实 Tk 控件并调用操作回调,提示框在测试中被替换。追加的回归用例确认:弹窗期间定时检查重入仍会继续安排下一次检查,旧定时任务被替换、关闭时取消;最小窗口下三个页面的操作按钮完整显示;快速切换月份后图表月份和数据一致。原始输出保存在 docs/verification/unittest.txt 和 gui-tests.txt。

06_最终概览

图 7:v1.0 修复后的最终概览,收入 1500.00 元、支出 79.50 元、结余 1420.50 元;预算 1000.00 元,剩余 920.50 元。使用比例 7.95% 显示为一位小数 8.0%,提醒等级使用整数金额判断。

07_最终账单

图 8:v1.0 最终账单页面,四笔样例金额准确,表单和编辑、删除入口完整。之后另在演示库实际新增 0.01 元,再编辑为 0.02 元,支出依次更新为 79.51 元、79.52 元;删除确认选择“否”后记录仍在,关闭重启后修改和预算仍保留。确认删除的业务逻辑另在隔离测试库验证。

心得

最大的意外是,基础功能通过测试以后,继续检查窗口和事件循环,仍然发现按钮截断和提醒定时链停止。前者需要在具体窗口尺寸下看控件,后者需要考虑弹窗停留时事件循环还会继续运行。功能“有了”不等于使用过程已经可靠。

AI 写出基础功能和补测试的速度很快,但我更看重它能否把发现的问题复现、修正,再验证。固定样例的交叉核算让我能判断统计是否正确,分阶段截图则能说明每轮到底改了什么。这次协作让我体会到,需求、实现和验证必须互相对应,成果才有依据。

posted @ 2026-10-10 19:57  AlvinQiu  阅读(4)  评论(0)    收藏  举报