个人财务系统设计(简化版)

目录

  1. 导入库

  2. 数据加载与保存

  3. 日期处理

  4. 数据初始化

  5. 收入与开支记录

  6. 数据汇总

  7. 菜单功能

  8. 主程序逻辑

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 函数是程序的核心。它提供一个循环,让用户选择操作并执行对应功能。用户可以添加收入、添加开支、查看总结或退出程序。每次操作后,数据会更新并保存。
  • 用户界面:

 

 

 

 

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值