帮我写一个基于python的记账系统源码有界面设计的完整系统包括使用教程
时间: 2024-02-22 10:58:27 浏览: 80
好的,下面是一个基于Python的记账系统的完整源码以及使用教程。
## 记账系统源码
```python
from tkinter import *
from tkinter import messagebox
import os
import csv
import datetime
# 创建主窗口
root = Tk()
root.title("记账系统")
# 设置窗口大小
root.geometry("400x300")
# 设置窗口不可调整大小
root.resizable(False, False)
# 设置窗口背景颜色
root.config(bg="#f5f5f5")
# 创建账单列表
bill_list = []
# 如果账单文件不存在,则创建文件
if not os.path.exists("bill.csv"):
with open("bill.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["日期", "收支", "金额", "说明"])
# 加载账单数据
with open("bill.csv", "r", newline="") as file:
reader = csv.reader(file)
for row in reader:
bill_list.append(row)
# 处理日期格式
for i in range(1, len(bill_list)):
bill_list[i][0] = datetime.datetime.strptime(bill_list[i][0], "%Y-%m-%d")
# 根据日期排序
bill_list = sorted(bill_list, key=lambda x: x[0])
# 创建列表框
listbox = Listbox(root, width=50, height=12, bg="#fff", font=("Arial", 12))
listbox.pack(pady=10)
# 添加账单数据到列表框
for i in range(1, len(bill_list)):
listbox.insert(END, f"{bill_list[i][0].strftime('%Y-%m-%d')} {bill_list[i][1]} {bill_list[i][2]} {bill_list[i][3]}")
# 创建标签和输入框
date_label = Label(root, text="日期:", font=("Arial", 12), bg="#f5f5f5")
date_label.place(x=20, y=200)
date_entry = Entry(root, font=("Arial", 12))
date_entry.place(x=80, y=200)
type_label = Label(root, text="收支类型:", font=("Arial", 12), bg="#f5f5f5")
type_label.place(x=20, y=230)
type_entry = Entry(root, font=("Arial", 12))
type_entry.place(x=100, y=230)
amount_label = Label(root, text="金额:", font=("Arial", 12), bg="#f5f5f5")
amount_label.place(x=20, y=260)
amount_entry = Entry(root, font=("Arial", 12))
amount_entry.place(x=80, y=260)
desc_label = Label(root, text="说明:", font=("Arial", 12), bg="#f5f5f5")
desc_label.place(x=20, y=290)
desc_entry = Entry(root, font=("Arial", 12))
desc_entry.place(x=80, y=290)
# 定义添加账单按钮事件
def add_bill():
# 获取输入框中的数据
date = date_entry.get()
type = type_entry.get()
amount = amount_entry.get()
desc = desc_entry.get()
# 验证输入数据是否为空
if date == "" or type == "" or amount == "" or desc == "":
messagebox.showwarning("警告", "请输入完整的账单信息!")
return
# 验证金额是否是数字
try:
float(amount)
except ValueError:
messagebox.showwarning("警告", "金额必须是数字!")
return
# 转换日期格式
try:
date = datetime.datetime.strptime(date, "%Y-%m-%d")
except ValueError:
messagebox.showwarning("警告", "日期格式不正确!")
return
# 添加账单到列表
bill_list.append([date, type, amount, desc])
# 根据日期排序
bill_list = sorted(bill_list, key=lambda x: x[0])
# 清空输入框
date_entry.delete(0, END)
type_entry.delete(0, END)
amount_entry.delete(0, END)
desc_entry.delete(0, END)
# 更新列表框
listbox.delete(0, END)
for i in range(1, len(bill_list)):
listbox.insert(END, f"{bill_list[i][0].strftime('%Y-%m-%d')} {bill_list[i][1]} {bill_list[i][2]} {bill_list[i][3]}")
# 保存账单到文件
with open("bill.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["日期", "收支", "金额", "说明"])
for row in bill_list[1:]:
writer.writerow([row[0].strftime("%Y-%m-%d"), row[1], row[2], row[3]])
# 创建添加账单按钮
add_button = Button(root, text="添加账单", font=("Arial", 12), bg="#3366cc", fg="#fff", command=add_bill)
add_button.place(x=300, y=240)
# 进入消息循环
root.mainloop()
```
## 记账系统使用教程
1. 打开记账系统,会显示所有已经保存的账单数据;
2. 在日期、收支类型、金额和说明输入框中输入账单信息;
3. 点击“添加账单”按钮,系统会将账单信息添加到列表中,并自动保存到文件中;
4. 可以多次添加账单,系统会自动按照日期排序;
5. 可以关闭记账系统,下次打开时会自动加载之前保存的账单数据。
注意事项:
1. 日期格式必须为“YYYY-MM-DD”,否则会提示错误;
2. 金额必须是数字,否则会提示错误;
3. 所有输入框都必须输入完整的账单信息,否则会提示错误;
4. 账单数据保存在“bill.csv”文件中,不要删除或修改该文件。
阅读全文