python超详细实现完整学生成绩管理系统

目录
  • 学生成绩管理系统简介
  • 源代码
    • students.txt
    • main.py
    • Login.py
    • db.py
    • MenuPage.py
    • view.py

学生成绩管理系统简介

一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用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 *

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 json

class 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 tk
from 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 tk
from db import db
from 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实现学生成绩管理系统,如果有改进的建议,欢迎在评论区留言奥~

这篇文章参加了csdn的活动,还请大家多多三连支持一下博主,你们的支持就是我创作的动力

到此这篇关于python超详细实现完整学生成绩管理系统的文章就介绍到这了,更多相关python 学生成绩管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现简易版学生成绩管理系统

    300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下 使用链表来实现 class Node(object): def __init__(self, data, pointer): self.data = data self.next = pointer # 创建单链表 class SingleLinkedList(object): def __init__(self): self.head = Node(None, None) self.point = self.hea

  • python创建学生成绩管理系统

    python学生成绩管理系统创建,供大家参考,具体内容如下 要求编写学生类,班级类,并在电脑运行生成表单,输入一个数字,得到对应的结果. 输出样式 代码如下 学生类 class Student: def __init__(self,sno,name,english,math): self.sno=sno self.name=name self.__english=english self.__math=math @property def english(self): return self._

  • python mysql实现学生成绩管理系统

    这学期在学python,感觉想写一个东西来巩固自己的基础,因为大二的时候我看过python,所以还是一共花了几个小时写了一个基于mysql的成绩管理系统,这个东西其实拿不出手,不过就当复习基本了. 1 .首先如果你python中没安装mysql的驱动,还是要打开cmd命令行安装一下才可以使用: pip3 install PyMySQL 2 .创建数据库studentdb,你可以在图形化界面sqlyog中创建: 3 .然后在数据库中创建表st 4 .python连接数据库的核心代码: db = p

  • Python中创建表格的方法你知道吗

    目录 1. 引言 2. 准备工作 3. 举个栗子 3.1 使用list生成表格 3.2 使用dict生成表格 3.3 增加索引列 3.4 缺失值处理 4. 总结 1. 引言 如果能够将我们的无序数据快速组织成更易读的格式,对于数据分析非常有帮助. Python 提供了将某些表格数据类型轻松转换为格式良好的纯文本表格的能力,这就是 tabulate 库. 2. 准备工作 安装tabulate库安装tabulate库非常容易,使用pip即可安装,代码如下: pip install tabulate

  • Python实现学生成绩管理系统

    本文实例为大家分享了Python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 基本功能: 输入并存储学生的信息:通过输入学生的学号.姓名.和分数,然后就可以把数据保存在建立的student文件里面. 打印学生的所有信息:通过一个打印函数就可以把所有的信息打印在屏幕上. 修改学生信息:这个功能首先通过查询功能查询出该学生是否存在,如果存在就对该学生的信息进行修改,如果不存在则返回到主界面. 删除学生信息:该功能是对相应的学生进行删除操作,如果学生存在就查找到进行删除. 按学生成绩进行排

  • python实现简单的学生成绩管理系统

    本文实例为大家分享了python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 需求: 代码: import os filename = 'student.txt' def main():     while True:         menu()         choice = int(input("请选择:"))         if choice in [0,1,2,3,4,5,6,7]:             if choice==0:            

  • Python学生成绩管理系统简洁版

    讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手. 开发环境:Ubuntu+Python2.7 代码如下: #coding=utf-8 #保存学生信息 studentList=[] def addInfo(name,addr): tempInfo={} tempInfo['name']=name tempInfo['addr']=addr student

  • python超详细实现完整学生成绩管理系统

    目录 学生成绩管理系统简介 源代码 students.txt main.py Login.py db.py MenuPage.py view.py 学生成绩管理系统简介 一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据) 源代码 仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准) students.txt 用于存储数据 main.py from tkinter import * from Login imp

  • python编写学生成绩管理系统的逻辑结构及功能实现

    目录 学生信息系统 一.功能界面 二 .主函数 三 .学生信息录入功能 四 .学生信息查找功能 五 .删除学生信息 六 .学生信息修改功能 七 .学生成绩排序 八 . 学生人数统计 九 .显示所有学生信息 程序打包 学生信息系统 提示:python编写的学生成绩管理系统,包括8个功能和打包教程 一.功能界面 def menum(): print('==================student_manger=================') print('----------------

  • 使用Python实现简单的学生成绩管理系统

    目录 基本功能: 实现效果: 制作技巧 1.定义变量 2.读取学生成绩信息 3.循环等待操作指令并执行 4.编写操作指令执行函数 (1)显示学生成绩信息函数 (2)新建学生成绩信息函数 (3)查询学生成绩信息函数 (4)删除学生成绩信息函数 (5)修改学生成绩信息函数 5.保存学生成绩信息函数 完整源代码 总结 基本功能: 能够实现学生成绩相关信息的输入.输出.查找.删除.修改等功能:(使用数据库对数据进行存取) 输入并存储学生的信息:通过输入学生的学号.姓名.和分数,然后就可以把数据保存在建立

  • 学生成绩管理系统C语言代码实现

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct person //定义结构体 { char num[10]; //学号 char name[20]; //姓名 float cyuyan; //C语言成绩 float en; //物理学成绩 float ji; //原子物理成绩

  • C++实现学生成绩管理系统

    终于结束了期末考试,有时间将这学期C++作业整理一下,都是一些基础的内容,写出来希望给一些初学者一些参考.主要使用到C++的面对对象编程思想,对学生信息类及链表类进行封装 文章可能有点长,可以只参考需要的部分 题目要求 用C++及类和对象来进行抽象.封装与实现,用作课内的第四次作业.注意学生的成绩需要用链表来实现,并且链表也需要实现封装. 成绩管理系统 信息描述: 现有学生成绩信息,内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 0

随机推荐