校园消费记账:四轮迭代记录
第1轮:初版
我给 AI 的提示词:
请帮我做一个“个人校园消费记账”桌面程序,用 Python 标准库 Tkinter 实现,界面使用中文。我想记录每天的生活费支出,每条记录包括消费日期、金额、类别和备注。类别先提供餐饮、交通、学习、购物、娱乐和其他。
请在同一个窗口里放置录入区和记录列表,支持添加记录、删除选中的记录,并显示本月支出总额和各类别的金额。日期使用
YYYY-MM-DD格式,金额单位是元。空金额、负数和无效日期要给出清楚的提示,不能直接让程序退出。我还想设置每月生活费预算。当本月支出达到预算时,界面上显示提醒。记录和预算保存到本地文件,关闭程序后再次打开,原来的内容仍然保留。第一次运行时,没有数据文件也能正常启动。
项目放在当前 HW1 文件夹下的独立目录中。请给出完整代码和中文使用说明,说明如何启动,以及数据保存的位置。先完成这些基本功能,并用几个样例检查录入、统计和重新读取数据的结果。
AI 做出了中文录入区和消费列表,可以添加、删除记录,统计本月各类别的支出,并在支出达到预算时显示提醒。数据写入本地 SQLite 文件,重新打开窗口后能读回。
我们运行了两个单元测试,并用临时账本启动真实 Tk 窗口,通过程序调用按钮检查录入、提醒和重新打开后的显示。添加本月餐饮12.50元、交通3.00元和上月学习20.00元后,本月总额为15.50元;预算设为15.50元时出现提醒。负金额没有写入账本,输入内容保留,方便修改。
第2轮:日期检查和删除确认
阅读代码后,直接调用日期校验函数,发现 2026-2-9 会被接受并转成 2026-02-09。界面写明了日期格式,这种输入也应提示补齐。代码中的删除操作没有确认窗口,选错行就会立即删除。
我给 AI 的修改要求:
请把日期输入格式检查补完整:去掉首尾空格后,必须符合
YYYY-MM-DD,月份和日期都要写满两位。2026-2-9应提示格式错误,2026-02-09应能保存,2026-02-29应提示日期无效。输入错误时保留表单内容,不能增加记录。删除记录前,请弹出确认窗口,显示这笔消费的日期、金额和类别。点取消要保留记录,点确认才删除;没有选中记录时继续提示先选择。请补充对应测试,检查无效日期不会写入数据库,以及取消删除后记录和统计金额都没有变化。
AI 在检查日期是否存在之前,增加了格式检查。删除按钮现在先显示消费的日期、金额和类别,点确认后才删除。
我们增加了无效日期不得写入的测试,也用窗口检查确认错误输入仍留在表单里。删除窗口的取消和确认分别执行了一次:取消后仍有3条记录,统计金额保持不变;确认后剩2条记录。
第3轮:按月份查看
阅读界面刷新代码时发现,列表包含所有月份的记录,统计却只计算电脑当前月份。查看上个月的消费时,需要能直接看到对应月份的总额。
我给 AI 的修改要求:
请增加一个“查看月份”输入框,默认显示当前月份,格式为
YYYY-MM,旁边放一个“查看”按钮。选择月份后,列表只显示这个月的消费,总额和类别统计也使用同一个月份。统计标题要写出具体月份,预算提醒中的文字改成“所选月份”,继续使用已有的每月预算设置。月份格式不正确或月份超出 01 到 12 时,请给出提示,并保留原来显示的月份和记录。没有消费记录的月份应显示空列表、总额 0.00 元,各类别金额也为 0.00 元。
请用 2026 年 9 月学习支出 20 元、10 月餐饮支出 12.50 元和交通支出 3 元验证:查看 9 月只能看到一条记录,总额是 20.00 元;查看 10 月能看到两条,总额是 15.50 元。添加和删除后,也要继续显示当前选中的月份。
AI 增加了月份输入框和查看按钮,列表与统计现在都按所选月份查询。输入错误月份时保留原来的显示内容,添加和删除记录后也保持当前查看月份。
我们使用这轮指定的样例,确认9月显示1条记录、20.00元,10月显示2条记录、15.50元。11月没有记录,列表为空,各类别金额为零。输入 2026-9 和 2026-13 后,界面仍显示之前选中的9月数据。
第4轮:保留尚未保存的预算
用临时数据库和模拟控件调用刷新函数,发现数据库中的预算为1000元时,输入框正在填写的2000元会被刷新成1000.00元。添加、删除和查看月份都会刷新界面,未保存的输入因此可能丢失。这次检查没有启动程序窗口。
我给 AI 的修改要求:
请保留预算输入框中尚未保存的内容。程序启动时加载已保存的预算;添加消费、删除消费和查看月份时,都不要覆盖正在填写的预算。统计和提醒继续使用数据库中已经保存的预算,只有点击“保存预算”并保存成功后,才使用新预算,并把输入框金额整理成两位小数。
请验证这个过程:先保存预算 1000 元,再把输入框改成 2000 元但不保存,然后添加一笔消费并切换月份,输入框应仍是 2000 元,提醒仍按 1000 元计算。点击保存后,提醒按 2000 元计算,重新打开程序也应读出 2000 元。保存无效金额时,请保留输入内容和原来的预算。
AI 将预算输入框的更新移到程序启动和保存成功时。其他操作刷新列表与统计时,会保留正在填写的预算,提醒继续读取数据库中已保存的金额。
我们在真实窗口中执行了这轮要求的过程。未保存的2000元在添加、删除和切换月份后都保留,提醒仍按1000元计算;保存后输入显示2000.00元,提醒随之更新,重新打开后仍为2000.00元。尝试保存负数时,错误输入和原预算都保留。
我们在最后检查金额上限时,还发现99999999.99元会被误判为超限,原因是比较时使用了浮点数。将上限改为精确的小数后,这个金额可以正常通过检查,100000000.00元仍会被拒绝。
检查与验证说明
我们设置了单元测试,使用临时数据库,检查日期格式、闰年日期、空金额和负金额,也检查按月统计、删除及保存后重新读取。最后一次运行 python -m unittest -v 时,5个测试全部通过。
与此同时,我们也完成了手动验证。金额按整数“分”保存。用12.50元加3.00元的手算结果15.50元核对统计,再加入9月的20元,10月的总额仍为15.50元。查看11月时,各类别都为0.00元。这些样例同时检查了金额计算和月份范围。
我们还运行了 python gui_check.py,启动真实 Tk 窗口,通过程序调用按钮检查录入和界面显示。测试为确认弹窗提供取消、确认两种回答,分别核对结果;这属于自动窗口检查。用户本人没有手动点击验收,窗口布局也没有逐项查看确认。
心得
这次模拟协作让我注意到,查看月份这样的小功能也会影响列表、统计和预算提醒。代码里已经有统计函数,界面显示的范围仍然可能不一致。后来我把具体日期、金额和预期结果写进修改要求,检查时就更容易判断是否改对了。我也发现,保存的数据正确,仍然可能出现输入框内容被覆盖的问题,所以检查需要兼顾数据和使用过程。
浙公网安备 33010602011771号