首页
学习
活动
专区
圈层
工具
发布

python一个个人收支管理系统作为综合案例

一个个人收支管理系统作为综合案例,这个案例既贴近生活、实用性强,又能覆盖 Python 的核心知识点:变量、数据类型、函数、循环、条件判断、文件操作、异常处理等。

一、案例思路

设计功能菜单,让用户可以选择记账、查看账单、导出账单、退出系统等操作

使用列表 + 字典存储每一笔收支记录(包含时间、类型、金额、备注)

实现收支记录的增删查改

将账单数据持久化到文件(txt 格式),确保程序退出后数据不丢失

加入异常处理,防止用户输入非数字金额等错误操作

对账单进行简单的统计分析(总收入、总支出、结余)

import datetime

# 全局变量,存储所有收支记录

records = []

def load_records():

"""从文件加载收支记录"""

try:

with open("expense_records.txt", "r", encoding="utf-8") as f:

for line in f:

# 去除换行符并按分隔符拆分

line = line.strip()

if not line:

continue

date, type_, amount, remark = line.split("|")

records.append({

"date": date,

"type": type_,

"amount": float(amount),

"remark": remark

})

print(" 历史账单加载成功!")

except FileNotFoundError:

print(" 未找到历史账单文件,将创建新文件")

except Exception as e:

print(f" 加载账单失败:{e}")

def save_record(record):

"""保存单条记录到文件"""

try:

with open("expense_records.txt", "a", encoding="utf-8") as f:

line = f"{record['date']}|{record['type']}|{record['amount']}|{record['remark']}\n"

f.write(line)

return True

except Exception as e:

print(f" 保存记录失败:{e}")

return False

def add_record():

"""添加收支记录"""

print("\n===== 新增收支记录 =====")

# 获取收支类型

while True:

type_ = input("请输入收支类型(收入/支出):").strip()

if type_ in ["收入", "支出"]:

break

print(" 输入错误!请输入'收入'或'支出'")

# 获取金额(异常处理)

while True:

try:

amount = float(input("请输入金额:").strip())

if amount <= 0:

print(" 金额必须大于0!")

continue

break

except ValueError:

print(" 金额必须是数字!请重新输入")

# 获取备注

remark = input("请输入备注(可选):").strip() or "无备注"

# 生成记录

current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

record = {

"date": current_date,

"type": type_,

"amount": amount,

"remark": remark

}

# 保存记录

if save_record(record):

records.append(record)

print(" 记录添加成功!")

def view_records():

"""查看所有收支记录"""

if not records:

print(" 暂无收支记录!")

return

print("\n===== 收支记录列表 =====")

print(f"{'序号':<5}{'时间':<20}{'类型':<6}{'金额':<10}{'备注'}")

print("-" * 60)

total_income = 0 # 总收入

total_expense = 0 # 总支出

for idx, record in enumerate(records, 1):

print(f"{idx:<5}{record['date']:<20}{record['type']:<6}{record['amount']:<10.2f}{record['remark']}")

if record['type'] == "收入":

total_income += record['amount']

else:

total_expense += record['amount']

print("-" * 60)

print(

f" 统计:总收入 = {total_income:.2f} 元,总支出 = {total_expense:.2f} 元,结余 = {total_income - total_expense:.2f} 元")

def export_records():

"""导出账单到CSV文件(更易读的格式)"""

if not records:

print(" 暂无收支记录可导出!")

return

try:

filename = f"收支账单_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"

with open(filename, "w", encoding="utf-8-sig") as f:

# 写入表头

f.write("序号,时间,类型,金额,备注\n")

for idx, record in enumerate(records, 1):

f.write(f"{idx},{record['date']},{record['type']},{record['amount']:.2f},{record['remark']}\n")

print(f" 账单已导出为:{filename}(可直接用Excel打开)")

except Exception as e:

print(f" 导出失败:{e}")

def main_menu():

"""主菜单"""

print("\n===== 个人收支管理系统 =====")

print("1. 新增收支记录")

print("2. 查看所有记录")

print("3. 导出账单到CSV")

print("4. 退出系统")

while True:

try:

choice = int(input("\n请输入操作序号(1-4):").strip())

if choice == 1:

add_record()

elif choice == 2:

view_records()

elif choice == 3:

export_records()

elif choice == 4:

print(" 感谢使用,再见!")

break

else:

print(" 输入错误!请输入1-4之间的数字")

except ValueError:

print(" 请输入有效的数字!")

# 程序入口

if __name__ == "__main__":

# 先加载历史记录

load_records()

# 启动主菜单

main_menu()

三、代码关键部分解释

文件操作

load_records():启动程序时从expense_records.txt加载历史记录,处理文件不存在的异常

save_record():新增记录时追加写入文件,确保数据持久化

export_records():将账单导出为 CSV 格式,方便用 Excel 打开查看

异常处理

金额输入时捕获ValueError,防止用户输入非数字

文件操作时捕获通用异常,避免程序崩溃

数据存储

使用列表records存储所有收支记录,每个记录是一个字典,包含时间、类型、金额、备注

时间通过datetime模块自动生成,确保记录的时效性

交互逻辑

主菜单循环展示,直到用户选择退出

输入验证确保用户只能输入指定范围内的内容

总结

这个案例覆盖了 Python 核心知识点:函数、循环、条件判断、文件操作、异常处理、数据类型(列表 / 字典)、第三方模块(datetime)。

实现了 “数据持久化”,程序退出后重新运行仍能看到历史记录。

具备完善的用户交互和输入验证,符合实际应用场景的需求。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OaqGfVC0kX4LFYTrjM5IF1qw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券