用 AI 开发校园消费记账 GUI 的迭代与验收记录
这次软件工程作业,我选择了“个人校园消费记账 GUI”。食堂、外卖、交通和打印都是校园生活中经常发生的支出,我希望通过一个桌面程序记录这些消费,并查看每月花了多少钱、预算还剩多少。开发与迭代由 AI 辅助完成,之后另做独立验收。最终共执行 52 项检查,46 项通过、6 项失败,结论为部分通过。
项目需求与实现
程序使用 Python、Tkinter、SQLite 和 matplotlib,账单保存在本地 SQLite 数据库中。记账页提供新增、编辑、删除、日期和分类筛选;统计页显示月支出、剩余预算、日均消费、环比与图表;提醒页管理饭卡充值、宿舍水电等事项。提醒在程序启动时检查到期和逾期项。
校园消费的重复性比较强,所以程序增加了食堂午餐、晚餐、外卖、奶茶、公交和打印等六个快捷模板。点击模板后可以确认金额并保存,也可以复制已有账单作为今天的新记录。账单可以按当前筛选导出 CSV。
第1轮 初版
本轮开发需求:
这是我的软件工程课程作业,请在当前项目文件夹中开发一个适合大学生日常使用的“个人校园消费记账”桌面 GUI。使用 Python 和 Tkinter 实现界面,用 SQLite 保存数据,关闭程序后再打开,账单和设置仍然保留。
界面分为记账记录、统计分析、提醒中心三个页签。记账时可以输入金额、分类、消费日期和备注,支持新增、编辑、删除,并按分类和备注关键词查询。分类预设为食堂、外卖、交通、学习、日用、娱乐、其他;日期默认今天。金额为空、不是数字、为零或负数以及日期不合法时,要提示错误。
统计页显示指定月份的总支出、各分类金额和笔数、每日支出、日均消费,以及月预算和剩余额度。月预算默认 1500 元,可以修改并保存;使用达到 80% 时给出警告,超支时用明显颜色提示,顶部显示预算使用进度。
提醒中心可以添加饭卡充值、宿舍水电等事项,填写标题、提醒日期、可选预计金额和备注,支持标记完成与删除。启动程序时提示已到期但未完成的事项,以及预算即将用尽或超支的情况。请提供程序入口、依赖说明、README 和可用于验收的样例,让我能够按说明运行。
开发记录中的初版已经搭建了记账、统计、提醒三个页签,完成了本地存储和预算进度显示。但录入主要依靠手动填写,统计偏表格,还没有账单导出功能。
第2轮 第一次迭代修改
这一轮主要改善连续记账的体验。同类消费反复填写比较麻烦,日期需要手动输入,每保存一笔都弹窗也会打断操作。另外,仅看统计表格不容易判断消费结构,所以需要增加图表。
本轮修改要求:
请在现有校园消费记账程序上做第一次迭代,重点改善连续记账的操作体验和统计展示。
记账页增加六个快捷模板:食堂午餐 12 元、食堂晚餐 15 元、外卖 25 元、奶茶 12 元、公交 2 元、打印 5 元。点击后自动填写金额、相应分类和备注,让我确认后再点击保存,不要点击模板就直接入账。奶茶归娱乐,公交归交通,打印归学习。日期输入框旁增加“今天”和“昨天”按钮。
新增、编辑和删除成功后,在底部状态栏显示操作结果,避免每保存一笔都弹出成功对话框;输入错误仍然需要明确提示,删除前保留确认。
统计页除了原有数值和分类表格,再用 matplotlib 显示分类支出饼图和每日支出柱状图。图表应随所选月份刷新,中文标签正常显示,月份没有数据时显示空数据说明。请保留原有账单、预算和提醒功能,并更新功能说明与验收样例。
这一轮增加了快捷模板和日期按钮,将常规操作结果显示在状态栏中,并加入分类饼图和每日柱状图。最终验收检查了模板填充结果、日期按钮和图表数据。
第3轮 第二次迭代修改
这一轮补充数据整理和消费比较功能。账单需要能够导出,统计页需要看出本月比上月花多了还是花少了;对重复消费,希望直接复制已有记录,再确认保存。同时增加日期区间筛选和月份切换,减少手动操作。
本轮修改要求:
请在上一轮的基础上做第二次迭代,补充账单导出、月度比较和重复消费录入功能。
记账列表增加起始日期和结束日期筛选,可以与分类、备注关键词一起使用;起止日期留空时不限制对应边界。增加“导出 CSV”按钮,按当前筛选条件导出账单,字段包含 ID、日期、分类、金额、备注和创建时间,金额显示两位小数,使用 UTF-8 BOM 编码并让用户选择保存位置。没有筛选结果时给出提示。
选中账单后可以点击“复制一笔”,将金额、分类和备注填入表单,把日期改成今天,确认后保存为一个新 ID 的账单,不能覆盖原记录。
统计页增加“较上月”指标,显示当前所选月份相对上个月的金额差额和百分比,提示行显示上月合计。上月没有支出时给出合适说明,避免除以零。增加“上月”和“下月”按钮,正确处理一月和十二月的跨年切换,切月后同步刷新各项统计与图表。请更新 README 和迭代记录,并提供筛选导出、复制账单、环比和跨年切月的检查样例。
最终程序可以按当前筛选条件导出 CSV,显示环比差额与百分比,并通过按钮切换月份。复制账单时,原记录的金额、分类和备注会填入表单,日期改成今天;确认保存后产生新 ID,原记录保留。
我如何验证结果
验收使用真实 SQLite、Tkinter 控件和 matplotlib 图表,在独立测试数据库里运行,原账本测试前后的哈希相同。弹窗和文件选择由脚本接收或提供响应,未宣称进行了真人鼠标全流程操作。
我用可手算的样例检查统计。10 月四笔消费为 12.50、25、2、5 元,预期合计 44.50 元;另加 9 月 20 元和 11 月 7 元,检查月界限。10 月 2 日有 25 元和 2 元两笔,日合计应为 27 元,实际结果一致。
GUI 测试将一笔 12.50 元账单编辑为 15.50 元,再使用 12 元快捷模板,月统计得到 27.50 元;上月为 20 元时,环比差额为 +7.50 元,37.5% 按界面格式显示为 +38%。编辑、复制和删除后,都检查了列表与统计是否同步。
我还将 10 月食堂的两笔账单导出 CSV,读取 15.50 元和 12.00 元,用 Decimal 独立求和得到 27.50 元,与同范围记录一致。随后补入外卖、学习和交通数据,月总额为 59.50 元,检查了饼图各分类比例和每日柱状图的金额。


