SQLite 資料庫 -2
功能說明
| 功能 | 動作 |
|---|---|
| 建立資料庫 | 建立或更新 MySchoolDB.db 中的 student 資料表 |
| 新增資料 | 新增學號、姓名、系碼 |
| 更正資料 | 以學號為主鍵更新姓名與系碼 |
| 刪除資料 | 依學號刪除 |
| 顯示所有資料 | 顯示目前所有學生資料 |
| 刪除資料庫 | 刪除整個 MySchoolDB.db(包含 department 與 student) |
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
import os
DB_NAME = "MySchoolDB.db" # ✅ 使用相同的資料庫
# === 建立資料庫與 student 資料表 ===
def create_db():
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS student (
學號 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(50) NOT NULL,
系碼 CHAR(10) NOT NULL
)
''')
conn.commit()
conn.close()
messagebox.showinfo("訊息", f"{DB_NAME} 中的 student 資料表已建立完成!")
# === 新增資料 ===
def add_data():
if not os.path.exists(DB_NAME):
messagebox.showwarning("警告", "請先建立資料庫!")
return
sid = entry_id.get().strip()
sname = entry_name.get().strip()
dept = entry_dept.get().strip()
if sid == "" or sname == "" or dept == "":
messagebox.showwarning("警告", "所有欄位都必須輸入!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO student VALUES (?, ?, ?)", (sid, sname, dept))
conn.commit()
messagebox.showinfo("成功", "學生資料已新增!")
show_all()
except sqlite3.IntegrityError:
messagebox.showerror("錯誤", "該學號已存在!")
conn.close()
# === 更正資料 ===
def update_data():
sid = entry_id.get().strip()
sname = entry_name.get().strip()
dept = entry_dept.get().strip()
if sid == "":
messagebox.showwarning("警告", "請輸入要更正的學號!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("UPDATE student SET 姓名=?, 系碼=? WHERE 學號=?", (sname, dept, sid))
conn.commit()
conn.close()
messagebox.showinfo("成功", "資料已更新!")
show_all()
# === 刪除資料 ===
def delete_data():
sid = entry_id.get().strip()
if sid == "":
messagebox.showwarning("警告", "請輸入要刪除的學號!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("DELETE FROM student WHERE 學號=?", (sid,))
conn.commit()
conn.close()
messagebox.showinfo("成功", "資料已刪除!")
show_all()
# === 顯示所有資料 ===
def show_all():
if not os.path.exists(DB_NAME):
messagebox.showwarning("警告", "請先建立資料庫!")
return
for row in tree.get_children():
tree.delete(row)
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("SELECT * FROM student")
rows = cursor.fetchall()
for row in rows:
tree.insert("", "end", values=row)
conn.close()
# === 刪除資料庫 ===
def delete_db():
if os.path.exists(DB_NAME):
os.remove(DB_NAME)
for row in tree.get_children():
tree.delete(row)
messagebox.showinfo("成功", f"{DB_NAME} 已刪除!")
else:
messagebox.showwarning("警告", "資料庫不存在!")
# === Tkinter 介面 ===
root = tk.Tk()
root.title("學生資料表管理系統 (MySchoolDB.db)")
root.geometry("700x500")
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
tk.Label(frame_top, text="學號:").grid(row=0, column=0, padx=5, pady=5)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=0, column=1, padx=5)
tk.Label(frame_top, text="姓名:").grid(row=1, column=0, padx=5, pady=5)
entry_name = tk.Entry(frame_top)
entry_name.grid(row=1, column=1, padx=5)
tk.Label(frame_top, text="系碼:").grid(row=2, column=0, padx=5, pady=5)
entry_dept = tk.Entry(frame_top)
entry_dept.grid(row=2, column=1, padx=5)
frame_btn = tk.Frame(root)
frame_btn.pack(pady=10)
ttk.Button(frame_btn, text="建立資料庫", command=create_db).grid(row=0, column=0, padx=5)
ttk.Button(frame_btn, text="新增資料", command=add_data).grid(row=0, column=1, padx=5)
ttk.Button(frame_btn, text="更正資料", command=update_data).grid(row=0, column=2, padx=5)
ttk.Button(frame_btn, text="刪除資料", command=delete_data).grid(row=0, column=3, padx=5)
ttk.Button(frame_btn, text="顯示所有資料", command=show_all).grid(row=0, column=4, padx=5)
ttk.Button(frame_btn, text="刪除資料庫", command=delete_db).grid(row=0, column=5, padx=5)
# === Treeview 顯示區 ===
tree = ttk.Treeview(root, columns=("學號", "姓名", "系碼"), show="headings", height=10)
tree.heading("學號", text="學號")
tree.heading("姓名", text="姓名")
tree.heading("系碼", text="系碼")
tree.pack(pady=10, fill="x")
root.mainloop()



沒有留言:
張貼留言