import tkinter as tk
from tkinter import ttk, messagebox

class AccountBook:
    def __init__(self, root):
        self.root = root
        self.root.title("简易记账本")
        self.root.geometry("600x450")
        # 存储账单：[金额,类型,备注]
        self.records = []

        # 输入区域
        frame1 = tk.Frame(root, padx=10, pady=10)
        frame1.pack()

        tk.Label(frame1, text="金额：").grid(row=0, column=0, padx=5)
        self.var_money = tk.StringVar()
        tk.Entry(frame1, textvariable=self.var_money, width=12).grid(row=0, column=1, padx=5)

        tk.Label(frame1, text="类型：").grid(row=0, column=2, padx=5)
        self.kind = tk.StringVar(value="支出")
        ttk.Combobox(frame1, textvariable=self.kind, values=["收入", "支出"], width=8).grid(row=0, column=3)

        tk.Label(frame1, text="备注：").grid(row=0, column=4, padx=5)
        self.var_note = tk.StringVar()
        tk.Entry(frame1, textvariable=self.var_note, width=15).grid(row=0, column=5)

        # 按钮区域
        frame2 = tk.Frame(root, pady=5)
        frame2.pack()
        tk.Button(frame2, text="添加记录", command=self.add_record, width=10).grid(row=0, column=0, padx=8)
        tk.Button(frame2, text="统计收支", command=self.count_money, width=10).grid(row=0, column=1, padx=8)
        tk.Button(frame2, text="清空全部", command=self.clear_all, width=10).grid(row=0, column=2, padx=8)

        # 列表框展示账单
        frame3 = tk.Frame(root, padx=10, pady=10)
        frame3.pack(fill=tk.BOTH, expand=True)
        tk.Label(frame3, text="账单明细", font=("黑体",12)).pack()
        self.listbox = tk.Listbox(frame3, font=("SimSun",11))
        self.listbox.pack(fill=tk.BOTH, expand=True)

    def add_record(self):
        """添加收支"""
        money_text = self.var_money.get().strip()
        note = self.var_note.get().strip()
        try:
            money = float(money_text)
        except ValueError:
            messagebox.showerror("错误", "金额必须输入数字！")
            return
        tp = self.kind.get()
        if tp == "支出":
            money = -abs(money)
        else:
            money = abs(money)

        self.records.append([money, tp, note])
        self.listbox.insert(tk.END, f"{tp} {money:.2f}元  备注：{note}")
        self.var_money.set("")
        self.var_note.set("")

    def count_money(self):
        """计算总收入、总支出、结余"""
        income = 0
        expend = 0
        for m, t, n in self.records:
            if m > 0:
                income += m
            else:
                expend += abs(m)
        balance = income - expend
        msg = f"总收入：{income:.2f}元\n总支出：{expend:.2f}元\n剩余：{balance:.2f}元"
        messagebox.showinfo("收支统计", msg)

    def clear_all(self):
        if messagebox.askyesno("确认","确定清空所有账单？此操作不可撤销"):
            self.records.clear()
            self.listbox.delete(0, tk.END)

if __name__ == "__main__":
    window = tk.Tk()
    app = AccountBook(window)
    window.mainloop()