【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】

news2025/1/18 20:17:07

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】


目录

  • 【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】
  • 一、设计要求
        • 1. 数据文件初始化模块
        • 2. 界面创建模块
        • 3. 数据加载模块
        • 4. 添加学生信息模块
        • 5. 删除学生信息模块
        • 6. 修改学生信息模块
        • 7. 按姓名查询学生信息模块
        • 8. 按学号查询学生信息模块
        • 9. 统计分数段模块
        • 10. 按成绩排序模块
  • 二、设计思路
        • 1. 总体设计
        • 2. 类的定义与初始化
        • 3. 数据文件初始化
        • 4. 界面控件创建
        • 5. 数据加载
        • 6. 添加学生信息
        • 7. 删除学生信息
        • 8. 修改学生信息
        • 9. 查询学生信息
        • 10. 统计分数段
        • 11. 按成绩排序
  • 三、可视化分析
    • 主界面展示
    • 添加学生
    • 查询学生
    • 统计分数段
    • 成绩排序


一、设计要求

1. 数据文件初始化模块

负责检查是否存在用于存储学生信息的文件。如果文件不存在,则创建一个新的CSV文件并写入标题行,确保数据文件的初始状态正确。

2. 界面创建模块

负责创建图形用户界面,包括输入框、按钮和表格控件等。为用户提供输入和操作学生信息的界面布局,并定义控件的摆放位置和交互行为。

3. 数据加载模块

负责从CSV文件中读取学生数据,并将数据加载到表格控件中显示。确保每次操作后,表格显示的内容与CSV文件中的数据保持一致。

4. 添加学生信息模块

负责从用户输入框获取学生信息,验证所有字段是否填写完整。如果填写完整,将学生信息追加写入CSV文件,并更新表格显示。

5. 删除学生信息模块

负责从表格中获取用户选择的学生记录,通过学号识别要删除的学生,并从CSV文件中删除相应记录,然后更新表格显示。

6. 修改学生信息模块

负责从表格中获取用户选择的学生记录,通过学号识别要修改的学生。根据用户输入的新信息更新文件中的相应记录,并刷新表格显示。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

7. 按姓名查询学生信息模块

负责根据用户输入的姓名,在文件中查找匹配的学生记录。如果找到匹配记录,将结果显示在表格中;否则,提示用户未找到学生。

8. 按学号查询学生信息模块

负责根据用户输入的学号,在CSV文件中查找匹配的学生记录。如果找到匹配记录,将结果显示在表格中;否则,提示用户未找到学生。

9. 统计分数段模块

负责根据用户输入的课程名和分数段,在文件中查找符合条件的学生记录,并将这些记录显示在表格中。帮助用户统计某课程在指定分数段内的学生情况。

10. 按成绩排序模块

负责根据用户输入的课程名,对学生的该课程成绩进行排序。可以选择升序或降序排序,并将排序结果显示在表格中,帮助用户了解学生成绩的分布情况。


二、设计思路

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

1. 总体设计

该代码设计了一个学生信息管理系统,基于Tkinter实现图形用户界面(GUI),通过CSV文件来存储和管理学生信息。系统支持添加、删除、修改、查询学生信息,以及对学生成绩进行统计和排序。

2. 类的定义与初始化
class StudentInfoSystem:
    def __init__(self, root):
        self.root = root
        # 略

定义了StudentInfoSystem类,其中包含初始化方法__init__,初始化根窗口、数据文件和界面控件。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

3. 数据文件初始化
def init_data_file(self):
    if not os.path.exists(self.filename):
        with open(self.filename, "w", newline="") as file:
            writer = csv.writer(file)
            writer.writerow(["姓名", "学号", "语文", "数学", "英语"])

检查数据文件是否存在,如果不存在则创建一个包含标题行的CSV文件。

4. 界面控件创建
def create_widgets(self):
    frame = tk.Frame(self.root)
    frame.pack(padx=10, pady=10)

    # 添加学生信息的控件
    tk.Label(frame, text="姓名:").grid(row=0, column=0, padx=5, pady=5)
    # 略。。。。
    # 略。。。。
    # 略。。。。
    # 略。。。。
    # 略。。。。
    self.name_entry.grid(row=0, column=1, padx=5, pady=5)

    # 其他控件略

    # 显示表格
    # 略。。。。
    # > 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

    self.tree.heading("英语", text="英语")
    self.tree.pack(fill=tk.BOTH, expand=True)

    self.load_data()

