学生信息管理系统

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkinter import filedialog
import pickle

win=Tk()
win.title('学生信息管理系统')
win.geometry('520x590+400+200')

ListTemp=[]


f1 = LabelFrame(win,text='信息管理')
f1.grid(row=0,column=0,padx=10,pady=10)

Label(f1,text='学生姓名').grid(row=0,column=0,padx=10,pady=10)
Label(f1,text='学生年龄').grid(row=0,column=2,padx=10,pady=10)
Label(f1,text='数学成绩').grid(row=1,column=0,padx=10,pady=10)
Label(f1,text='语文成绩').grid(row=1,column=2,padx=10,pady=10)
Label(f1,text='现住城市').grid(row=2,column=2,padx=10,pady=10)

name=StringVar()
Entry(f1,textvariable=name,width=20).grid(row=0,column=1,padx=10,pady=10)
age=StringVar()
Entry(f1,textvariable=age,width=20).grid(row=0,column=3,padx=10,pady=10)
math=StringVar()
Entry(f1,textvariable=math,width=20).grid(row=1,column=1,padx=10,pady=10)
chinese=StringVar()
Entry(f1,textvariable=chinese,width=20).grid(row=1,column=3,padx=10,pady=10)

v = IntVar()
v.set(1)
Radiobutton(f1,text='男生',variable=v,value=1).grid(row=2,column=0,padx=10,pady=10)
Radiobutton(f1,text='女生',variable=v,value=2).grid(row=2,column=1,padx=10,pady=10)

city=StringVar()
c = ttk.Combobox(f1,textvariable=city,width=15)
c.grid(row=2,column=3,padx=10,pady=10)
c['values'] = ('北京市','上海市','深圳市')
c['state'] = 'readonly'
c.current(0)

f2 = LabelFrame(win,text='信息查询')
f2.grid(row=1,column=0,padx=10,pady=10,sticky=W+E)





ch=StringVar()
ch.set('输入学生姓名')
Button(f2,text='查询',width=10).grid(row=0,column=4,padx=10,pady=10)
Entry(f2,textvariable=ch,width=15).grid(row=0,column=5,padx=10,pady=10)

f3 = LabelFrame(win,text='学生情况明细',font=(None ,10),padx=5,pady=5)
f3.grid(row=3,column = 0,padx=10,pady=1)
tree = ttk.Treeview(f3,show='headings',columns=('name','age','sex','city','math','chinese'))

tree.column('name',width=80,anchor='center')
tree.heading('name',text='姓名')
tree.column('age',width=60,anchor='center')
tree.heading('age',text='年龄')
tree.column('sex',width=80,anchor='center')
tree.heading('sex',text='性别')
tree.column('city',width=80,anchor='center')
tree.heading('city',text='现住城市')
tree.column('math',width=80,anchor='center')
tree.heading('math',text='数学成绩')
tree.column('chinese',width=80,anchor='center')
tree.heading('chinese',text='语文成绩')




#加滚动条
vbar = Scrollbar(f3, orient=VERTICAL)
vbar.config(command = tree.yview)
tree.configure(yscrollcommand=vbar.set)
tree.grid(row=3)
vbar.grid(row=3, column=1,sticky=NS)

tree.grid()

f4 = LabelFrame(win,padx=5,pady=5)
f4.grid(row=5,column = 0,padx=10,pady=1,sticky=W+E)

#添加学生
def addDate():
    if name.get()=='' or age.get()=='' or math.get()=='' or chinese.get()=='':
        messagebox.showinfo('提示','数据不完整')
        return
    sname = name.get()
    sage = age.get()
    smath = math.get()
    schinese = chinese.get()
    ssex = v.get()
    if ssex==1:
        ssex=''
    else:
        ssex=''
    scity = city.get()
    tree.insert('',END,values=(sname,sage,ssex,schinese,smath,scity))
    messagebox.showinfo('提示','添加成功')
#修改学生
def modDate():
    try:
        i = tree.selection()
        t = tree.item(i,'values')
        name.set(t[0])
        age.set(t[1])
        math.set(t[2])
        chinese.set(t[2])
    except:
        messagebox.showinfo('提示','请先选中要修改的学生')
        return
    r = messagebox.askyesno('提示','确定要修改此学生吗?')
    if r==True:
        tree.delete(i)
    
#删除学生
def delDate():
    try:
        i = tree.selection()
    except:
        messagebox.showinfo('提示','请先选中要删除的学生')
        return
    r = messagebox.askyesno('提示','确定要删除此学生吗?')
    if r==True:
        tree.delete(i)
        messagebox.showinfo('提示','删除成功')
    
#重置表单
def clearDate():
    name.set('')
    age.set('')
    math.set('')
    chinese.set('')


Button(f2,text='添加',width=5,command=addDate).grid(row=0,column=0,padx=10,pady=10)
Button(f2,text='修改',width=5,command=modDate).grid(row=0,column=1,padx=10,pady=10)
Button(f2,text='删除',width=5,command=delDate).grid(row=0,column=2,padx=10,pady=10)
Button(f2,text='重置',width=5,command=clearDate).grid(row=0,column=3,padx=10,pady=10)

stuList=[]
#保存数据
def saveDate():
    itemList=[]
    items = tree.get_children()
    for i in items:
        stuList.append(list(tree.item(i,'values')))
    fileName = filedialog.asksaveasfilename(defaultextension='.txt')
    r = messagebox.askyesno('提示','确定更新数据吗')
    if r==True:
        with open(fileName,'wb') as file:
            pickle.dump(stuList,file)
        #tree.delete(i)
        messagebox.showinfo('提示','保存成功')       
    
    
        
#读取数据
def readDate():
    fileName = filedialog.askopenfilename()
    with open(fileName,'rb') as file:
        s = pickle.load(file)
    for i in s:
        tree.insert('',END,values=(i[0],i[1],i[2],i[3],i[4],i[5]))
#自定义项
def zhidingyi():
    pass
#退出程序
def exitDate():
    win.destroy()

Button(f4,text='读取数据',width=12,anchor='center',command=readDate).grid(row=0,column=0,padx=10,pady=10)
Button(f4,text='保存数据',width=12,anchor='center',command=saveDate).grid(row=0,column=1,padx=10,pady=10)
Button(f4,text='自定义项',width=12,anchor='center').grid(row=0,column=2,padx=10,pady=10)
Button(f4,text='退出程序',width=12,anchor='center',command=exitDate).grid(row=0,column=3,padx=10,pady=10)


















win.mainloop()

 

posted @ 2017-04-17 15:00  疯陈演义  阅读(565)  评论(0编辑  收藏  举报