python學生成績管理系統【完整版】

專注的阿熊發表於2022-04-19

import tkinter as tk

from db import db

from tkinter import ttk

# 錄入類

class InputFrame(tk.Frame):

     def __init__(self, master=None):

         super().__init__(master)

         self.root = master

         self.name = tk.StringVar()

         self.math = tk.StringVar()

         self.chinese = tk.StringVar()

         self.english = tk.StringVar()

         self.status = tk.StringVar()

         self.create_page()

     def create_page(self):

         tk.Label(self).grid(row=0, stick=tk.W, pady=10)

         tk.Label(self, text=" 姓名 :").grid(row=1, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self, textvariable=self.name).grid(row=1, column=1, stick=tk.E)

         tk.Label(self, text=" 數學 :").grid(row=2, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E)

         tk.Label(self, text=" 語文 :").grid(row=3, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)

         tk.Label(self, text=" 英語 :").grid(row=4, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E)

         tk.Button(self, text=" 錄入 ", command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10)

         tk.Label(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10)

     # 錄入成績

     def recode_student(self):

         student = {

             "name": self.name.get(),

             "math": self.math.get(),

             "chinese": self.chinese.get(),

             "english": self.english.get(),

         }  # 一個學生的成績

         db.insert(student)

         # get() 得到值

         # set() 設定值

         self.status.set(" 插入資料成功! ")

         self._clear_data()

         db.save_data()

     # 清空文字資料

     def _clear_data(self):

         self.name.set("")

         self.math.set("")

         self.chinese.set("")

         self.english.set("")

# 查詢類

class QuerryFrame(tk.Frame):

     def __init__(self, master=None):

         super().__init__(master)

         self.root = master

         self.create_page()

     # 建立查詢介面

     def create_page(self):

         self.create_tree_view()

         self.show_data_frame()

         # grid()

         tk.Button(self, text=" 重新整理資料 ", command=self.show_data_frame).pack(anchor=tk.E, pady=5)

     # Treeview

     def create_tree_view(self):

         # 表頭

         columns = ("name", "chinese", "math", "english")

         self.tree_view = ttk.Treeview(self, show='headings', columns=columns)

         self.tree_view.column("name", width=80, anchor='center')

         self.tree_view.column("chinese", width=80, anchor='center')

         self.tree_view.column("math", width=80, anchor='center')

         self.tree_view.column("english", width=80, anchor='center')

         self.tree_view.heading("name", text=' 姓名 ')

         self.tree_view.heading("chinese", text=' 語文 ')

         self.tree_view.heading("math", text=' 數學 ')

         self.tree_view.heading("english", text=' 英語 ')

         self.tree_view.pack()

     # 顯示資料

     def show_data_frame(self):

         # 刪除原節點 map(int, 值)

         for i in map(self.tree_view.delete, self.tree_view.get_children("")):

             pass

         # 拿到列表裡面所有值、 students[]

         students = db.all()

         # 同時拿到索引跟 value

         for index, stu in enumerate(students):

             self.tree_view.insert('', index, values=(stu["name"], stu["chinese"], stu

             ["math"], stu["english"]))

class DeleteFrame(tk.Frame):

     def __init__(self, master=None):

         super().__init__(master)

         tk.Label(self, text=' 刪除資料 ').pack()

         self.status = tk.StringVar()

         self.de_name = tk.StringVar()  # 獲取刪除學生的姓名

         self.create_page()

     # 建立介面

     def create_page(self):

         tk.Label(self, text=" 根據姓名刪除資訊 ").pack(anchor=tk.W, padx=20)

         e1 = tk.Entry(self, textvariable=self.de_name)

         e1.pack(side=tk.LEFT, padx=20, pady=5)

         tk.Button(self, text=' 刪除 ', command=self._delete).pack(side=tk.RIGHT)

         tk.Label(self, textvariable=self.status).pack()

     # 刪除

     def _delete(self):

         name = self.de_name.get()

         print(name)

         result = db.delete_by_name(name)

         if result:

             self.status.set(f'{name} 已經被刪 ')

             self.de_name.set("")

         else:

             self.status.set(f'{name} 不存在 ')

class UpdateFrame(tk.Frame):

     def __init__(self, master=None):

         super().__init__(master)

         self.root = master

         tk.Label(self, text=' 修改介面 ').pack()

         self.change_frame = tk.Frame(self)

         self.change_frame.pack()

         self.name = tk.StringVar()

         self.math = tk.StringVar()

         self.chinese = tk.StringVar()

         self.english = tk.StringVar()

         self.status = tk.StringVar()

         self.create_page()

     def create_page(self):

         tk.Label(self.change_frame).grid(row=0, stick=tk.W, pady=10)

         tk.Label(self.change_frame, text=" 姓名 :").grid(row=1, stick=tk.W, pady=10)

         # 單行文字框 entry ,外匯跟單gendan5.com textvariable 繫結變數

         tk.Entry(self.change_frame, textvariable=self.name).grid(row=1, column=1, stick=tk.E)

         tk.Label(self.change_frame, text=" 數學 :").grid(row=2, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E)

         tk.Label(self.change_frame, text=" 語文 :").grid(row=3, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)

         tk.Label(self.change_frame, text=" 英語 :").grid(row=4, stick=tk.W, pady=10)

         # 單行文字框 entry textvariable 繫結變數

         tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E)

         # 按鈕

         tk.Button(self.change_frame, text=' 查詢 ', command=self._search).grid(row=6, column=0, stick=tk.W, pady=10)

         tk.Button(self.change_frame, text=' 修改 ', command=self._change).grid(row=6, column=1, stick=tk.E, pady=10)

         tk.Label(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10)

     # 查詢

     def _search(self):

         name = self.name.get()

         student = db.search_by_name(name)

         if student:

             self.math.set(student["math"])

             self.chinese.set(student["chinese"])

             self.english.set(student["english"])

             self.status.set(f' 查詢到 {name} 同學的資訊 ')

         else:

             self.status.set(f' 沒有查詢到 {name} 同學的資訊 ')

     #   更改成績

     def _change(self):

         name = self.name.get()

         math = self.math.get()

         chinese = self.chinese.get()

         english = self.english.get()

         stu = {

             "name": name,

             "math": math,

             "chinese": chinese,

             "english": english,

         }

         r = db.update(stu)

         if r:

             self.status.set(f"{name} 同學的資訊更新完畢 ")

         else:

             self.status.set(f"{name} 同學的資訊更新失敗 ")

class AboutFrame(tk.Frame):

     def __init__(self, master=None):

         super().__init__(master)

         self.root = master

         self.create_page()

     def create_page(self):

         tk.Label(self, text=" 關於本作品 ( 人生苦短,我用 python)").pack(anchor=tk.W)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2887835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章