创建用于输入学生信息、查询、统计和排序的各种控件,并将控件排列在窗口中。创建一个表格控件用于显示学生信息,并加载现有数据。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

5. 数据加载
def load_data(self):
    for row in self.tree.get_children():
        self.tree.delete(row)
    with open(self.filename, "r") as file:
	# 略。。。。
	# 略。。。。
	# 略。。。。
	# 略。。。。
	# 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

	# 略。。。。
	# 略。。。。
    self.tree.insert("", tk.END, values=row)

读取CSV文件中的数据并显示在表格中,先清空表格中的旧数据,然后插入新数据。

6. 添加学生信息
def add_student(self):
    name = self.name_entry.get()
    student_id = self.id_entry.get()
	# 略。。。。
	# 略。。。。
	# 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

	# 略。。。。
	# 略。。。。
	# 略。。。。
	# 略。。。。
            writer.writerow([name, student_id, chinese, math, english])
        self.load_data()
    else:
        messagebox.showwarning("警告", "请填写所有字段")

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

获取输入框中的信息,检查所有字段是否已填写,若已填写则将新学生信息写入CSV文件,并重新加载数据以更新表格。

7. 删除学生信息
def delete_student(self):
    selected_item = self.tree.selection()
    if selected_item:
        # 略。。。。
        # 略。。。。
        # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

        # 略。。。。
        # 略。。。。
        # 略。。。。
                if row[1] != student[1]:  # Identify student by student ID
                    writer.writerow(row)
        self.load_data()
    else:
        messagebox.showwarning("警告", "请选择要删除的学生")

通过学号识别并删除选中的学生信息,然后更新CSV文件并重新加载数据。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

8. 修改学生信息
def modify_student(self):
    selected_item = self.tree.selection()
    if selected_item:
        student = self.tree.item(selected_item)["values"]
        name = self.name_entry.get()
        student_id = self.id_entry.get()
        chinese = self.chinese_entry.get()
        # 略。。。。
        # 略。。。。
        # 略。。。。
        # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

        # 略。。。。
        
                    else:
                        students.append(row)
            with open(self.filename, "w", newline="") as file:
                writer = csv.writer(file)
                writer.writerows(students)
            self.load_data()
        else:
            messagebox.showwarning("警告", "请填写所有字段")
    else:
        messagebox.showwarning("警告", "请选择要修改的学生")

通过学号识别并修改选中的学生信息,然后更新CSV文件并重新加载数据。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

9. 查询学生信息
def query_by_name(self):
    query_name = self.query_name_entry.get()
    if query_name:
        with open(self.filename, "r") as file:
            reader = csv.reader(file)
            next(reader)
            for row in reader:
                if row[0] == query_name:
                    self.tree.delete(*self.tree.get_children())
                    self.tree.insert("", tk.END, values=row)
                    return
        messagebox.showinfo("信息", "未找到学生")
    else:
        messagebox.showwarning("警告", "请输入姓名")

按姓名或学号查询学生信息,若找到匹配的记录,则在表格中显示该记录。

10. 统计分数段
def stats_score_range(self):
    course = self.course_entry.get()
    score_range = self.score_range_entry.get()
    if course and score_range:
        try:
            min_score, max_score = map(int, score_range.split('-'))
        except ValueError:
            messagebox.showwarning("警告", "请输入正确的分数段格式 (例如 60-70)")
            return
        course_index = {"语文": 2, "数学": 3, "英语": 4}.get(course)
        if course_index is None:
            messagebox.showwarning("警告", "请输入正确的课程名 (语文, 数学, 英语)")
            return
        with open(self.filename, "r") as file: # > 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

            reader = csv.reader(file)
            next(reader)
            filtered_students = [row for row in reader if min_score <= int(row[course_index]) <= max_score]
        self.tree.delete(*self.tree.get_children())
        for row in filtered_students:
            self.tree.insert("", tk.END, values=row)
    else:
        messagebox.showwarning("警告", "请输入课程名和分数段")

按指定课程和分数段统计学生信息,并在表格中显示符合条件的学生记录。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

