0


python学生成绩管理系统【完整版】

✅作者简介:大家好我是hacker707,大家可以叫我hacker,新星计划第三季python赛道Top1🏆
📃个人主页:hacker707的csdn博客
🔥系列专栏:python
💬推荐一款模拟面试、刷题神器👉点击跳转进入网站

在这里插入图片描述

学生成绩管理系统

学生成绩管理系统简介

一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

源代码🏆

✅仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)

students.txt

用于存储数据

main.py

from tkinter import*from Login import*import tkinter as tk

root = tk.Tk()
root.title('欢迎进入学生成绩管理系统')
LoginPage(root)
root.mainloop()

Login.py

from tkinter import*from tkinter.messagebox import*from MenuPage import*classLoginPage(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()defcreatePage(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)defloginCheck(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 json

classStudentDB(object):def__init__(self):
        self.students =[]
        self._load_students_data()definsert(self, student):
        self.students.append(student)print(self.students)defall(self):return self.students

    defdelete_by_name(self, name):# 删除数据for student in self.students:if name == student["name"]:
                self.students.remove(student)breakelse:returnFalsereturnTrue# 查询defsearch_by_name(self, name):for student in self.students:if name == student["name"]:return student  # 姓名+成绩else:returnFalse# 修改defupdate(self, stu):# 修改数据
        name = stu["name"]for student in self.students:if name == student["name"]:
                student.update(stu)returnTrueelse:returnFalse# 加载文件def_load_students_data(self):withopen("students.txt","r", encoding="utf-8")as f:
            text = f.read()if text:
            self.students = json.loads(text)# 保存数据defsave_data(self):withopen("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 tk
from view import*classMenuPage(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()defcreate_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)# 切换界面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

import tkinter as tk
from db import db
from tkinter import ttk

# 录入类classInputFrame(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()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 = master
        self.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,值)for i inmap(self.tree_view.delete, self.tree_view.get_children("")):pass# 拿到列表里面所有值、students[]
        students = db.all()# 同时拿到索引跟value值for index, stu inenumerate(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)if result:
            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 = 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()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)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}同学的信息更新失败")classAboutFrame(tk.Frame):def__init__(self, master=None):super().__init__(master)
        self.root = master
        self.create_page()defcreate_page(self):
        tk.Label(self, text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)

结束语🏆

🔥推荐一款模拟面试、刷题神器网站
点击链接注册即可
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…

在这里插入图片描述

标签: python pycharm

本文转载自: https://blog.csdn.net/xqe777/article/details/123532947
版权归原作者 honker707 所有, 如有侵权,请联系我们删除。

“python学生成绩管理系统【完整版】”的评论:

还没有评论