读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python实现一个完整版学生成绩管理系统,大家可以在过程中查缺补漏,提升水平学生成绩管理系统简介 一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用。txt文件进行存储数据) 源代码 仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)students。txt 用于存储数据main。pyfromtkinterimportfromLoginimportimporttkinterastkroottk。Tk()root。title(欢迎进入学生成绩管理系统)LoginPage(root)root。mainloop()Login。pyfromtkinterimportfromtkinter。messageboximportfromMenuPageimportclassLoginPage(object):definit(self,masterNone):self。rootmaster定义内部变量rootself。root。geometry(dxd(300,180))设置窗口大小self。usernameStringVar()self。passwordStringVar()self。createPage()defcreatePage(self):self。pageFrame(self。root)创建Frameself。page。pack()Label(self。page)。grid(row0,stickW)Label(self。page,text账户:)。grid(row1,stickW,pady10)Entry(self。page,textvariableself。username)。grid(row1,column1,stickE)Label(self。page,text密码:)。grid(row2,stickW,pady10)Entry(self。page,textvariableself。password,show)。grid(row2,column1,stickE)Button(self。page,text登陆,commandself。loginCheck)。grid(row3,stickW,pady10)Button(self。page,text退出,commandself。page。quit)。grid(row3,column1,stickE)defloginCheck(self):nameself。username。get()passwordself。password。get()ifnamehacker707andpasswordadmin:self。page。destroy()MenuPage(self。root)else:showinfo(title错误,message账号或密码错误!)db。pyimportjsonclassStudentDB(object):definit(self):self。students〔〕self。loadstudentsdata()definsert(self,student):self。students。append(student)print(self。students)defall(self):returnself。studentsdefdeletebyname(self,name):删除数据forstudentinself。students:ifnamestudent〔name〕:self。students。remove(student)breakelse:returnFalsereturnTrue查询defsearchbyname(self,name):forstudentinself。students:ifnamestudent〔name〕:returnstudent姓名成绩else:returnFalse修改defupdate(self,stu):修改数据namestu〔name〕forstudentinself。students:ifnamestudent〔name〕:student。update(stu)returnTrueelse:returnFalse加载文件defloadstudentsdata(self):withopen(students。txt,r,encodingutf8)asf:textf。read()iftext:self。studentsjson。loads(text)保存数据defsavedata(self):withopen(students。txt,w,encodingutf8)asf:textjson。dumps(self。students,ensureasciiFalse)f。write(text)dbStudentDB()MenuPage。pyimporttkinterastkfromviewimportclassMenuPage(object):definit(self,masterNone):self。rootmasterself。root。geometry(dxd(600,400))self。createpage()self。inputpageInputFrame(self。root)self。querypageQuerryFrame(self。root)self。deletepageDeleteFrame(self。root)self。updatepageUpdateFrame(self。root)self。aboutpageAboutFrame(self。root)self。inputpage。pack()defcreatepage(self):创建菜单对象menubartk。Menu(self。root)addcommand添加menubar。addcommand(label录入,commandself。inputdata)labelmenubar。addcommand(label查询,commandself。querydata)labelmenubar。addcommand(label删除,commandself。deletedata)labelmenubar。addcommand(label修改,commandself。updatedata)labelmenubar。addcommand(label关于,commandself。aboutdata)label设置菜单栏self。root。config(menumenubar)切换界面definputdata(self):self。inputpage。pack()self。updatepage。packforget()self。deletepage。packforget()self。aboutpage。packforget()self。querypage。packforget()defquerydata(self):self。inputpage。packforget()self。querypage。pack()self。updatepage。packforget()self。deletepage。packforget()self。aboutpage。packforget()defupdatedata(self):self。inputpage。packforget()self。updatepage。pack()self。deletepage。packforget()self。aboutpage。packforget()self。querypage。packforget()defdeletedata(self):self。inputpage。packforget()self。updatepage。packforget()self。deletepage。pack()self。aboutpage。packforget()self。querypage。packforget()defaboutdata(self):self。inputpage。packforget()self。updatepage。packforget()self。deletepage。packforget()self。aboutpage。pack()self。querypage。packforget()view。pyimporttkinterastkfromdbimportdbfromtkinterimportttk录入类classInputFrame(tk。Frame):definit(self,masterNone):super()。init(master)self。rootmasterself。nametk。StringVar()self。mathtk。StringVar()self。chinesetk。StringVar()self。englishtk。StringVar()self。statustk。StringVar()self。createpage()defcreatepage(self):tk。Label(self)。grid(row0,sticktk。W,pady10)tk。Label(self,text姓名:)。grid(row1,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self,textvariableself。name)。grid(row1,column1,sticktk。E)tk。Label(self,text数学:)。grid(row2,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self,textvariableself。math)。grid(row2,column1,sticktk。E)tk。Label(self,text语文:)。grid(row3,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self,textvariableself。chinese)。grid(row3,column1,sticktk。E)tk。Label(self,text英语:)。grid(row4,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self,textvariableself。english)。grid(row4,column1,sticktk。E)tk。Button(self,text录入,commandself。recodestudent)。grid(row5,column1,sticktk。E,pady10)tk。Label(self,textvariableself。status)。grid(row6,column1,sticktk。E,pady10)录入成绩defrecodestudent(self):student{name:self。name。get(),math:self。math。get(),chinese:self。chinese。get(),english:self。english。get(),}一个学生的成绩db。insert(student)get()得到值set()设置值self。status。set(插入数据成功!)self。cleardata()db。savedata()清空文本数据defcleardata(self):self。name。set()self。math。set()self。chinese。set()self。english。set()查询类classQuerryFrame(tk。Frame):definit(self,masterNone):super()。init(master)self。rootmasterself。createpage()创建查询界面defcreatepage(self):self。createtreeview()self。showdataframe()grid()tk。Button(self,text刷新数据,commandself。showdataframe)。pack(anchortk。E,pady5)Treeviewdefcreatetreeview(self):表头columns(name,chinese,math,english)self。treeviewttk。Treeview(self,showheadings,columnscolumns)self。treeview。column(name,width80,anchorcenter)self。treeview。column(chinese,width80,anchorcenter)self。treeview。column(math,width80,anchorcenter)self。treeview。column(english,width80,anchorcenter)self。treeview。heading(name,text姓名)self。treeview。heading(chinese,text语文)self。treeview。heading(math,text数学)self。treeview。heading(english,text英语)self。treeview。pack()显示数据defshowdataframe(self):删除原节点map(int,值)foriinmap(self。treeview。delete,self。treeview。getchildren()):pass拿到列表里面所有值、students〔〕studentsdb。all()同时拿到索引跟value值forindex,stuinenumerate(students):self。treeview。insert(,index,values(stu〔name〕,stu〔chinese〕,stu〔math〕,stu〔english〕))classDeleteFrame(tk。Frame):definit(self,masterNone):super()。init(master)tk。Label(self,text删除数据)。pack()self。statustk。StringVar()self。denametk。StringVar()获取删除学生的姓名self。createpage()创建界面defcreatepage(self):tk。Label(self,text根据姓名删除信息)。pack(anchortk。W,padx20)e1tk。Entry(self,textvariableself。dename)e1。pack(sidetk。LEFT,padx20,pady5)tk。Button(self,text删除,commandself。delete)。pack(sidetk。RIGHT)tk。Label(self,textvariableself。status)。pack()删除defdelete(self):nameself。dename。get()print(name)resultdb。deletebyname(name)ifresult:self。status。set(f{name}已经被删)self。dename。set()else:self。status。set(f{name}不存在)classUpdateFrame(tk。Frame):definit(self,masterNone):super()。init(master)self。rootmastertk。Label(self,text修改界面)。pack()self。changeframetk。Frame(self)self。changeframe。pack()self。nametk。StringVar()self。mathtk。StringVar()self。chinesetk。StringVar()self。englishtk。StringVar()self。statustk。StringVar()self。createpage()defcreatepage(self):tk。Label(self。changeframe)。grid(row0,sticktk。W,pady10)tk。Label(self。changeframe,text姓名:)。grid(row1,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self。changeframe,textvariableself。name)。grid(row1,column1,sticktk。E)tk。Label(self。changeframe,text数学:)。grid(row2,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self。changeframe,textvariableself。math)。grid(row2,column1,sticktk。E)tk。Label(self。changeframe,text语文:)。grid(row3,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self。changeframe,textvariableself。chinese)。grid(row3,column1,sticktk。E)tk。Label(self。changeframe,text英语:)。grid(row4,sticktk。W,pady10)单行文本框entry,textvariable绑定变量tk。Entry(self。changeframe,textvariableself。english)。grid(row4,column1,sticktk。E)按钮tk。Button(self。changeframe,text查询,commandself。search)。grid(row6,column0,sticktk。W,pady10)tk。Button(self。changeframe,text修改,commandself。change)。grid(row6,column1,sticktk。E,pady10)tk。Label(self。changeframe,textvariableself。status)。grid(row7,column1,sticktk。E,pady10)查询defsearch(self):nameself。name。get()studentdb。searchbyname(name)ifstudent:self。math。set(student〔math〕)self。chinese。set(student〔chinese〕)self。english。set(student〔english〕)self。status。set(f查询到{name}同学的信息)else:self。status。set(f没有查询到{name}同学的信息)更改成绩defchange(self):nameself。name。get()mathself。math。get()chineseself。chinese。get()englishself。english。get()stu{name:name,math:math,chinese:chinese,english:english,}rdb。update(stu)ifr:self。status。set(f{name}同学的信息更新完毕)else:self。status。set(f{name}同学的信息更新失败)classAboutFrame(tk。Frame):definit(self,masterNone):super()。init(master)self。rootmasterself。createpage()defcreatepage(self):tk。Label(self,text关于本作品(人生苦短,我用python))。pack(anchortk。W) 原文链接:https:www。jb51。netarticle241166。htm