千家信息网

python如何实现完整学生成绩管理系统

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年02月19日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安全错误 数据库的锁怎样保障安全 软件开发 系统集成资质 汽车购票系统数据库 淘宝买的服务器系统激活码 中国社会科学引文数据库检索 计算机网络技术算it吗 仙女座怎么连接服务器 如何查询数据库中数据是谁修改的 普陀区数据网络技术咨询报价 启明星辰网络安全服务之星 服务器还有什么好玩的游戏 网络安全股票最新视频解析 计算机网络技术书籍 英文版 上海华通电脑网络技术有限公司 金山区网络技术开发要求 2018网络安全事件勒索 关于网络安全的新闻今年 为什么软件开发成本这么高 泰兴自动化网络技术哪家好 浪潮软件开发吧 类似货拉拉软件开发 青浦区互联网软件开发怎么样 陇南app软件开发制作 学校网络安全等级划分 文件档案管理服务器 客服的网络安全 计算机网络技术专业教程 爱快可以连接腾讯云服务器吗 阿克蒙德服务器 社会科技和互联网 凤阳租房软件开发
0