python如何实现完整学生成绩管理系统
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
互联网络科技
云之行互联网科技
科技金融是不是互联网金融
科技和互联网公司
互联网扶贫科技
腾讯阿里互联网科技
易互联网科技有限公司
平安科技 互联网
互联网科技排名
极限挑战互联网科技
互联网科技logo
互联网金融 科技创新
互联网巨头投资的硬核科技
辽宁互联网新科技
亳州好赞互联网科技有限公司
浙南科技城互联网大厦建设工程
每天都有哪些好的互联网科技
从那以后互联网科技有限公司
现代互联网科技公司
互联网高科技绘画
中关村互联网科技集团
互联网科技行业发展
远拓互联网科技
善班互联网科技有限公司
互联网科技股有哪些
科技伦理 互联网公司
中国航天科技大学国际工业互联网
辽宁互联网新科技
美国互联网科技公司
承德科技产业互联网平台