本软件设计由B站up主'全糖奶茶屋'提供, 可以直接联系我们的客服. 我们收到信息后会将问题在这里汇总. 大家也可以添加我们的人工客服微信: quantangnaichawu (如遇暂时加满了, 无法添加, 请后面再尝试).
教职工评价系统是一个基于Python编程语言和Tkinter库开发的软件,旨在帮助学校或组织管理教职工的评价数据。该系统具有多项功能,包括管理员页面、教职工页面、数据处理与分析、异常处理与错误提示、以及界面美化与用户友好性。
软件的登录页面采用了简洁而直观的设计,包括用户名和密码输入框以及登录按钮。用户可以输入正确的用户名和密码进行身份验证,以访问管理员页面或教职工页面。如果输入的用户名或密码错误,软件会弹出相应的错误提示,确保安全性和准确性。
管理员页面是该系统的核心部分,提供了管理教职工数据的功能。管理员可以导入教职工评价数据的Excel表格文件,以便后续的数据处理和分析。在导入数据时,软件会检查文件格式是否正确,并进行相应的异常处理,防止错误数据的导入。导入成功后,管理员可以查看教职工的评价结果,包括排名和分数。这些结果是通过数据处理与分析功能生成的,为学校或组织提供了全面的教职工评价数据。
教职工页面允许教职工查询自己的评价结果。教职工可以输入自己的姓名并点击查询按钮,软件会根据导入的评价数据,在界面上显示该教职工的排名和分数。这为教职工提供了方便快捷的查询服务,帮助他们了解自己在评价中的表现和排名情况。
数据处理与分析是该软件的重要功能之一。软件使用pandas库读取Excel表格数据,并将其转换为矩阵形式以进行进一步的数据处理和分析。通过调用pandas的函数,可以对数据进行排序、过滤和计算等操作。在该软件中,基于熵权法的评价模型是其中一个重要的数据处理和分析功能。通过计算指标的熵值和权重,可以对教职工进行排名和评分。这样的数据处理与分析功能为学校或组织提供了科学准确的评价结果,有助于评估教职工的绩效和贡献。
为了确保软件的稳定性和用户体验,异常处理与错误提示是不可或缺的。在文件导入、数据查询和其他操作过程中,软件会进行异常处理,以避免程序崩溃或产生不可预测的结果。例如,在文件导入过程中,如果选择的文件格式错误或未选择文件,软件会使用消息框显示相应的错误提示信息,提醒用户进行正确的操作。这样的异常处理机制
增加了软件的可靠性和用户友好性。除了功能性方面,界面美化与用户友好性也是该软件的关注点之一。通过选择合适的背景颜色、按钮样式和图片素材,使得界面具有较高的视觉吸引力。同时,通过调整布局、添加图标和优化字体样式等元素,增加了页面的美感和可视化效果,提供了良好的用户体验。这样的界面设计使得软件易于操作和理解,无论是管理员还是教职工都能够轻松使用。
综上所述,教职工评价系统是一个功能丰富且易于使用的软件,通过结合Python编程语言和Tkinter库的优势,为学校或组织提供了便捷的教职工评价管理工具。管理员可以通过导入数据、查看评价结果和进行数据分析,全面了解教职工的表现和排名情况。教职工则可以通过查询自己的评价结果,及时了解自己的绩效和贡献。通过数据处理与分析、异常处理与错误提示,以及界面美化与用户友好性等功能,该软件为教职工评价提供了可靠、准确且易于操作的解决方案。
import tkinter as tk
import numpy as np
import pandas as pd
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror,showinfo
########颜色设置
#主背景色
bg1 = '#07153C'
#按钮背景色
bg2 = '#394363'
########主窗口设置
rt = tk.Tk()
rt.resizable(0,0)
rt.geometry('400x400+200+200')
rt.title('教职工评价系统V1.0')
rt.iconbitmap(r'E:\zm\教职工评价系统\程序文件\图标.ico')
#######图片设置
#页面图片1
t1 = tk.PhotoImage(file = r'E:\zm\教职工评价系统\程序文件\教职工.png')
#管理员按钮图片
t2 =tk.PhotoImage(file = r'E:\zm\教职工评价系统\程序文件\系统管理员管理.png')
#教职工按钮图片
t3 =tk.PhotoImage(file = r'E:\zm\教职工评价系统\程序文件\管理员.png')
#页面图片2
t4 = tk.PhotoImage(file = r'E:\zm\教职工评价系统\程序文件\t4.png')
#页面图片3
t5 = tk.PhotoImage(file = r'E:\zm\教职工评价系统\程序文件\t5.png')
########建立登录页面##########
f1 = tk.Frame(rt,bg=bg1)# 登录页面框架
f1.place(x=0,y=0,width=400,height=400)
#页面主图片设置
f1l1 = tk.Label(f1,image=t1,bg=bg1)
f1l1.pack()
#登录按钮1设置
def func_f1b1(event):
f1.place_forget()
f2.place(x=0,y=0,width=400,height=400)
f1b1 = tk.Label(f1,bg = bg2,text='管理员登录',fg='white',font=('kaiti',14,'bold'))
f1b1.place(x=100,y=190,height=40,width=200)
f1b1.bind('',func_f1b1)
#登录按钮2设置
def func_f1b2(event):
f1.place_forget()
f3.place(x=0,y=0,width=400,height=400)
f1b2 = tk.Label(f1,bg = bg2,text='教职工登录',fg='white',font=('kaiti',14,'bold'))
f1b2.place(x=100,y=260,height=40,width=200)
f1b2.bind('',func_f1b2)
#登录按钮1图标设置
f1b1t = tk.Label(f1,bg = bg2,image=t2)
f1b1t.place(x=100,y=190,height=40,width=40)
#登录按钮2图标设置
f1b2t = tk.Label(f1,bg = bg2,image=t3)
f1b2t.place(x=100,y=260,height=40,width=40)
##########建立管理员页面########
def EWM(A):
'''
the entropy weight method
参数说明:
A :为原始数据矩阵A=a(i,j),表示第i个对象的j个指标,数据结构为np.array,shape=(n,m)
返回值说明
return ST,P,E,G,W,S
ST : 得分排名从小到大
P : 概率矩阵
E : 指标的熵
G : 指标混乱度
W : 指标权重
S : 评价对象得分
'''
n,m = A.shape
if 0 in A:
A += 0.00001
P = A/A.sum(axis=0)
P = np.round(P,4)
E = (-1/np.log(n))*np.sum(P*np.log(P),axis=0)
E = np.round(E,4)
G = 1-E
W = G/G.sum()
W = np.round(W,4)
S = np.sum(P*W,axis=1)
S = np.round(S,4)
ST = np.argsort(S)+1
return(ST)
f2 = tk.Frame(rt,bg=bg1)# 管理员登录页面
#f2.place(x=0,y=0,width=400,height=400)
#页面主图片设置2
f2t = tk.Label(f2,image=t4,bg=bg1)
f2t.pack()
#数据导入按钮
file = tk.StringVar() # 数据文件地址
file.set('')
file1 = tk.StringVar() # 数据文件地址1
file1.set('')
def func_f2b1(event):
global file,file1,sort,name
file.set(askopenfilename(title='教职工数据导入',filetype = [('表格文件','.xlsx'),('表格文件','.xls')]))
if file.get():
try:
data = pd.read_excel(file.get(),index_col=0).values
f2l2.config(text=f'{data.shape[0]}')
except:
f2l2.config(text='NAN')
file1.set('')
else:
f2l2.config(text='NAN')
file1.set('')
f2b1 = tk.Label(f2,bg = bg2,text='教职工数据导入',fg='white',font=('kaiti',14,'bold'))
f2b1.place(x=100,y=205,height=40,width=200)
f2b1.bind('',func_f2b1)
#教师人数标签1
f2l1 = tk.Label(f2,bg = bg1,text='人数:',fg='white',font=('kaiti',12,'bold'))
f2l1.place(x=100,y=255,height=40,width=50)
#教师人数标签2
f2l2 = tk.Label(f2,bg ='white',text='NAN',fg='black',font=('kaiti',12,'bold'))
f2l2.place(x=150,y=260,height=30,width=50)
sort = None # 排名数据
name = None # 名字数据
#模型运算按钮
def func_f2b2(event):
global file,file1,sort,name
if file.get():
try:
data = pd.read_excel(file.get(),index_col=0).values
name = pd.read_excel(file.get(),index_col=0).index.values
sort = EWM(data)
k_n = np.r_['1',name[:,None],sort[:,None]]
lt = file.get().split('/')
lt[-1] = 'v.xlsx'
file1.set('/'.join(lt))
pd.DataFrame(k_n).to_excel(file1.get())
showinfo('info','计算完成')
except:
showerror('error','文件错误')
sort = None
name = None
file1.set('')
else:
showerror('error','文件未导入')
sort = None
name = None
file1.set('')
f2b2 = tk.Label(f2,bg = bg2,text='计算',fg='white',font=('kaiti',14,'bold'))
f2b2.place(x=210,y=255,height=40,width=90)
f2b2.bind('',func_f2b2)
#返回按钮
def func_f2b3(event):
f2.place_forget()
f1.place(x=0,y=0,width=400,height=400)
f2b3 = tk.Label(f2,bg = bg2,text='返回',fg='white',font=('kaiti',14,'bold'))
f2b3.place(x=300,y=350,height=40,width=90)
f2b3.bind('',func_f2b3)
##########建立教师界面#############
f3 = tk.Frame(rt,bg=bg1)# 教师登录界面
#f3.place(x=0,y=0,width=400,height=400)
#页面主图片设置3
f3t = tk.Label(f3,image=t5,bg=bg1)
f3t.pack()
#姓名标签
f3l1 = tk.Label(f3,bg = bg1,text='姓名:',fg='white',font=('kaiti',12,'bold'))
f3l1.place(x=100,y=205,height=40,width=50)
#姓名输入框
f3e1 = tk.Entry(f3,font=('kaiti',14,'bold'))
f3e1.place(x=150,y=210,height=30,width=130)
#分数标签
f3l2 = tk.Label(f3,bg = bg1,text='排名:',fg='white',font=('kaiti',12,'bold'))
f3l2.place(x=100,y=245,height=40,width=50)
#分数
f3l3 = tk.Label(f3,bg ='white',text='NAN',fg='black',font=('kaiti',12,'bold'))
f3l3.place(x=150,y=250,height=30,width=130)
#返回按钮
def func_f3b1(event):
f3.place_forget()
f1.place(x=0,y=0,width=400,height=400)
f3b1 = tk.Label(f3,bg = bg2,text='返回',fg='white',font=('kaiti',14,'bold'))
f3b1.place(x=300,y=350,height=40,width=90)
f3b1.bind('',func_f3b1)
#查询按钮
def func_f3b2(event):
if f3e1.get():
data = pd.read_excel(r'D:\桌面文件\软著\教职工评价系统\程序文件\v.xlsx',index_col=0).values
if f3e1.get() in data[:,0]:
f3l3.config(text = f'{data[f3e1.get()== data[:,0]][0,1]}')
else:
showinfo('info','查无此人')
f3l3.config(text = 'NAN')
else:
showinfo('info','请输入姓名')
f3l3.config(text = 'NAN')
f3b2 = tk.Label(f3,bg = bg2,text='查询',fg='white',font=('kaiti',14,'bold'))
f3b2.place(x=150,y=300,height=30,width=100)
f3b2.bind('',func_f3b2)
rt.mainloop()1.1 登录界面
如图1,为登录界面。
图1:登录界面
登录界面的元素有:
1. f1: 登录页面的框架(Frame)元素,用于容纳其他元素。
2. f1l1: 页面主图片设置。Label元素,显示一个图片(t1),作为登录页面的主要视觉元素。
3. f1b1: 管理员登录按钮。Label元素,显示文本'管理员登录',具有背景色(bg2)和字体颜色(fg)设置,以及字体样式设置。当点击该按钮时,触发函数func_f1b1,隐藏登录页面(f1)并显示管理员登录页面(f2)。
4. f1b2: 教职工登录按钮。Label元素,显示文本'教职工登录',具有背景色(bg2)和字体颜色(fg)设置,以及字体样式设置。当点击该按钮时,触发函数func_f1b2,隐藏登录页面(f1)并显示教职工登录页面(f3)。
5. f1b1t: 管理员登录按钮图标。Label元素,显示一个图片(t2),作为管理员登录按钮的图标。
6. f1b2t: 教职工登录按钮图标。Label元素,显示一个图片(t3),作为教职工登录按钮的图标。
登录界面的功能为:
选择登录类型:界面上有两个登录按钮,分别是'管理员登录'和'教职工登录'。根据你的身份选择相应的登录按钮。
1.2 管理员界面
管理员界面如图2所示。
图2:管理员界面
如图2所示,管理员界面的元素与功能如下:
1. 页面框架 (`f2`): 用于容纳管理员登录页面的主要内容。
2. 页面主图片 (`f2t`): 显示管理员登录页面的主要图片。
3. 教职工数据导入按钮 (`f2b1`): 点击该按钮可以选择教职工数据文件进行导入。选择的文件应为表格文件(.xlsx或.xls格式)。导入的数据将用于后续的评价计算。如图3所示。
图3:数据导入界面
4. 教师人数标签 (`f2l1`, `f2l2`): 显示导入的教职工人数。`f2l1`为标签文本'人数:',`f2l2`为显示实际人数的标签。人数信息会根据导入的数据进行更新。如图4所示。
图4:导入数据后的界面
5. 模型运算按钮 (`f2b2`): 点击该按钮会执行评价模型的运算。运算过程使用了熵权法(Entropy Weight Method)对导入的教职工数据进行评价计算,并生成评价结果文件。计算完成后,会弹出提示信息,如图5所示。