11. 按成绩排序
def sort_by_score(self, order="asc"):
    course = self.sort_course_entry.get()
    if course:
        course_index = {"语文": 2, "数学": 3, "英语": 4}.get(course)
        if course_index is None:
            messagebox.showwarning("警告", "请输入正确的课程名 (语文, 数学, 英语)")
            return
        with open(self.filename, "r") as file:
            
            # 略。。。。
            # 略。。。。
            # 略。。。。> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

            # 略。。。。
            # 略。。。。
            
    else:
        messagebox.showwarning("警告", "请输入课程名")

按指定课程的成绩对学生信息进行排序,并在表格中显示排序后的结果。

该代码通过定义一个StudentInfoSystem类,使用Tkinter创建图形用户界面,提供了学生信息的添加、删除、修改、查询、统计和排序功能。数据通过CSV文件存储和管理,每个功能模块都对应具体的操作,实现了一个功能完善的学生信息管理系统。

三、可视化分析

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

主界面展示

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

添加学生

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

查询学生

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

统计分数段

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈

成绩排序

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生界面 ” 获取。👈👈👈


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1881153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画-Stable Diffusion 原理介绍及使用

引言 好像很多朋友对AI绘图有兴趣&#xff0c;AI绘画背后&#xff0c;依旧是大模型的训练。但绘图类AI对计算机显卡有较高要求。建议先了解基本原理及如何使用&#xff0c;在看看如何实现自己垂直行业的绘图AI逻辑。或者作为使用者&#xff0c;调用已有的server接口。 首先需…

20240701 每日AI必读资讯

&#x1f3eb;AI真炼丹&#xff1a;整整14天&#xff0c;无需人类参与 - 英矽智能推出全球首个AI参与决策的生物学实验室&#xff0c;实现了14天内完成靶点发现和验证的全自动化闭环实验。 - 该实验室由PandaOmics平台驱动&#xff0c;集成多种预测模型和海量数据&#xff0…

springboot基础入门2(profile应用)

Profile应用 一、何为Profile二、profile配置方式1.多profile文件方式2.yml多文档方式 三、加载顺序1. file:./config/: 当前项目下的/config目录下2. file:./ &#xff1a;当前项目的根目录3. classpath:/config/:classpath的/config目录4. classpath:/ : classpath的根目录 四…

ffmpeg使用bmp编码器把bgr24编码为bmp图像

version #define LIBAVCODEC_VERSION_MAJOR 60 #define LIBAVCODEC_VERSION_MINOR 15 #define LIBAVCODEC_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str…

Python数据分析-风湿关节炎生存分析

一、研究背景和意义 类风湿关节炎&#xff08;RA&#xff09;是一种慢性炎症性疾病&#xff0c;主要影响关节&#xff0c;但也可能影响身体的其他部分。RA的病因尚不完全清楚&#xff0c;但已知其涉及免疫系统的异常反应。患者的免疫系统错误地攻击自身的关节组织&#xff0c;…

机器学习中的数学底蕴与设计模式

在说机器学习设计模式之前&#xff0c;想多说几句&#xff0c;在进入软件行业最初的10年&#xff0c;那时候耳熟能详的基本就是多线程编程&#xff0c;互斥同步锁&#xff0c;设计模式&#xff0c;OOA&#xff0c;OOP&#xff0c;常规数组&#xff0c;tree&#xff0c;图的数据…

【图论】200. 岛屿问题

200. 岛屿问题 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 问题描述 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后&#xff0c;我们要进一步进行提取的操作&#xff0c;我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作&#xff1a; 怎么获取密码&#xff0c;通过sql注入获取这个大家都应该知道了&a…

专题四:Spring源码初始化环境与BeanFactory

上文我们通过new ClassPathXmlApplicationContext("applicationContext.xml");这段代码看了下Spring是如何将Xml里面内容注入到Java对象中&#xff0c;并通过context.getBean("jmUser");方式获得了一个对象实例&#xff0c;而避开使用new 来耦合。今天我们…

Houdini速通VOP强化训练上部

Houdini 速通 VOP 强化训练上部是一门针对 Houdini 中 VOP&#xff08;Vector Operation Language&#xff09;的强化训练课程。本课程深入探讨了 Houdini 中 VOP 的核心概念和高级技术&#xff0c;通过实际案例和项目实战&#xff0c;帮助学员快速掌握 VOP 的使用技巧和编程方…

