import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3

# 初始化数据库并且预置英雄数据
def init_database():
    conn = sqlite3.connect("hero.db")
    cur = conn.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS hero(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        period TEXT,
        hero_type TEXT,
        story TEXT
    )''')
    # 判断表内是否为空，避免重复插入数据
    res = cur.execute("SELECT * FROM hero").fetchall()
    if len(res) == 0:
        hero_list = [
            ("董存瑞", "解放战争", "革命英雄", "解放隆化战斗，手托炸药包炸毁敌人碉堡牺牲。"),
            ("黄继光", "抗美援朝", "革命英雄", "上甘岭战役，用身体堵住敌人枪口掩护战友冲锋。"),
            ("邱少云", "抗美援朝", "革命英雄", "潜伏任务时被燃烧弹引燃身体，强忍剧痛一动不动壮烈牺牲。"),
            ("刘胡兰", "解放战争", "革命英雄", "面对敌人威胁坚贞不屈，年仅15岁英勇就义。"),
            ("赵一曼", "抗日战争", "革命英雄", "抗日期间顽强对抗日军，受尽酷刑依旧保守秘密。")
        ]
        cur.executemany("INSERT INTO hero(name,period,hero_type,story) VALUES (?,?,?,?)", hero_list)
    conn.commit()
    conn.close()


class HeroQuerySystem:
    def __init__(self, root):
        self.root = root
        self.root.title("英雄事迹查询系统")
        self.root.geometry("880x500")
        init_database()

        # 顶部搜索区域
        frame_top = tk.Frame(root, padx=10, pady=8)
        frame_top.pack(fill=tk.X)
        tk.Label(frame_top, text="输入英雄姓名：").grid(row=0, column=0)
        self.search_var = tk.StringVar()
        tk.Entry(frame_top, textvariable=self.search_var, width=15).grid(row=0, column=1, padx=5)

        # 查询按钮
        tk.Button(frame_top, text="查询全部英雄", command=self.show_all, width=12).grid(row=0, column=2, padx=4)
        tk.Button(frame_top, text="仅查看革命英雄", command=self.find_revolution_hero, width=12).grid(row=0, column=3, padx=4)
        tk.Button(frame_top, text="按姓名搜索", command=self.search_name, width=10).grid(row=0, column=4, padx=4)

        # 表格
        columns = ("id", "name", "period", "hero_type", "story")
        self.tree = ttk.Treeview(root, columns=columns, show="headings")
        self.tree.heading("id", text="序号")
        self.tree.heading("name", text="姓名")
        self.tree.heading("period", text="时期")
        self.tree.heading("hero_type", text="英雄类别")
        self.tree.heading("story", text="英雄事迹")

        self.tree.column("id", width=40)
        self.tree.column("name", width=70)
        self.tree.column("period", width=100)
        self.tree.column("hero_type", width=100)
        self.tree.column("story", width=520)
        self.tree.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
        self.show_all()

    # 显示全部英雄
    def show_all(self):
        for item in self.tree.get_children():
            self.tree.delete(item)
        conn = sqlite3.connect("hero.db")
        data = conn.execute("SELECT * FROM hero").fetchall()
        for row in data:
            self.tree.insert("", tk.END, values=row)
        conn.close()

    # 只查询革命英雄
    def find_revolution_hero(self):
        for item in self.tree.get_children():
            self.tree.delete(item)
        conn = sqlite3.connect("hero.db")
        data = conn.execute("SELECT * FROM hero WHERE hero_type = '革命英雄'").fetchall()
        for row in data:
            self.tree.insert("", tk.END, values=row)
        conn.close()

    # 根据姓名进行查询
    def search_name(self):
        name = self.search_var.get().strip()
        if not name:
            messagebox.showinfo("提示", "请输入姓名！")
            return
        for item in self.tree.get_children():
            self.tree.delete(item)
        conn = sqlite3.connect("hero.db")
        result = conn.execute("SELECT * FROM hero WHERE name = ?", (name,)).fetchall()
        if len(result) == 0:
            messagebox.showwarning("查询结果", "没有找到该英雄！")
        else:
            for row in result:
                self.tree.insert("", tk.END, values=row)
        conn.close()


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