python中学生成绩管理系统,Python成绩管理
永远的神干货盘点
作者简介:大家好我是黑客707,大家可以叫我黑客,新星计划第三季大蟒赛道Top1?
?个人主页:黑客707的世纪乐知博客
?系列专栏:python
@TOC
学生成绩管理系统简介
一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用图形界面库进行制作,利用。文本文件(文本文件)文件进行存储数据)
源代码?
仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)
学生。文本文件(textfile)
用于存储数据
main.py
来自tkinter导入*
从登录导入*
将图形界面作为坦克导入
root=tk .Tk()
root.title(欢迎进入学生成绩管理系统)
登录页面(根)
root.mainloop()
Login.py
来自tkinter导入*
从tkinter.messagebox导入*
从菜单页面导入*
类登录页面(对象):
def __init__(self,master=None):
self.root=master #定义内部变量根
自我。根。几何( % dx % d %(300,180)) #设置窗口大小
self.username=StringVar()
self.password=StringVar()
self.createPage()
def createPage(自身):
self.page=Frame(self.root) #创建基本框架
self.page.pack()
标签(self.page).网格(row=0,stick=W)
标签(self.page,text=账户: ).网格(row=1,stick=W,pady=10)
Entry(self.page,textvariable=self.username).网格(行=1,列=1,棒=E)
标签(self.page,text=密码: ).网格(row=2,stick=W,pady=10)
Entry(self.page,textvariable=self.password,show=* ).网格(行=2,列=1,棒=E)
按钮(self.page,text=登陆,command=self.loginCheck).网格(row=3,stick=W,pady=10)
按钮(self.page,text=退出,command=self.page.quit).网格(行=3,列=1,棒=E)
定义登录检查(自我):
name=self.username.get()
password=self.password.get()
如果name==黑客707 和密码==admin :
self.page.destroy()
MenuPage(self.root)
否则:
showinfo(title=错误,消息=账号或密码错误!)
db.py
导入数据
类学生数据库(对象):
def __init__(self):
self.students=[]
自我. load _学生_数据()
定义插入(自己,学生):
self.students.append(student)
打印(自学者)
定义全部(自己):
回归自我。学生
def delete_by_name(self,name): #删除数据
对于自学的学生,学生:
if name==student[name]:
self.students.remove(student)
破裂
否则:
返回错误的
返回真实的
# 查询
定义按姓名搜索(自己,姓名):
对于自学的学生,学生:
if name==student[name]:
返校学生#姓名成绩
否则:
返回错误的
# 修改
定义更新(自己,学生):#修改数据
name=stu[name]
对于自学的学生,学生:
if name==student[name]:
学生更新(斯图)
返回真实的
否则:
返回错误的
# 加载文件
定义_加载_学生_数据(自身):
用打开( students.txt , r ,编码=utf-8 )作为女:
text=f.read()
如果文本:
self.students=json.loads(文本)
# 保存数据
def保存数据(自身):
用打开( students.txt , w ,编码=utf-8 )作为女:
text=json.dumps(self.students,确保_ascii=False)
f .写(文本)
db=StudentDB()
MenuPage.py
将图形界面作为坦克导入
从视图导入*
类菜单页面(对象):
def __init__(self,master=None):
self.root=master
自我。根。几何( % dx % d %(600,400))
self.create_page()
自我。input _ page=输入框(self。根)
自我。query _ page=查询框架(self。根)
自我。delete _ page=删除框架(自身。根)
自我。update _ page=UpdateFrame(self。根)
自我。about _ page=关于框架(self。根)
self.input_page.pack()
定义创建_页面(自身):
# 创建菜单对象
菜单栏=tk .菜单(self.root)
#添加命令添加
menubar.add_command(label=录入,command=self.input_data) # label
menubar.add_command(label=查询,command=self.query_data) # label
menubar.add_command(label=删除,命令=自我。delete _ data)#标签
menubar.add_command(label=修改,命令=自我。更新数据)#标签
menubar.add_command(label=关于,command=self.about_data) # label
# 设置菜单栏
自我。根。配置(菜单=菜单栏)
# 切换界面
定义输入数据(自身):
self.input_page.pack()
self.update_page.pack_forget()
self.delete_page.pack_forget()
self.about_page.pack_forget()
self.query_page.pack_forget()
定义查询_数据(自身):
self.input_page.pack_forget()
self.query_page.pack()
self.update_page.pack_forget()
self.delete_page.pack_forget()
self.about_page.pack_forget()
定义更新数据(自身):
self.input_page.pack_forget()
self.update_page.pack()
self.delete_page.pack_forget()
self.about_page.pack_forget()
self.query_page.pack_forget()
定义删除_数据(自身):
self.input_page.pack_forget()
self.update_page.pack_forget()
self.delete_page.pack()
self.about_page.pack_forget()
self.query_page.pack_forget()
定义关于数据(自身):
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
将图形界面作为坦克导入
从数据库导入数据库
从图形界面导入天天快递
# 录入类
类输入框架(tk .框架):
def __init__(self,master=None):
超级()。__init__(主)
self.root=master
self.name=tk .字符串变量()
self.math=tk .字符串变量()
self.chinese=tk .字符串变量()
self.english=tk .字符串变量()
self.status=tk .字符串变量()
self.create_page()
定义创建_页面(自身):
tk .标签(自我)。grid(row=0,stick=tk .w,pady=10)
tk .标签(self,text=姓名:).grid(row=1,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self,textvariable=self.name).网格(行=1,列=1,stick=tk .e)
tk .标签(self,text=数学:).grid(row=2,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self,textvariable=self.math).网格(行=2,列=1,stick=tk .e)
tk .标签(self,text=语文:).grid(row=3,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self,textvariable=self.chinese).网格(行=3,列=1,stick=tk .e)
tk .标签(self,text=英语:).grid(row=4,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self,textvariable=self.english).网格(行=4,列=1,stick=tk .e)
tk .按钮(self,text=录入,command=self.recode_student).网格(行=5,列=1,stick=tk .e,pady=10)
tk .Label(self,textvariable=self.status).网格(行=6,列=1,stick=tk .e,pady=10)
# 录入成绩
定义记录_学生(自己):
学生={
name: self.name.get(),
math: self.math.get(),
中文:self . China . get(),
英语:self.english.get(),
} # 一个学生的成绩
db.insert(学生)
# get()得到值
# set()设置值
self.status.set(插入数据成功!)
自我. clear_data()
db.save_data()
# 清空文本数据
定义_清除_数据(自身):
self.name.set( )
self.math.set( )
self.chinese.set( )
self.english.set( )
# 查询类
类查询框架(tk .框架):
def __init__(self,master=None):
超级()。__init__(主)
self.root=master
self.create_page()
# 创建查询界面
定义创建_页面(自身):
self.create_tree_view()
self.show_data_frame()
#网格()
tk .按钮(self,text=刷新数据,command=self.show_data_frame).pack(anchor=tk .e,pady=5)
#树形视图
定义创建树视图(自身):
# 表头
列=(姓名,中文,数学,英文)
self.tree_view=ttk .树形视图(self,show=标题,columns=列)
self.tree_view.column(name ,width=80,anchor=center )
self.tree_view.column(中文,宽度=80,锚点=中心)
self.tree_view.column(math ,width=80,anchor=center )
self.tree_view.column(英语,宽度=80,锚点=中心)
self.tree_view.heading(name ,text=姓名)
self.tree_view.heading(中文,text=语文)
self.tree_view.heading(math ,text=数学)
self.tree_view.heading(英语,text=英语)
self.tree_view.pack()
# 显示数据
定义显示数据帧(自身):
# 删除原节点map(int,值)
对于地图中的我(自我。树形视图。delete,self.tree_view.get_children():
及格
# 拿到列表里面所有值、学生[]
students=db.all()
# 同时拿到索引跟价值值
对于index,stu in枚举(学生):
self.tree_view.insert( ),index,values=(stu[名称],stu[中文],stu
[数学],斯图[英语]))
类删除框架(tk .框架):
def __init__(self,master=None):
超级()。__init__(主)
tk .标签(self,text=删除数据).包装()
self.status=tk .字符串变量()
self.de_name=tk .StringVar() #获取删除学生的姓名
self.create_page()
# 创建界面
定义创建_页面(自身):
tk .标签(self,text=根据姓名删除信息).pack(anchor=tk .w,padx=20)
e1=tk .Entry(self,textvariable=self.de_name)
e1.pack(side=tk .左,padx=20,pady=5)
tk .按钮(self,text=删除,命令=自我。_删除)。包装(侧面=tk .右)
tk .Label(self,textvariable=self.status).包装()
# 删除
定义_删除(自身):
name=self.de_name.get()
打印(姓名)
result=db.delete_by_name(name)
如果结果:
自我。状态。集合(f"{ name }已经被删)
self.de_name.set( )
否则:
自我。状态。集合(f"{ name }不存在)
类UpdateFrame(tk .框架):
def __init__(self,master=None):
超级()。__init__(主)
self.root=master
tk .标签(self,text=修改界面).包装()
self.change_frame=tk .框架(自身)
self.change_frame.pack()
self.name=tk .字符串变量()
self.math=tk .字符串变量()
self.chinese=tk .字符串变量()
self.english=tk .字符串变量()
self.status=tk .字符串变量()
self.create_page()
定义创建_页面(自身):
tk .标签(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)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self.change_frame,textvariable=self.name).网格(行=1,列=1,stick=tk .e)
tk .Label(self.change_frame,text=数学:).grid(row=2,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self.change_frame,textvariable=self.math).网格(行=2,列=1,stick=tk .e)
tk .Label(self.change_frame,text=语文:).grid(row=3,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self.change_frame,textvariable=self.chinese).网格(行=3,列=1,stick=tk .e)
tk .Label(self.change_frame,text=英语:).grid(row=4,stick=tk .w,pady=10)
# 单行文本框条目,文本变量绑定变量
tk .Entry(self.change_frame,textvariable=self.english).网格(行=4,列=1,stick=tk .e)
# 按钮
tk .Button(self.change_frame,text=查询,命令=自我.搜索)。网格(行=6,列=0,stick=tk .w,pady=10)
tk .Button(self.change_frame,text=修改,命令=自我。_改变)。网格(行=6,列=1,stick=tk .e,pady=10)
tk .Label(self.change_frame,textvariable=self.status).网格(行=7,列=1,stick=tk .e,pady=10)
# 查询
定义_搜索(自身):
name=self.name.get()
student=db.search_by_name(name)
如果学生:
self.math.set(学生[数学])
self.chinese.set(学生[中文])
self.english.set(学生[英语])
self.status.set(f 查询到{姓名}同学的信息)
否则:
self.status.set(f 没有查询到{姓名}同学的信息)
# 更改成绩
定义_更改(自身):
name=self.name.get()
math=self.math.get()
chinese=self.chinese.get()
english=self.english.get()
stu={
姓名:姓名,
数学:数学,
中国人:中国人,
英语:英语,
}
r=数据库更新(斯图)
如果r:
自我。状态。集合(f"{ name }同学的信息更新完毕)
否则:
自我。状态。集合(f"{ name }同学的信息更新失败)
类关于框架(tk .框架):
def __init__(self,master=None):
超级()。__init__(主)
self.root=master
self.create_page()
定义创建_页面(自身):
tk .标签(self,text=关于本作品(人生苦短,我用python)).pack(anchor=tk .w)
结束语
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。