python如何实现完整学生成绩管理系统
python如何实现完整学生成绩管理系统
这篇文章主要介绍“python如何实现完整学生成绩管理系统”,在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python如何实现完整学生成绩管理系统”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
学生成绩管理系统简介
一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)
源代码
✅仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)
students.txt
用于存储数据
main.py
fromtkinterimport*fromLoginimport*importtkinterastkroot=tk.Tk()root.title('欢迎进入学生成绩管理系统')LoginPage(root)root.mainloop()
Login.py
fromtkinterimport*fromtkinter.messageboximport*fromMenuPageimport*classLoginPage(object):def__init__(self,master=None):self.root=master#定义内部变量rootself.root.geometry('%dx%d'%(300,180))#设置窗口大小self.username=StringVar()self.password=StringVar()self.createPage()defcreatePage(self):self.page=Frame(self.root)#创建Frameself.page.pack()Label(self.page).grid(row=0,stick=W)Label(self.page,text='账户:').grid(row=1,stick=W,pady=10)Entry(self.page,textvariable=self.username).grid(row=1,column=1,stick=E)Label(self.page,text='密码:').grid(row=2,stick=W,pady=10)Entry(self.page,textvariable=self.password,show='*').grid(row=2,column=1,stick=E)Button(self.page,text='登陆',command=self.loginCheck).grid(row=3,stick=W,pady=10)Button(self.page,text='退出',command=self.page.quit).grid(row=3,column=1,stick=E)defloginCheck(self):name=self.username.get()password=self.password.get()ifname=='hacker707'andpassword=='admin':self.page.destroy()MenuPage(self.root)else:showinfo(title='错误',message='账号或密码错误!')
db.py
importjsonclassStudentDB(object):def__init__(self):self.students=[]self._load_students_data()definsert(self,student):self.students.append(student)print(self.students)defall(self):returnself.studentsdefdelete_by_name(self,name):#删除数据forstudentinself.students:ifname==student["name"]:self.students.remove(student)breakelse:returnFalsereturnTrue#查询defsearch_by_name(self,name):forstudentinself.students:ifname==student["name"]:returnstudent#姓名+成绩else:returnFalse#修改defupdate(self,stu):#修改数据name=stu["name"]forstudentinself.students:ifname==student["name"]:student.update(stu)returnTrueelse:returnFalse#加载文件def_load_students_data(self):withopen("students.txt","r",encoding="utf-8")asf:text=f.read()iftext:self.students=json.loads(text)#保存数据defsave_data(self):withopen("students.txt",'w',encoding="utf-8")asf:text=json.dumps(self.students,ensure_ascii=False)f.write(text)db=StudentDB()
MenuPage.py
importtkinterastkfromviewimport*classMenuPage(object):def__init__(self,master=None):self.root=masterself.root.geometry('%dx%d'%(600,400))self.create_page()self.input_page=InputFrame(self.root)self.query_page=QuerryFrame(self.root)self.delete_page=DeleteFrame(self.root)self.update_page=UpdateFrame(self.root)self.about_page=AboutFrame(self.root)self.input_page.pack()defcreate_page(self):#创建菜单对象menubar=tk.Menu(self.root)#add_command添加menubar.add_command(label="录入",command=self.input_data)#labelmenubar.add_command(label="查询",command=self.query_data)#labelmenubar.add_command(label="删除",command=self.delete_data)#labelmenubar.add_command(label="修改",command=self.update_data)#labelmenubar.add_command(label="关于",command=self.about_data)#label#设置菜单栏self.root.config(menu=menubar)#切换界面definput_data(self):self.input_page.pack()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack_forget()self.query_page.pack_forget()defquery_data(self):self.input_page.pack_forget()self.query_page.pack()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack_forget()defupdate_data(self):self.input_page.pack_forget()self.update_page.pack()self.delete_page.pack_forget()self.about_page.pack_forget()self.query_page.pack_forget()defdelete_data(self):self.input_page.pack_forget()self.update_page.pack_forget()self.delete_page.pack()self.about_page.pack_forget()self.query_page.pack_forget()defabout_data(self):self.input_page.pack_forget()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack()self.query_page.pack_forget()
view.py
importtkinterastkfromdbimportdbfromtkinterimportttk#录入类classInputFrame(tk.Frame):def__init__(self,master=None):super().__init__(master)self.root=masterself.name=tk.StringVar()self.math=tk.StringVar()self.chinese=tk.StringVar()self.english=tk.StringVar()self.status=tk.StringVar()self.create_page()defcreate_page(self):tk.Label(self).grid(row=0,stick=tk.W,pady=10)tk.Label(self,text="姓名:").grid(row=1,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self,textvariable=self.name).grid(row=1,column=1,stick=tk.E)tk.Label(self,text="数学:").grid(row=2,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self,textvariable=self.math).grid(row=2,column=1,stick=tk.E)tk.Label(self,text="语文:").grid(row=3,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self,textvariable=self.chinese).grid(row=3,column=1,stick=tk.E)tk.Label(self,text="英语:").grid(row=4,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self,textvariable=self.english).grid(row=4,column=1,stick=tk.E)tk.Button(self,text="录入",command=self.recode_student).grid(row=5,column=1,stick=tk.E,pady=10)tk.Label(self,textvariable=self.status).grid(row=6,column=1,stick=tk.E,pady=10)#录入成绩defrecode_student(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._clear_data()db.save_data()#清空文本数据def_clear_data(self):self.name.set("")self.math.set("")self.chinese.set("")self.english.set("")#查询类classQuerryFrame(tk.Frame):def__init__(self,master=None):super().__init__(master)self.root=masterself.create_page()#创建查询界面defcreate_page(self):self.create_tree_view()self.show_data_frame()#grid()tk.Button(self,text="刷新数据",command=self.show_data_frame).pack(anchor=tk.E,pady=5)#Treeviewdefcreate_tree_view(self):#表头columns=("name","chinese","math","english")self.tree_view=ttk.Treeview(self,show='headings',columns=columns)self.tree_view.column("name",width=80,anchor='center')self.tree_view.column("chinese",width=80,anchor='center')self.tree_view.column("math",width=80,anchor='center')self.tree_view.column("english",width=80,anchor='center')self.tree_view.heading("name",text='姓名')self.tree_view.heading("chinese",text='语文')self.tree_view.heading("math",text='数学')self.tree_view.heading("english",text='英语')self.tree_view.pack()#显示数据defshow_data_frame(self):#删除原节点map(int,值)foriinmap(self.tree_view.delete,self.tree_view.get_children("")):pass#拿到列表里面所有值、students[]students=db.all()#同时拿到索引跟value值forindex,stuinenumerate(students):self.tree_view.insert('',index,values=(stu["name"],stu["chinese"],stu["math"],stu["english"]))classDeleteFrame(tk.Frame):def__init__(self,master=None):super().__init__(master)tk.Label(self,text='删除数据').pack()self.status=tk.StringVar()self.de_name=tk.StringVar()#获取删除学生的姓名self.create_page()#创建界面defcreate_page(self):tk.Label(self,text="根据姓名删除信息").pack(anchor=tk.W,padx=20)e1=tk.Entry(self,textvariable=self.de_name)e1.pack(side=tk.LEFT,padx=20,pady=5)tk.Button(self,text='删除',command=self._delete).pack(side=tk.RIGHT)tk.Label(self,textvariable=self.status).pack()#删除def_delete(self):name=self.de_name.get()print(name)result=db.delete_by_name(name)ifresult:self.status.set(f'{name}已经被删')self.de_name.set("")else:self.status.set(f'{name}不存在')classUpdateFrame(tk.Frame):def__init__(self,master=None):super().__init__(master)self.root=mastertk.Label(self,text='修改界面').pack()self.change_frame=tk.Frame(self)self.change_frame.pack()self.name=tk.StringVar()self.math=tk.StringVar()self.chinese=tk.StringVar()self.english=tk.StringVar()self.status=tk.StringVar()self.create_page()defcreate_page(self):tk.Label(self.change_frame).grid(row=0,stick=tk.W,pady=10)tk.Label(self.change_frame,text="姓名:").grid(row=1,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self.change_frame,textvariable=self.name).grid(row=1,column=1,stick=tk.E)tk.Label(self.change_frame,text="数学:").grid(row=2,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self.change_frame,textvariable=self.math).grid(row=2,column=1,stick=tk.E)tk.Label(self.change_frame,text="语文:").grid(row=3,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self.change_frame,textvariable=self.chinese).grid(row=3,column=1,stick=tk.E)tk.Label(self.change_frame,text="英语:").grid(row=4,stick=tk.W,pady=10)#单行文本框entry,textvariable绑定变量tk.Entry(self.change_frame,textvariable=self.english).grid(row=4,column=1,stick=tk.E)#按钮tk.Button(self.change_frame,text='查询',command=self._search).grid(row=6,column=0,stick=tk.W,pady=10)tk.Button(self.change_frame,text='修改',command=self._change).grid(row=6,column=1,stick=tk.E,pady=10)tk.Label(self.change_frame,textvariable=self.status).grid(row=7,column=1,stick=tk.E,pady=10)#查询def_search(self):name=self.name.get()student=db.search_by_name(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}同学的信息')#更改成绩def_change(self):name=self.name.get()math=self.math.get()chinese=self.chinese.get()english=self.english.get()stu={"name":name,"math":math,"chinese":chinese,"english":english,}r=db.update(stu)ifr:self.status.set(f"{name}同学的信息更新完毕")else:self.status.set(f"{name}同学的信息更新失败")classAboutFrame(tk.Frame):def__init__(self,master=None):super().__init__(master)self.root=masterself.create_page()defcreate_page(self):tk.Label(self,text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)
到此,关于“python如何实现完整学生成绩管理系统”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...
-
Python如何利用D3Blocks绘制可动态交互的图表
-
2021年度编程语言揭晓
-
PPython:PHP 拥抱 Python 的利器
-
哪种Python IDE最适合你?这里有一份优缺点列表
-
Python分隔字符串函数用法split
aaa,bbb=str.split(‘&&’,2)第一个参数为分隔符第二个参数是要完成的最大拆分数...
-
php安全编程——python测试实例编写
-
神奇的Python模块:pdfkit,将Python抓取的网址内容保存pdf文件