python学生系统

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.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: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()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值