import tkinter as tk
from tkinter import ttk, messagebox
import random
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 全局数据存储
x_list = []
y_list = []

# 生成随机成绩数据


def generate_scores():
    # 清空旧数据
    x_list.clear()
    y_list.clear()

    try:
        # 获取用户输入的考试次数
        count = int(entry_count.get())
        if count <= 0 or count > 50:
            messagebox.showerror("输入错误", "请输入 1 ~ 50 之间的数字！")
            return
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的整数数字！")
        return

    # 生成 60~100 分随机成绩
    for i in range(1, count + 1):
        x_list.append(f"第{i}次")
        y_list.append(random.randint(60, 100))

    # 更新图表
    update_plot()

# 更新成绩走势图


def update_plot():
    ax.clear()
    ax.plot(
        x_list, y_list,
        color="#2196F3",
        marker="o",
        linewidth=2,
        markersize=6,
        markerfacecolor="#f44336",
        label="考试成绩"
    )

    # 图表样式
    ax.set_title("学生成绩走势图", fontsize=15, fontweight="bold")
    ax.set_xlabel("考试次数", fontsize=12)
    ax.set_ylabel("成绩（分）", fontsize=12)
    ax.set_ylim(50, 105)
    ax.grid(True, linestyle="--", alpha=0.4)
    ax.legend(loc="best")
    canvas.draw()


# ===================== 主界面 =====================
root = tk.Tk()
root.title("成绩走势图生成器")  # 已删除不支持的emoji
root.geometry("860x600")
root.resizable(False, False)

# 顶部控制面板
frame_top = ttk.Frame(root, padding=18)
frame_top.pack(fill=tk.X)

ttk.Label(frame_top, text="考试次数：", font=(
    "微软雅黑", 11)).pack(side=tk.LEFT, padx=5)
entry_count = ttk.Entry(frame_top, width=10, font=("微软雅黑", 11))
entry_count.pack(side=tk.LEFT, padx=5)
entry_count.insert(0, "10")

btn_generate = ttk.Button(
    frame_top,
    text="随机生成成绩",
    command=generate_scores
)
btn_generate.pack(side=tk.LEFT, padx=12)

# 图表区域
frame_chart = ttk.Frame(root, padding=10)
frame_chart.pack(fill=tk.BOTH, expand=True)

# Matplotlib 配置（解决中文乱码）
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 创建图表
fig, ax = plt.subplots(figsize=(8.2, 4.5), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=frame_chart)
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

# 初始化显示
generate_scores()

root.mainloop()
