import tkinter as tk
from tkinter import ttk, messagebox
import random
import time

class MathTrainer:
    def __init__(self, root):
        self.root = root
        self.root.title("🧮 计算小能手 - 数学练习器")
        self.root.geometry("550x450")  # 窗口大小
        self.root.resizable(False, False)

        # 全局变量
        self.current_answer = None
        self.score = 0
        self.total = 0
        self.start_time = None

        # 创建界面
        self.create_widgets()

    def create_widgets(self):
        # 标题
        title_label = ttk.Label(
            self.root,
            text="计算小能手",
            font=("微软雅黑", 20, "bold")
        )
        title_label.pack(pady=10)

        # 功能选择区
        frame_mode = ttk.Frame(self.root)
        frame_mode.pack(pady=5)

        self.mode = tk.StringVar(value="math")
        ttk.Radiobutton(frame_mode, text="四则运算练习", variable=self.mode, value="math").grid(row=0, column=0, padx=10)
        ttk.Radiobutton(frame_mode, text="九九乘法表", variable=self.mode, value="nine").grid(row=0, column=1, padx=10)

        # 题目显示区
        self.question_label = ttk.Label(
            self.root,
            text="点击【开始答题】开始",
            font=("微软雅黑", 16)
        )
        self.question_label.pack(pady=20)

        # 答案输入区
        self.answer_entry = ttk.Entry(self.root, font=("微软雅黑", 14), width=10)
        self.answer_entry.pack(pady=5)
        self.answer_entry.bind("<Return>", self.check_answer)  # 回车提交

        # 按钮区
        frame_btn = ttk.Frame(self.root)
        frame_btn.pack(pady=10)

        ttk.Button(frame_btn, text="开始答题", command=self.start_quiz).grid(row=0, column=0, padx=5)
        ttk.Button(frame_btn, text="提交答案", command=self.check_answer).grid(row=0, column=1, padx=5)
        ttk.Button(frame_btn, text="查看乘法表", command=self.show_nine_table).grid(row=0, column=2, padx=5)

        # 统计区
        self.stat_label = ttk.Label(
            self.root,
            text="正确率：0%  |  答对：0/0",
            font=("微软雅黑", 12)
        )
        self.stat_label.pack(pady=5)

        # 时间区
        self.time_label = ttk.Label(
            self.root,
            text="用时：0 秒",
            font=("微软雅黑", 12)
        )
        self.time_label.pack(pady=5)

    # 生成四则运算题目
    def generate_math_question(self):
        a = random.randint(1, 50)
        b = random.randint(1, 20)
        op = random.choice(["+", "-", "×", "÷"])

        if op == "+":
            ans = a + b
        elif op == "-":
            a, b = (a + b, a) if a < b else (a, b)
            ans = a - b
        elif op == "×":
            ans = a * b
        else:  # 除法，保证整除
            ans = a
            a = a * b
            op = "÷"

        self.current_answer = ans
        return f"{a} {op} {b} = ?"

    # 开始答题
    def start_quiz(self):
        self.score = 0
        self.total = 0
        self.start_time = time.time()
        self.update_stats()
        self.update_time()
        self.next_question()

    # 下一题
    def next_question(self):
        if self.mode.get() == "math":
            q_text = self.generate_math_question()
        else:
            q_text = self.generate_math_question()

        self.question_label.config(text=q_text)
        self.answer_entry.delete(0, tk.END)
        self.answer_entry.focus()

    # 检查答案
    def check_answer(self, event=None):
        if self.current_answer is None:
            messagebox.showwarning("提示", "请先点击【开始答题】")
            return

        user_input = self.answer_entry.get().strip()
        if not user_input.isdigit():
            messagebox.showwarning("错误", "请输入数字！")
            self.answer_entry.delete(0, tk.END)
            return

        user_ans = int(user_input)
        self.total += 1

        if user_ans == self.current_answer:
            self.score += 1
            messagebox.showinfo("正确", "✅ 回答正确！")
        else:
            messagebox.showerror("错误", f"❌ 正确答案是：{self.current_answer}")

        self.update_stats()
        self.next_question()

    # 更新统计
    def update_stats(self):
        if self.total == 0:
            rate = 0
        else:
            rate = round(self.score / self.total * 100, 1)
        self.stat_label.config(text=f"正确率：{rate}%  |  答对：{self.score}/{self.total}")

    # 更新时间
    def update_time(self):
        if self.start_time:
            used = int(time.time() - self.start_time)
            self.time_label.config(text=f"用时：{used} 秒")
        self.root.after(1000, self.update_time)

    # 显示九九乘法表
    def show_nine_table(self):
        table = ""
        for i in range(1, 10):
            for j in range(1, i + 1):
                table += f"{j}×{i}={i*j}\t"
            table += "\n"

        top = tk.Toplevel(self.root)
        top.title("九九乘法表")
        top.geometry("450x350")
        text = tk.Text(top, font=("微软雅黑", 12))
        text.pack(expand=True, fill="both", padx=10, pady=10)
        text.insert("end", table)
        text.config(state="disabled")

if __name__ == "__main__":
    root = tk.Tk()
    app = MathTrainer(root)
    root.mainloop()