一、功能點介紹(畢設(shè)設(shè)計)
1.添加學(xué)生成績:管理員可以在系統(tǒng)中添加學(xué)生的成績信息,包括學(xué)生姓名、學(xué)號、課程名稱、成績等。
2.刪除學(xué)生成績:管理員可以根據(jù)學(xué)生的學(xué)號或者姓名刪除學(xué)生的成績信息。
3.修改學(xué)生成績:管理員可以修改學(xué)生的成績信息,包括學(xué)生姓名、學(xué)號、課程名稱、成績等。
4.查詢學(xué)生成績:管理員可以根據(jù)學(xué)生的學(xué)號或者姓名查詢學(xué)生的成績信息,包括學(xué)生姓名、學(xué)號、課程名稱、成績等。
該系統(tǒng)可以幫助學(xué)校管理學(xué)生成績信息,方便教師和學(xué)生查詢自己的成績情況,也可以幫助學(xué)校更加科學(xué)地進(jìn)行教學(xué)管理。
二、登錄頁面代碼介紹
新建一個Loginpage.py文件
#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: LoginPage.py
@time: 2023/3/7 13:20
"""
import tkinter as tk
from tkinter import messagebox
from db import db
from MinaPage import MianPage
class LoginPage(object):
def __init__(self, master):
self.root = master
self.root.geometry('300x180')
self.root.title('登錄頁面')
self.username = tk.StringVar()
self.password = tk.StringVar()
self.page = tk.Frame(root)
self.page.pack()
tk.Label(self.page).grid(row=0, column=0)
tk.Label(self.page, text='賬號:').grid(row=1, column=1, pady=10)
tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)
tk.Label(self.page, text='密碼:').grid(row=2, column=1, pady=10)
tk.Entry(self.page, textvariable=self.password).grid(row=2, column=2)
tk.Button(self.page, text='登錄', command=self.login).grid(row=3, column=1, pady=10)
tk.Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=2, pady=10)
def login(self):
name = self.username.get()
pwd = self.password.get()
flag, message = db.check_login(name, pwd)
if flag:
# 銷毀當(dāng)前頁面
self.page.destroy()
MianPage(self.root)
else:
messagebox.showwarning(title='警告', message=message)
if __name__ == '__main__':
root = tk.Tk()
LoginPage(master=root)
root.mainloop()
三、增刪改查頁面設(shè)計
新建一個MinaPage.py文件
#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: MinaPage.py
@time: 2023/3/7 22:08
"""
import tkinter as tk
from views import AboutFrame, ChangeFrame, DeleteFrame, SearchFrame, InsertFrame
class MianPage:
def __init__(self, master: tk.Tk):
self.root = master
self.root.title('學(xué)生信息管理系統(tǒng)')
self.root.geometry('600x400')
self.create_page()
def create_page(self):
self.about_frame = AboutFrame(self.root)
self.chang_frame = ChangeFrame(self.root)
self.insert_frame = InsertFrame(self.root)
self.search_frame = SearchFrame(self.root)
self.delete_frame = DeleteFrame(self.root)
menubar = tk.Menu(self.root)
menubar.add_command(label='錄入', command=self.show_insert)
menubar.add_command(label='查詢', command=self.show_select)
menubar.add_command(label='刪除', command=self.show_delete)
menubar.add_command(label='修改', command=self.show_change)
menubar.add_command(label='關(guān)于', command=self.show_about)
self.root['menu'] = menubar
def show_about(self):
self.insert_frame.pack_forget()
self.search_frame.pack_forget()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.about_frame.pack()
def show_change(self):
self.insert_frame.pack_forget()
self.search_frame.pack_forget()
self.delete_frame.pack_forget()
self.chang_frame.pack()
self.about_frame.pack_forget()
def show_select(self):
self.insert_frame.pack_forget()
self.search_frame.pack()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.about_frame.pack_forget()
def show_delete(self):
self.insert_frame.pack_forget()
self.search_frame.pack_forget()
self.delete_frame.pack()
self.chang_frame.pack_forget()
self.about_frame.pack_forget()
def show_insert(self):
self.insert_frame.pack()
self.search_frame.pack_forget()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.about_frame.pack_forget()
if __name__ == '__main__':
root = tk.Tk()
MianPage(root)
root.mainloop()
四、視圖邏輯管理
新建一個views.py文件
#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: views.py
@time: 2023/3/8 13:57
"""
import tkinter as tk
from tkinter import ttk
from db import db
class AboutFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='關(guān)于作品:tkinter制作').pack()
tk.Label(self, text='關(guān)于作者:拾壹').pack()
tk.Label(self, text='關(guān)于版權(quán):開源').pack()
class ChangeFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.name = tk.StringVar()
self.math = tk.StringVar()
self.chinese = tk.StringVar()
self.english = tk.StringVar()
self.status = tk.StringVar()
tk.Label(self).grid(row=0, pady=10)
tk.Label(self, text='姓 名:').grid(row=1, column=1, pady=10)
tk.Entry(self, textvariable=self.name).grid(row=1, column=2, pady=10)
tk.Label(self, text='數(shù) 學(xué):').grid(row=2, column=1, pady=10)
tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
tk.Label(self, text='語 文:').grid(row=3, column=1, pady=10)
tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
tk.Label(self, text='英 語:').grid(row=4, column=1, pady=10)
tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
tk.Button(self, text='查詢',command=self.search_user).grid(row=5,column=1,pady=10)
tk.Button(self, text='修改', command=self.change_user).grid(row=5, column=2, pady=10)
def search_user(self):
flag, info = db.search_by_useranme(self.name.get())
if flag:
self.name.set(info['name'])
self.math.set(info['math'])
self.chinese.set(info['chinese'])
self.english.set(info['english'])
self.status.set('數(shù)據(jù)查詢成功')
else:
self.status.set(info)
def change_user(self):
stu = {"name": self.name.get(),
"math": self.math.get(),
"chinese": self.chinese.get(),
"english": self.english.get()}
self.name.set('') # 把名字重置為空
db.update(stu)
self.status.set('修改數(shù)據(jù)成功')
class InsertFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
# tk.Label(self, text='插入').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).grid(row=0, pady=10)
tk.Label(self, text='姓 名:').grid(row=1, column=1, pady=10)
tk.Entry(self, textvariable=self.name).grid(row=1, column=2, pady=10)
tk.Label(self, text='數(shù) 學(xué):').grid(row=2, column=1, pady=10)
tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
tk.Label(self, text='語 文:').grid(row=3, column=1, pady=10)
tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
tk.Label(self, text='英 語:').grid(row=4, column=1, pady=10)
tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
tk.Button(self, text='錄入',command=self.recode_info).grid(row=5,column=2,pady=10)
tk.Label(self, textvariable=self.status).grid(row=6, column=2,pady=10,stick=tk.E)
def recode_info(self):
stu = {"name": self.name.get(),
"math": self.math.get(),
"chinese": self.chinese.get(),
"english": self.english.get()}
self.name.set('') # 把名字重置為空
db.insert(stu)
self.status.set('數(shù)據(jù)錄入成功')
class SearchFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='查詢').pack()
class DeleteFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.username = tk.StringVar()
self.status = tk.StringVar()
tk.Label(self, text='根據(jù)名字刪除數(shù)據(jù)').pack()
tk.Entry(self, textvariable=self.username).pack()
tk.Button(self, text='刪除', command=self.delete).pack()
# tk.Label(self, text=self.status).pack()
def delete(self):
username = self.username.get()
flag,message = db.delete_by_useranme(username)
self.status.set(message)
class SearchFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.table_view = tk.Frame()
self.table_view.pack()
self.create_page()
def create_page(self):
columns = ('name', 'chinese', 'math', 'english')
columns_values = ('姓名', '語文', '數(shù)學(xué)', '英語')
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
# self.table_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='數(shù)學(xué)')
self.tree_view.heading('english', text='英語')
self.tree_view.pack(fill=tk.BOTH, expand=True)
self.show_data_frame()
tk.Button(self, text='刷新數(shù)據(jù)',command=self.show_data_frame).pack(anchor=tk.E,
pady=5)
def show_data_frame(self):
# 刪除舊的數(shù)據(jù)
for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
pass
student = db.all()
index = 0
for stu in student:
self.tree_view.insert('', index+1, values=(
stu['name'],stu['math'],stu['chinese'],stu['english'],
))
五、數(shù)據(jù)庫邏輯處理
新建一個db.py文件
#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: db.py
@time: 2023/3/7 14:39
"""
import json
class MysqlDatabases:
def __init__(self):
self.users = json.loads(open('user.json', mode='r', encoding='utf-8').read())
self.students = json.loads(open('students.json', mode='r', encoding='utf-8').read())
def check_login(self, username, password):
for user in self.users:
if username == user['username']:
if password == user['password']:
return True, '登錄成功'
else:
return False, '密碼錯誤'
else:
return False,'賬號錯誤'
return False, '登錄失敗'
def all(self):
return self.students
def insert(self,student):
self.students.append(student)
def delete_by_useranme(self, name):
for student in self.students:
if student['name'] == name:
self.students.remove(student)
return True, f'{name}用戶刪除成功'
return False, f'{name}用戶不存在'
def search_by_useranme(self, name):
for student in self.students:
if student['name'] == name:
return True, student
return False, f'{name}用戶不存在'
def update(self, stu):
for student in self.students:
if student['name'] == stu['name']:
student.update(stu)
return True, f'{stu["name"]}用戶數(shù)據(jù)修改成功'
return False, f'{stu["name"]}用戶不存在'
db = MysqlDatabases()
if __name__ == '__main__':
print(db.check_login('admin', '123456'))
六、準(zhǔn)備學(xué)生數(shù)據(jù),建立一個json文件
新建一個students.json文件
[
{"name": "張三", "math": "65", "chinese": "75","english": 100},
{"name": "李四", "math": "65", "chinese": "75","english": 100},
{"name": "王五", "math": "65", "chinese": "75","english": 100}
]
七、準(zhǔn)備用戶數(shù)據(jù),建立一個json文件
新建一個user.json文件文章來源:http://www.zghlxwxcb.cn/news/detail-479993.html
[
{"username": "admin", "password": "123456"},
{"username": "admin1", "password": "123456"}
]
八、系統(tǒng)展示文章來源地址http://www.zghlxwxcb.cn/news/detail-479993.html
登錄頁

