SQLite 資料庫 <1
資料表結構「科系代表碼」,提供六個功能:
1️⃣ 建立資料庫與資料表
2️⃣ 新增資料
3️⃣ 更正資料
4️⃣ 刪除資料
5️⃣ 顯示所有資料
6️⃣ 刪除整個資料庫
功能說明
| 功能 | 動作說明 |
|---|---|
| 建立資料庫 | 建立 MySchoolDB.db 並新增 department 資料表 |
| 新增資料 | 輸入系碼、系名、系主任後按新增 |
| 更正資料 | 以「系碼」為主鍵更新系名與系主任 |
| 刪除資料 | 依系碼刪除資料 |
| 顯示所有資料 | 顯示目前所有資料於表格 |
| 刪除資料庫 | 刪除整個 department.db 檔案 |
Python+TKinter 程式
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
import os
DB_NAME = "MySchoolDB.db" # ✅ 改為 MySchoolDB.db
# === 建立資料庫 ===
def create_db():
if os.path.exists(DB_NAME):
messagebox.showinfo("訊息", "資料庫已存在!")
else:
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE department (
系碼 CHAR(10) NOT NULL PRIMARY KEY,
系名 VARCHAR(50),
系主任 VARCHAR(50)
)
''')
conn.commit()
conn.close()
messagebox.showinfo("訊息", f"{DB_NAME} 與資料表已建立完成!")
# === 新增資料 ===
def add_data():
if not os.path.exists(DB_NAME):
messagebox.showwarning("警告", "請先建立資料庫!")
return
dept_id = entry_id.get().strip()
dept_name = entry_name.get().strip()
dept_head = entry_head.get().strip()
if dept_id == "":
messagebox.showwarning("警告", "系碼不可為空!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO department VALUES (?, ?, ?)", (dept_id, dept_name, dept_head))
conn.commit()
messagebox.showinfo("成功", "資料已新增!")
show_all()
except sqlite3.IntegrityError:
messagebox.showerror("錯誤", "該系碼已存在!")
conn.close()
# === 更正資料 ===
def update_data():
dept_id = entry_id.get().strip()
dept_name = entry_name.get().strip()
dept_head = entry_head.get().strip()
if dept_id == "":
messagebox.showwarning("警告", "請輸入要更正的系碼!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("UPDATE department SET 系名=?, 系主任=? WHERE 系碼=?", (dept_name, dept_head, dept_id))
conn.commit()
conn.close()
messagebox.showinfo("成功", "資料已更新!")
show_all()
# === 刪除資料 ===
def delete_data():
dept_id = entry_id.get().strip()
if dept_id == "":
messagebox.showwarning("警告", "請輸入要刪除的系碼!")
return
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("DELETE FROM department WHERE 系碼=?", (dept_id,))
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 department")
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("科系代表碼管理系統")
root.geometry("650x500")
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_head = tk.Entry(frame_top)
entry_head.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()



沒有留言:
張貼留言