SpringBoot Task 定时任务

springboot中使用Task定时任务非常简单 springboot 中自带的都有注解不需要引入依赖 第一步&#xff1a;在启动类上添加启用定时任务注解 EnableScheduling //开启任务调度 第二步&#xff1a;创建一个springboot组件用于定时任务管理 package cn.lsy.api.Task;import cn.ls…

【Unity实战】在RHEL 9上安装UnityHub

一般来说&#xff0c;Unity编辑器的安装&#xff0c;官方已经给出了安装教程。 但是这个忽略了RHEL 9的一个特性&#xff1a;默认的加解密策略已经不支持SHA1了&#xff0c;你会在执行yum install unityhub那里出现如下报错&#xff1a; [shepherdlocalhost ~]$ sudo yum inst…

[C++][设计模式][备忘录模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受 1.动机 在软件构建过程中&#xff0c;某些对象的状态转换过程中&#xff0c;可能由于某中需要&#xff0c;要求程序能够回溯到对象之前处于某个点的状态。 如果使用一些公开接口来让其他对象得到对象的状态&#xff0c;便会暴露对象…

66、基于长短期记忆 (LSTM) 网络对序列数据进行分类

1、基于长短期记忆 (LSTM) 网络对序列数据进行分类的原理及流程 基于长短期记忆&#xff08;LSTM&#xff09;网络对序列数据进行分类是一种常见的深度学习任务&#xff0c;适用于处理具有时间或序列关系的数据。下面是在Matlab中使用LSTM网络对序列数据进行分类的基本原理和流…

TomCat小型服务器安装

一、安装步骤 Tomcat官方站点&#xff1a; http://tomcat.apache.org 1、进入官方网站后获取安装包&#xff1a; &#x1f920;tar.gz文件是Linux操作系统下的安装版本 &#x1f920;zip文件是Windows系统下的压缩版本 2、解压安装 解压到自己的文件夹中 3、安装JDK 设置环…

Go源码--context包

简介 Context 是go语言比较重要的且也是比较复杂的一个结构体&#xff0c;Context主要有两种功能: 取消信号&#xff1a;包括直接取消&#xff08;涉及的结构体&#xff1a;cancelCtx ; 涉及函数&#xff1a;WithCancel&#xff09;和携带截止日期的取消&#xff08;涉及结构…

功能强大的声音模拟合成软件Togu Audio Line TAL-Mod 1.9.7

Togu Audio Line TAL一个虚拟模拟合成器,具有卓越的声音和几乎无限的调制能力。其特殊的振荡器模型能够创建广泛的声音,从经典的单声道到丰富的立体声引线、效果器和焊盘。路由可以使用虚拟跳线电缆来完成。只需连接调制输出以达到调制的目的。之后,您可以调整调制强度。您不…

dB分贝入门

主要参考资料&#xff1a; dB&#xff08;分贝&#xff09;定义及其应用: https://blog.csdn.net/u014162133/article/details/110388145 目录 dB的应用一、声音的大小二、信号强度三、增益 dB的应用 一、声音的大小 在日常生活中&#xff0c;住宅小区告知牌上面标示噪音要低…

Excel表格转Tex工具推荐

为了制作符合 SCI 论文要求的表格&#xff0c;直接用 LaTeX 编写通常比较复杂。我们可以先在 Excel 中绘制好所需的表格&#xff08;最好加上边框&#xff09;。最近我发现了一个非常好用的 Excel 转 LaTeX 工具&#xff0c;能够让 LaTeX 表格的编写变得非常方便。 工具&#…

数据资产治理的智能化探索:结合云计算、大数据、人工智能等先进技术,探讨数据资产治理的智能化方法,为企业提供可靠、高效的数据资产解决方案,助力企业提升竞争力

一、引言 在信息化时代&#xff0c;数据已成为企业最重要的资产之一。随着云计算、大数据、人工智能等先进技术的飞速发展&#xff0c;数据资产治理面临着前所未有的机遇与挑战。本文旨在探讨如何结合这些先进技术&#xff0c;实现数据资产治理的智能化&#xff0c;为企业提供…