增刪改查頁面

八、優(yōu)缺點:
優(yōu)點:
1.提高工作效率:學(xué)生成績管理系統(tǒng)可以使管理員更快捷、準(zhǔn)確地管理學(xué)生成績信息,提高工作效率。
2.管理方便:學(xué)生成績管理系統(tǒng)可以將學(xué)生成績信息集中管理,方便管理員進(jìn)行數(shù)據(jù)統(tǒng)計和分析,從而更好地了解學(xué)生成績情況。
3.信息準(zhǔn)確:學(xué)生成績管理系統(tǒng)可以確保學(xué)生的成績信息準(zhǔn)確無誤,并且可以及時更新和維護(hù)學(xué)生成績信息。
4.易于操作:學(xué)生成績管理系統(tǒng)的操作簡單易懂,管理員可以快速上手,不需要花費(fèi)大量的時間和精力學(xué)習(xí)。
缺點:
1.安全性問題:學(xué)生成績管理系統(tǒng)中包含學(xué)生的個人信息,如姓名、學(xué)號等,如果系統(tǒng)存在安全漏洞或被黑客攻擊,可能會導(dǎo)致學(xué)生信息泄露。
2.技術(shù)要求高:學(xué)生成績管理系統(tǒng)需要一定的技術(shù)支持,如果管理員技術(shù)水平低,可能會導(dǎo)致系統(tǒng)出現(xiàn)故障或者數(shù)據(jù)丟失等問題。
3.費(fèi)用較高:學(xué)生成績管理系統(tǒng)需要購買軟件并進(jìn)行維護(hù)和更新,如果學(xué)校沒有足夠的預(yù)算,可能會造成經(jīng)濟(jì)壓力。
九、備注
增刪改查成績學(xué)生成績管理系統(tǒng)是一個比較實用的軟件,也是很多學(xué)校和教師必備的工具之一,因此,作為畢設(shè)的話是一個不錯的選擇。但是,如果只是簡單地完成一個增刪改查的功能可能會比較簡單,需要在實現(xiàn)基本功能的基礎(chǔ)上,增加一些創(chuàng)新的設(shè)計和實現(xiàn),才能夠使畢設(shè)更具有研究和實踐價值。同時,需要考慮到該系統(tǒng)的安全性、性能、可擴(kuò)展性等問題,盡可能地完善和優(yōu)化系統(tǒng)的各項功能和性能,從而提高該系統(tǒng)的實用性和可靠性。
到了這里,關(guān)于python基于Tkinter實現(xiàn)學(xué)生信息管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!