这个记账本代码主要包含了三个功能:记录开支、编辑开支和删除开支。
代码的开头部分导入了两个模块:datetime
和csv
。datetime
模块用于获取当前日期时间,csv
模块则用于读取和写入CSV文件。
接着,代码定义了三个函数:record_expense
、edit_expense
和delete_expense
。
record_expense
函数用于记录开支。该函数接受两个参数:category
和amount
,分别表示开支的类别和金额。在函数内部,使用datetime.datetime.now()
获取当前日期时间,然后将日期时间格式化为%Y-%m-%d
的字符串形式。接着,使用open('expenses.csv', 'a', newline='')
打开CSV文件,以追加模式写入开支数据。
edit_expense
函数用于编辑开支。该函数接受三个参数:row_num
、category
和amount
,分别表示要编辑的开支的行号、新的类别和金额。在函数内部,首先使用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("无效的选择,请重新输入!")