python小功能之记账本

这个记账本代码主要包含了三个功能:记录开支、编辑开支和删除开支。

代码的开头部分导入了两个模块:datetimecsvdatetime模块用于获取当前日期时间,csv模块则用于读取和写入CSV文件。

接着,代码定义了三个函数:record_expenseedit_expensedelete_expense

record_expense函数用于记录开支。该函数接受两个参数:categoryamount,分别表示开支的类别和金额。在函数内部,使用datetime.datetime.now()获取当前日期时间,然后将日期时间格式化为%Y-%m-%d的字符串形式。接着,使用open('expenses.csv', 'a', newline='')打开CSV文件,以追加模式写入开支数据。

edit_expense函数用于编辑开支。该函数接受三个参数:row_numcategoryamount,分别表示要编辑的开支的行号、新的类别和金额。在函数内部,首先使用open('expenses.csv', 'r')打开CSV文件,然后使用csv.reader读取文件中的所有行。对于要编辑的行,将其类别和金额更新为新的值。对于其他行,将其保持不变。最后,使用open('expenses.csv', 'w', newline='')重新打开CSV文件,以写入模式将更新后的开支数据写入文件中。

delete_expense函数用于删除开支。该函数接受一个参数:row_num,表示要删除的开支的行号。在函数内部,首先使用open('expenses.csv', 'r')打开CSV文件,然后使用csv.reader读取文件中的所有行。对于要删除的行,将其排除在外。最后,使用open('expenses.csv', 'w', newline='')重新打开CSV文件,以写入模式将更新后的开支数据写入文件中。


import datetime
import csv


def record_expense(category, amount):
    date = datetime.datetime.now().strftime("%Y-%m-%d")
    with open('expenses.csv', 'a', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow([date, category, amount])


def edit_expense(row_num, category, amount):
    rows = []
    with open('expenses.csv', 'r') as csvfile:
        reader = csv.reader(csvfile)
        for i, row in enumerate(reader):
            if i == row_num:
                rows.append([row[0], category, amount])
            else:
                rows.append(row)

    with open('expenses.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(rows)


def delete_expense(row_num):
    rows = []
    with open('expenses.csv', 'r') as csvfile:
        reader = csv.reader(csvfile)
        for i, row in enumerate(reader):
            if i != row_num:
                rows.append(row)

    with open('expenses.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(rows)


def view_expenses():
    total_expenses = 0
    total_income = 0
    with open('expenses.csv', 'r') as csvfile:
        reader = csv.reader(csvfile)
        for i, row in enumerate(reader):
            print(f"{i}. Date: {row[0]}, Category: {row[1]}, Amount: {row[2]}")
            if float(row[2]) < 0:
                total_expenses += abs(float(row[2]))
            else:
                total_income += float(row[2])

    print(f"总支出: {total_expenses}")
    print(f"总收入: {total_income}")


# 主程序循环
running = True
while running:
    print("1. 记录支出")
    print("2. 编辑支出")
    print("3. 删除支出")
    print("4. 查看支出")
    print("5. 退出")

    choice = input("请选择操作:")

    if choice == "1":
        category = input("请输入支出类别:")
        amount = float(input("请输入支出金额:"))
        record_expense(category, amount)
        print("支出记录已添加!")

    elif choice == "2":
        row_num = int(input("请输入要编辑的支出记录行号:"))
        category = input("请输入新的支出类别:")
        amount = float(input("请输入新的支出金额:"))
        edit_expense(row_num, category, amount)
        print("支出记录已编辑!")

    elif choice == "3":
        row_num = int(input("请输入要删除的支出记录行号:"))
        delete_expense(row_num)
        print("支出记录已删除!")

    elif choice == "4":
        print("支出记录:")
        view_expenses()

    elif choice == "5":
        running = False

    else:
        print("无效的选择,请重新输入!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂粮煎饼不加葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值