验收发现的问题
| 问题 | 实际现象 | 后续改进方向 |
|---|---|---|
| 默认窗口布局 | 1040 像素宽度下导出按钮未显示;加宽到 1400 后显示 | 将筛选条件和操作按钮分成两行,检查最小窗口尺寸。 |
| 特殊数值 | inf 消费、NaN 或 inf 预算、inf 提醒金额被接受 | 在新增、编辑、预算和提醒中统一检查有限数字。 |
| 日期格式 | 2026-9-1 被保存为非补零字符串,9 月合计漏掉该笔 | 统一保存 YYYY-MM-DD,统一处理筛选输入及旧数据。 |
普通的空金额、abc、0、负数、非法日期,以及非闰年的 2 月 29 日均被拒绝。失败的六项由一个布局检查、四个特殊数字检查和一个日期一致性检查组成。
常规样例下,记账、统计和提醒能得到正确结果,但默认窗口的布局和部分输入校验还需要修复。因此,这次验收保留了失败项,没有将成果写成“全部通过”。
心得
本次验收最大的意外是,常见非法金额检查通过后,程序仍能接受 inf;日期能通过解析,也不代表存入数据库后一定能被统计正确。AI 能较快实现快捷模板、复制和图表等具体功能,但我需要把修改要求写成可以检查的输入与预期结果,并用独立求和等方式核对。今后我会在每轮迭代时保存真实提示词和版本记录,而不是最后只保留需求摘要。

浙公网安备 33010602011771号