目录
-
导入库
-
数据加载与保存
-
日期处理
-
数据初始化
-
收入与开支记录
-
数据汇总
-
菜单功能
-
主程序逻辑
1. 导入库
import json
from datetime import datetime
json
库用于读取和写入 JSON 格式的数据,这是存储和交换数据的一种轻量级格式。datetime
库提供日期和时间的功能,用于获取当前日期。
2. 加载和保存数据
def load_data(filename='finance_data.json'):
try:
with open(filename, 'r') as file:
return json.load(file)
except FileNotFoundError:
return {}
def save_data(data, filename='finance_data.json'):
with open(filename, 'w') as file:
json.dump(data, file, indent=4)
load_data
函数尝试从指定文件中加载 JSON 数据。如果文件不存在,则返回一个空字典,表示没有数据。save_data
函数将数据写入文件。indent=4
参数使 JSON 数据具有更好的可读性。- 保存格式如下:
{ "2024-08-26": { "income": [ { "source": "43", "amount": 56.0 }, { "source": "\u5356\u5e73\u677f", "amount": 3456.0 } ], "expenses": [] } }
3. 获取当前日期
-
def get_current_date(): now = datetime.now() return now.strftime('%Y-%m-%d')
datetime.now()
获取当前的日期和时间。strftime('%Y-%m-%d')
将日期格式化为YYYY-MM-DD
格式,以便于记录和检索
4. 初始化数据
data = load_data()
current_date = get_current_date()
if current_date not in data:
data[current_date] = {"income": [], "expenses": []}
- 加载数据后,检查当前日期是否在数据中。如果没有,则为该日期创建一个包含收入和开支的空列表。
5. 添加收入和开支
def add_income(source, amount):
data[current_date]["income"].append({"source": source, "amount": amount})
save_data(data)
def add_expense(category, amount):
data[current_date]["expenses"].append({"category": category, "amount": amount})
save_data(data)
add_income
函数将收入条目(包括来源和金额)添加到当前日期的收入列表中,并保存数据。add_expense
函数将开支条目(包括类别和金额)添加到当前日期的开支列表中,并保存数据。
6. 总结每日数据
def summarize_daily_data(day_data):
total_income = sum(item['amount'] for item in day_data['income'])
total_expenses = sum(item['amount'] for item in day_data['expenses'])
balance = total_income - total_expenses
return total_income, total_expenses, balance
summarize_daily_data
函数计算给定日期的总收入、总开支和余额。通过列表解析遍历收入和开支条目,汇总金额并计算余额。
7. 菜单功能
def menu():
print("1. 添加收入")
print("2. 添加开支")
print("3. 查看总结")
print("4. 退出")
menu
函数显示用户可用的操作选项,让用户选择要执行的功能。
8. 主程序逻辑
def main():
while True:
menu()
choice = input("请输入选择: ")
if choice == '1':
source = input("请输入收入来源: ")
amount = float(input("请输入金额: "))
add_income(source, amount)
print(f"已记录 {current_date} 的收入")
elif choice == '2':
category = input("请输入开支类别: ")
amount = float(input("请输入金额: "))
add_expense(category, amount)
print(f"已记录 {current_date} 的开支")
elif choice == '3':
income, expenses, balance = summarize_daily_data(data[current_date])
print(f"总收入: {income}")
print(f"总开支: {expenses}")
print(f"余额: {balance}")
elif choice == '4':
break
else:
print("无效的选择!")
main
函数是程序的核心。它提供一个循环,让用户选择操作并执行对应功能。用户可以添加收入、添加开支、查看总结或退出程序。每次操作后,数据会更新并保存。- 用户界面: