python如何实现完整学生成绩管理系统
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年11月08日python如何实现完整学生成绩管理系统
这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python如何实现完整学生成绩管理系统"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
学生成绩管理系统简介
一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)


源代码
✅仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)
students.txt
用于存储数据
main.py
from tkinter import *from Login import *import tkinter as tkroot = tk.Tk()root.title('欢迎进入学生成绩管理系统')LoginPage(root)root.mainloop()Login.py
from tkinter import *from tkinter.messagebox import *from MenuPage import *class LoginPage(object): def __init__(self, master=None): self.root = master # 定义内部变量root self.root.geometry('%dx%d' % (300, 180)) # 设置窗口大小 self.username = StringVar() self.password = StringVar() self.createPage() def createPage(self): self.page = Frame(self.root) # 创建Frame self.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) def loginCheck(self): name = self.username.get() password = self.password.get() if name == 'hacker707' and password == 'admin': self.page.destroy() MenuPage(self.root) else: showinfo(title='错误', message='账号或密码错误!')db.py
import jsonclass StudentDB(object): def __init__(self): self.students = [] self._load_students_data() def insert(self, student): self.students.append(student) print(self.students) def all(self): return self.students def delete_by_name(self, name): # 删除数据 for student in self.students: if name == student["name"]: self.students.remove(student) break else: return False return True # 查询 def search_by_name(self, name): for student in self.students: if name == student["name"]: return student # 姓名+成绩 else: return False # 修改 def update(self, stu): # 修改数据 name = stu["name"] for student in self.students: if name == student["name"]: student.update(stu) return True else: return False # 加载文件 def _load_students_data(self): with open("students.txt", "r", encoding="utf-8") as f: text = f.read() if text: self.students = json.loads(text) # 保存数据 def save_data(self): with open("students.txt", 'w', encoding="utf-8") as f: text = json.dumps(self.students, ensure_ascii=False) f.write(text)db = StudentDB()MenuPage.py
import tkinter as tkfrom view import *class MenuPage(object): def __init__(self, master=None): self.root = master self.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() def create_page(self): # 创建菜单对象 menubar = tk.Menu(self.root) # add_command 添加 menubar.add_command(label="录入", command=self.input_data) # label menubar.add_command(label="查询", command=self.query_data) # label menubar.add_command(label="删除", command=self.delete_data) # label menubar.add_command(label="修改", command=self.update_data) # label menubar.add_command(label="关于", command=self.about_data) # label # 设置菜单栏 self.root.config(menu=menubar) # 切换界面 def input_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() def query_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() def update_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() def delete_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() def about_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
import tkinter as tkfrom db import dbfrom tkinter import ttk# 录入类class InputFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master self.name = tk.StringVar() self.math = tk.StringVar() self.chinese = tk.StringVar() self.english = tk.StringVar() self.status = tk.StringVar() self.create_page() def create_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) # 录入成绩 def recode_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("")# 查询类class QuerryFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master self.create_page() # 创建查询界面 def create_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) # Treeview def create_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() # 显示数据 def show_data_frame(self): # 删除原节点 map(int,值) for i in map(self.tree_view.delete, self.tree_view.get_children("")): pass # 拿到列表里面所有值、students[] students = db.all() # 同时拿到索引跟value值 for index, stu in enumerate(students): self.tree_view.insert('', index, values=(stu["name"], stu["chinese"], stu ["math"], stu["english"]))class DeleteFrame(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() # 创建界面 def create_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) if result: self.status.set(f'{name}已经被删') self.de_name.set("") else: self.status.set(f'{name}不存在')class UpdateFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master tk.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() def create_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) if student: 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) if r: self.status.set(f"{name}同学的信息更新完毕") else: self.status.set(f"{name}同学的信息更新失败")class AboutFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master self.create_page() def create_page(self): tk.Label(self, text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)到此,关于"python如何实现完整学生成绩管理系统"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
成绩
数据
学生
变量
文本
查询
管理系统
系统
管理
姓名
信息
界面
学习
同学
数学
语文
英语
密码
对象
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发真的很难找工作吗
扬州智能化服务器服务商
事业单位有软件开发吗
网络安全等级保护的内容流程图
磊科pppoe服务器
魔兽5.0服务器第一成就
计算机软件和网络技术对英语要求
数据库的分页方式
怎么查找不到表格中的数据库
数据库如何取出字段中分隔符
苹果服务器会被墙吗
数据库在主键上建立聚集索引
高斯数据库并发量
代码数据库导出excel
连接服务器的工具
软通动力网络技术
安卓模拟器 代理服务器
服务器的数据库运行远程登录
高新区网络技术专业服务
互成网络技术有限公司
4G网络安全科技馆
小艺帮app服务器在哪
北京网络技术工程
做软件开发和数据库的公司
数据库sql安装包
学习数据库的疑惑
阿里维护网络安全的人
绝地求生有大陆服务器吗
海康高端录播服务器
哪些软件开发平台好