图5:计算完成提示
6. 返回按钮 (`f2b3`): 点击该按钮可以返回到登录页面 (`f1`),即管理员登录页面的上一级页面。
注意:在执行数据导入和模型运算操作之前,需要先点击数据导入按钮 (`f2b1`) 选择有效的教职工数据文件。如图6所示。
图6:示例数据
3.教职工界面
教职工界面如图7所示。
图7:教职工界面
教职工界面的元素和功能描述如下:
1. 页面框架 (`f3`): 用于容纳教师登录界面的主要内容。
2. 页面主图片 (`f3t`): 显示教师登录界面的主要图片。
3. 姓名标签 (`f3l1`): 标识姓名输入框的作用。
4. 姓名输入框 (`f3e1`): 用于输入教师的姓名。
5. 分数标签 (`f3l2`): 标识排名分数的含义。
6. 分数 (`f3l3`): 显示根据输入的教师姓名查询得到的排名分数。如果姓名匹配成功,将显示对应教师的排名分数;否则,将显示'NAN'。
7. 返回按钮 (`f3b1`): 点击该按钮可以返回到登录页面 (`f1`),即教师登录页面的上一级页面。
8. 查询按钮 (`f3b2`): 点击该按钮可以执行教师排名查询操作。查询过程将根据输入的教师姓名在评价结果文件中查找对应的排名分数。如果姓名匹配成功,将更新显示分数;否则,将弹出提示信息。
请注意,教师排名查询功能依赖于之前管理员页面的评价模型运算操作,因此需要先执行管理员页面中的评价模型运算,并确保生成了评价结果文件。