做一个班级信息收集的GUI程序,要求建立一个包含学号,班级,姓名的数据库表。通过GUI程序可以注册为这个班级,可以查询得到班级其他同学的学号。
import tkinter as tk
from tkinter import messagebox
import sqlite3
import pandas as pd
# 连接到SQLite数据库
def connect_to_db():
conn = sqlite3.connect('students.db')
cursor = conn.cursor()
return conn, cursor
# 从Excel文件读取数据并导入到SQLite数据库
def import_data_from_excel():
try:
df = pd.read_excel('students.xlsx', sheet_name='Sheet1') #打开excel文件的表格1
conn, cursor = connect_to_db()
df.to_sql('students', conn, if_exists='append', index=False)
conn.commit()
messagebox.showinfo("Success", "Data imported successfully!")
except FileNotFoundError:
messagebox.showerror("Error", "The file students.xlsx does not exist.")
except Exception as e:
messagebox.showerror("Error", str(e))
# 注册新学生
def register_student():
student_id = student_id_entry.get()
name = name_entry.get()
class_name = class_name_entry.get()
if not all([student_id, name, class_name]):
messagebox.showerror("Error", "Please fill in all fields.")
return
conn, cursor = connect_to_db()
cursor.execute("INSERT INTO students (student_id, name, class_name) VALUES (?, ?, ?)",
(student_id, name, class_name))
conn.commit()
messagebox.showinfo("Success", "Student registered successfully!")
clear_entries()
# 查询学生学号
def query_student_id():
student_id = query_entry.get()
conn, cursor = connect_to_db()
cursor.execute("SELECT name, class_name FROM students WHERE student_id=?", (student_id,))
result = cursor.fetchone()
if result:
messagebox.showinfo("Result", f"Name: {result[0]}, Class: {result[1]}")
else:
messagebox.showinfo("Result", "Student not found.")
# 清除输入框
def clear_entries():
student_id_entry.delete(0, tk.END)
name_entry.delete(0, tk.END)
class_name_entry.delete(0, tk.END)
# 创建GUI界面
root = tk.Tk()
root.title("Student Management System")
root.geometry("300x550")
# 导入数据按钮
import_btn = tk.Button(root, text="Import from Excel", command=import_data_from_excel)
import_btn.pack(pady=10)
# 注册学生部分
tk.Label(root, text="想要加入我们吗?快快输入你的班级,姓名,学号吧!").pack(pady=10)
student_id_entry = tk.Entry(root)
student_id_entry.pack(pady=5)
name_entry = tk.Entry(root)
name_entry.pack(pady=5)
class_name_entry = tk.Entry(root)
class_name_entry.pack(pady=5)
register_btn = tk.Button(root, text="来了来了!GOGOGO", command=register_student)
register_btn.pack(pady=10)
# 查询学生学号部分
tk.Label(root, text="想知道这个学号是谁吗?输入学号让我告诉你呀").pack(pady=10)
query_entry = tk.Entry(root)
query_entry.pack(pady=5)
query_btn = tk.Button(root, text="名字快显灵", command=query_student_id)
query_btn.pack(pady=10)
# 通过名字查询学号
def query_student_by_name():
name = query_name_entry.get()
conn, cursor = connect_to_db()
cursor.execute("SELECT student_id, class_name FROM students WHERE name=?", (name,))
result = cursor.fetchone()
if result:
messagebox.showinfo("Result", f"Student ID: {result[0]}, Class: {result[1]}")
else:
messagebox.showinfo("Result", "Student not found.")
# 查询学生名字部分
tk.Label(root, text="让我看看TA的学号是多少").pack(pady=10)
query_name_entry = tk.Entry(root)
query_name_entry.pack(pady=5)
query_by_name_btn = tk.Button(root, text="出现学号吧", command=query_student_by_name)
query_by_name_btn.pack(pady=10)
# 关闭窗口事件
def on_closing():
if messagebox.askokcancel("Quit", "你真的想把我关掉吗(o.O?)"):
root.destroy()
root.protocol("WM_DELETE_WINDOW", on_closing)
# 运行GUI
root.mainloop()
运行结果