import tkinter as tk import tkinter.messagebox import csv import sys def getgrades(): root=tk.Tk() root.title("查询学生成绩")#新窗口标题 root.geometry('300x400')#设置新窗的大小 root.resizable(width=0,height=0) tk.Label(root, text="姓名").grid(row=0,column=0,sticky=tk.W) tk.Label(root, text="学号").grid(row=1,column=0,sticky=tk.W) e1= tk.Entry(root)#创建输入姓名的文本框 e2= tk.Entry(root)#为输入学号创建文本框 e1.grid(row=0, column=1,columnspan=3) e2.grid(row=1, column=1,columnspan=3) tk.Button(root, text=查询学生成绩, command=lambda:check(e1,e2,text)).grid(row=2,column=0,sticky=tk.E) #放置按钮,接收查询结果的方法check() text=tk.Text(root,height=20,width=40)#放置文本框来响应查询结果 text.grid(row=3,column=0,columnspan=5)
def check(e1,e2,text): for i in data: if i[0]==e1.get() and i[1]==e2.get():#遍历数组,检查学生是否存在 if i[2]=="" and i[3]=="":#如果两个科目都不存在,则认为缺考 text.delete('1.0', tk.END) text.insert(tk.END,学生成绩未输入或学生缺考 else: text.delete('1.0', tk.END) text.insert(tk.END,{}\n英语.format(i[2],i[3])) break else:#这个else用于对for以上补充if如果句子无法实现,则实现以下句子 text.delete('1.0', tk.END) text.insert(tk.END,学生不存在!
def altermath(): root=tk.Tk() root.title("修改学生成绩") root.geometry('300x400')#设置新窗的大小 root.resizable(width=0,height=0) tk.Label(root, text="姓名").grid(row=0,column=0,sticky=tk.W) tk.Label(root, text="学号").grid(row=1,column=0,sticky=tk.W) tk.Label(root, text="高数").grid(row=2,column=0,sticky=tk.W) e1= tk.Entry(root)#创建输入姓名的文本框 e2= tk.Entry(root)#为输入学号创建文本框 e3= tk.Entry(root)#创建文本框,输入高数分数 e1.grid(row=0, column=1,columnspan=3) e2.grid(row=1, column=1,columnspan=3) e3.grid(row=2, column=1,columnspan=3) tk.Button(root, text=修改学生成绩, command=lambda:alter1(e1,e2,e3,text)).grid(row=4,column=0,sticky=tk.E) #放置按钮,连接修改方法 alter1() text=tk.Text(root,height=20,width=40) text.grid(row=5,column=0,columnspan=5)
def alter1(e1,e2,e3,text): n=0#定义一个变量来判断学生在数组中的位置 for i in data: if i[0]==e1.get() and i[1]==e2.get():#遍历数组,检查学生是否存在 data[n][2]=e3.get() text.delete('1.0', tk.END)#删除文本框的内容,以呈现新内容 text.insert(tk.END,修改成功 data.insert(0,title)#先加姓名,防止学号等标题csv文件中标题丢失 with open("studata.csv","w",newline='') as csvfile: #用with同时用写作打开文件csvfile保存 writer = csv.writer(csvfile) writer.writerows(data)#添加用户输入的数据csv文件里 csvfile.close()#关闭文件以减少内存消耗 data.pop(0)#删除上述标题 break n =1 else: text.delete('1.0', tk.END)#重置文本框 text.insert(tk.END,学生不存在修改失败!
def altereng(): root=tk.Tk() root.title("修改学生成绩") root.geometry('300x400') root.resizable(width=0,height=0) tk.Labl(root, text="姓名").grid(row=0,column=0,sticky=tk.W) tk.Label(root, text="学号").grid(row=1,column=0,sticky=tk.W) tk.Label(root, text="英语").grid(row=2,column=0,sticky=tk.W) e1= tk.Entry(root)#创建文本框,用于输入姓名 e2= tk.Entry(root)#创建文本框,用于输入学号 e3= tk.Entry(root)#创建文本框,用于输入英语成绩 e1.grid(row=0, column=1,columnspan=3) e2.grid(row=1, column=1,columnspan=3) e3.grid(row=2, column=1,columnspan=3) tk.Button(root, text='修改学生成绩', command=lambda:alter2(e1,e2,e3,text)).grid(row=4,column=0,sticky=tk.E) #按钮里面接了alter2()方法 text=tk.Text(root,height=20,width=40)#用于提醒用户是否修改成功 text.grid(row=5,column=0,columnspan=5)
def alter2(e1,e2,e3,text): n=0#定义一个变量来判断学生在数组里的位置 for i in data: if i[0]==e1.get() and i[1]==e2.get():#遍历数组并检验是否存在该学生 data[n][3]=e3.get() text.delete('1.0', tk.END)#清空文本框 text.insert(tk.END,'修改成功') data.insert(0,title) with open("studata.csv","w",newline='') as csvfile: #用with采用写的方式打开文件,同时用csvfile保存 writer = csv.writer(csvfile) writer.writerows(data)#将用户输入的数据加入到csv文件里 csvfile.close()#关闭文件减少内存 data.pop(0) break n+=1 else: text.delete('1.0', tk.END) text.insert(tk.END,'修改失败,该学生不存在!')
def inputmath(): root=tk.Tk() root.title("新增学生成绩") root.geometry('300x400') root.resizable(width=0,height=0) tk.Label(root, text="姓名").grid(row=0,column=0,sticky=tk.W) tk.Label(root, text="学号").grid(row=1,column=0,sticky=tk.W) tk.Label(root, text="高数").grid(row=2,column=0,sticky=tk.W) e1= tk.Entry(root)#创建文本框,用于输入姓名 e2= tk.Entry(root)#创建文本框,用于输入学号 e3= tk.Entry(root)#创建文本框,用于输入高数成绩 e1.grid(row=0, column=1,columnspan=3) e2.grid(row=1, column=1,columnspan=3) e3.grid(row=2, column=1,columnspan=3) tk.Button(root, text='添加学生成绩', command=lambda:input1(e1,e2,e3,text)).grid(row=4,column=0,sticky=tk.E) text=tk.Text(root,height=20,width=40) text.grid(row=5,column=0,columnspan=5)
def input1(e1,e2,e3,text): for i in data: if i[0]==e1.get() and i[1]==e2.get():#遍历数组并检验是否存在该学生 text.delete('1.0', tk.END) text.insert(tk.END,'该学生已存在,请确认是否输入错误') break else: ls=list()#新建一个数组储存姓名学号成绩 ls.append(e1.get())#依次添加数据 ls.append(e2.get()) ls.append(e3.get()) data.append(ls)#以数组的形式加入到数组data里面 data.insert(0,title) with open("studata.csv","w",newline='') as csvfile: #用with采用写的方式打开文件,同时用csvfile保存 writer = csv.writer(csvfile) writer.writerows(data)#将用户输入的数据加入到csv文件里 csvfile.close()#关闭文件 data.pop(0)#删除标题 text.delete('1.0', tk.END) text.insert(tk.END,'添加成功!')
def inputeng(): root=tk.Tk() root.title("新增学生成绩") root.geometry('300x400') root.resizable(width=0,height=0) tk.Label(root, text="姓名").grid(row=0,column=0,sticky=tk.W) tk.Label(root, text="学号").grid(row=1,column=0,sticky=tk.W) tk.Label(root, text="英语").grid(row=2,column=0,sticky=tk.W) e1= tk.Entry(root)#创建文本框,用于输入姓名 e2= tk.Entry(root)#创建文本框,用于输入学号 e3= tk.Entry(root)#创建文本框,用于输入英语成绩 e1.grid(row=0, column=1,columnspan=3) e2.grid(row=1, column=1,columnspan=3) e3.grid(row=2, column=1,columnspan=3) tk.Button(root, text='添加学生成绩', command=lambda:input2(e1,e2,e3,text)).grid(row=4,column=0,sticky=tk.E) text=tk.Text(root,height=20,width=40) text.grid(row=5,column=0,columnspan=5)
def input2(e1,e2,e3,text): for i in data: if i[0]==e1.get() and i[1]==e2.get():#遍历数组并检验是否存在该学生 text.delete('1.0', tk.END) text.insert(tk.END,'该学生已存在,请确认是否输入错误') break else: ls=list()#新建一个数组储存姓名学号成绩 ls.append(e1.get())#依次添加数据 ls.append(e2.get()) ls.append('') ls.append(e3.get()) data.append(ls)#以数组的形式加入到数组data里面 data.insert(0,title) with open("studata.csv","w",newline='') as csvfile: #用with采用写的方式打开文件,同时用csvfile保存 writer = csv.writer(csvfile) writer.writerows(data)#将用户输入的数据加入到csv文件里 csvfile.close()#关闭文件节省内存 data.pop(0) text.delete('1.0', tk.END) text.insert(tk.END,'添加成功!') #在文本框中显示结果 def nopass(): math=list()#新建高数挂科数组 eng=list()#新建英语挂科数组 text.delete('1.0', tk.END) for i in data: if i[2]!="" and i[3]!="":#将缺考学生排除在外 math1=list() eng1=list() if eval(i[2])<60:#对高数成绩进行判断 math1.append(i[0]) math1.append(i[1]) math.append(math1) if eval(i[3])<60:#对英语成绩进行判断 eng1.append(i[0]) eng1.append(i[1]) eng.append(eng1) text.insert(tk.END,'高数不及格名单为:\n') for i in math:#依次打出姓名和学号 text.insert(tk.END,str(i)+"\n") text.insert(tk.END,'英语不及格名单为:\n') for i in eng:#依次打出姓名和学号 text.insert(tk.END,str(i)+'\n') def close():#对学生成绩系统的退出 ret= tkinter.messagebox.askyesnocancel(message="真的退出吗?")#对用户进行询问 if ret==True: window.destroy()#对主窗口的销毁 def maav(): sum=0 n=0#用于统计有效成绩人数 for i in data: if i[2]!='':#只计算有效成绩 sum+=eval(i[2]) n+=1 sum=sum/n#有效成绩除以有效人数 text.delete('1.0',tk.END) text.insert(tk.END,'高数平均分为:{:.3f}'.format(sum))
def enav(): sum=0 n=0#用于统计有效成绩人数 for i in data: if i[3]!='':#只计算有效成绩 sum+=eval(i[3]) n+=1 sum=sum/n#有效成绩除以有效人数 text.delete('1.0',tk.END) text.insert(tk.END,'英语平均分为:{:.3f}'.format(sum)) window=tk.Tk() window.title('学生成绩系统') a=window.winfo_screenwidth()#获取屏幕的宽 b=window.winfo_screenheight()#获取屏幕的高 window.geometry('{}x{}'.format(a//3,b//2)) window.resizable(width=0,height=0)#窗口的排序方法
f=open('studata.csv','a+')#以'a+'的方式打开文件,先确定文件是否存在,不存在则创建 f.seek(0)#将光标移到文件最前面以便数据获取 data=[]#新建一个数组用于储存文件里的数据
for line in f:#将数据导入数组 line=line.replace("\n",'') data.append(line.split(','))
if len(data)==0:#对文件进行判断,看文件是否为新建空白文档 data.append(['姓名','学号','高数','英语'])#如果文件不存在则创建文件并输入标题 with open("studata.csv","w",newline='') as csvfile: #用with采用写的方式打开文件,同时用csvfile保存 writer = csv.writer(csvfile) writer.writerows(data)#将用户输入的数据加入到csv文件里 title=data[0] data.pop(0)#删除标题只剩数据利于剩下的数据统计
tk.Label(window, text='欢迎进入学生成绩系统').grid(row=0,column=1,sticky=tk.W) tk.Label(window, text='请选择你要进行的操作').grid(row=1,column=1,sticky=tk.W) tk.Button(window, text='查询学生成绩', command=getgrades).grid(row=2,column=1,sticky=tk.W) tk.Button(window, text='修改学生高数成绩', command=altermath).grid(row=2,column=2,sticky=tk.W) tk.Button(window, text='修改学生英语成绩', command=altereng).grid(row=3,column=1,sticky=tk.W) tk.Button(window, text='加入学生高数成绩', command=input).grid(row=3,column=2,sticky=tk.W) tk.Button(window, text='加入学生英语成绩', command=input).grid(row=4,column=1,sticky=tk.W) tk.Button(window, text='高数平均分', command=maav).grid(row=4,column=2,sticky=tk.W) tk.Button(window, text='英语平均分', command=enav).grid(row=5,column=1,sticky=tk.W) tk.Button(window, text='学生成绩不合格名单', command=nopass).grid(row=5,column=2,sticky=tk.W) tk.Button(window, text='退出系统', command=close).grid(row=6,column=2,sticky=tk.W) text=tk.Text(window,height=10,width=40) text.grid(row=7,column=1,columnspan=1) window.mainloop()