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

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈: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文件存储和管理,每个功能模块都对应具体的操作,实现了一个功能完善的学生信息管理系统。

三、可视化分析

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

主界面展示

在这里插入图片描述

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

添加学生

在这里插入图片描述

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

查询学生

在这里插入图片描述

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

统计分数段

在这里插入图片描述

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

成绩排序

在这里插入图片描述

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何做到高级Kotlin强化实战?(一)

高级Kotlin强化实战&#xff08;一&#xff09; 第一章 Kotlin 入门教程1.Kotlin 入门介绍2.Kotlin 与 Java 比较 第一章 Kotlin 入门教程 1.Kotlin 入门介绍 Kotlin 概述 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言。它主要是 JetBrains 开发团队所开发出来的编程…

打靶记录——靶机medium_socnet

靶机下载地址 https://www.vulnhub.com/entry/boredhackerblog-social-network,454/ 打靶过程 由于靶机和我的Kali都处于同一个网段&#xff0c;所以使用arpscan二次发现技术来识别目标主机的IP地址 arpscan -l除了192.168.174.133&#xff0c;其他IP都是我VMware虚拟机正…

算法力扣刷题 二十六【459.重复的子字符串】

前言 字符串篇&#xff0c;继续。 记录 二十六【459.重复的子字符串】 一、题目阅读 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例…

在TkinterGUI界面显示WIFI网络(ESP32s3)摄像头画面

本实验结合了之前写过的两篇文章Python调用摄像头&#xff0c;实时显示视频在Tkinter界面以及ESP32 S3搭载OV2640摄像头释放热点&#xff08;AP&#xff09;工作模式–Arduino程序&#xff0c;当然如果手头有其他可以获得网络摄像头的URL即用于访问摄像头视频流的网络地址&…

浅谈Tomcat

文章目录 一、什么是Tomcat&#xff1f;二、Tomcat的下载安装三、使用tomcat访问资源 一、什么是Tomcat&#xff1f; Tomcat 就是一个 HTTP 服务器。 前面我们聊了HTTP服务器&#xff0c;像我们在网页输入URL&#xff0c;其实就是在给人家的HTTP服务器发送请求&#xff0c;既…

计算机网络之数据通信原理(中)

上节内容传送口&#xff1a;数据通信原理基础 1.数据传输方式 1.1并行传输 并行传输: 字符编码的各个比特同时传输 特点&#xff1a; 一个比特时间内可传输一个字符&#xff0c;传输速度快&#xff0c;每个比特传输要求一个单独的信道支持&#xff0c;通信成本高&#xf…

红黑树插入删除流程(流程图)

红黑树插入删除流程&#xff08;流程图&#xff09; 红黑树性质 左根右(二叉树&#xff09;根叶黑&#xff08;根节点是黑色的&#xff09;不红红&#xff08;不存在相邻两个红色节点&#xff09;黑路同&#xff08;对于每个节点&#xff0c;从该节点出发到任一空叶节点所经过…

收银系统源码-千呼新零售【全场景收银】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

intellij idea中使用R语言plot画图无图像问题

1、在intellij idea中使用R语言plot函数时&#xff0c;会遇到各种各样的问题&#xff0c;会出现图片不显示问题&#xff0c; 可以看到&#xff0c;目前我电脑r语言版本为4.2.1&#xff0c;输入下面代码&#xff1a; # # 安装包 # install.packages(ggplot2) # library(ggplot2…

理解MySQL核心技术:外键的概念作用和应用实例

引言 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;外键&#xff08;Foreign Key&#xff09;是维持数据一致性和实现数据完整性的重要工具。本文将详细介绍MySQL外键的基本概念、作用&#xff0c;以及相关的操作指南和应用实例&#xff0c;帮助读者掌握并灵活…

实现了Map接口的HashMap

HashMap 底层主要由以下几个部分组成&#xff1a; 数组 (Node<K,V>[] table): 这是一个数组&#xff0c;存储的是链表的头节点。默认大小为 16。链表 (Linked List): 当发生哈希冲突时&#xff0c;即不同的键具有相同的哈希值&#xff0c;HashMap 使用链表来解决冲突。链…

2024年06月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 3 分,共 30 分) 第1题 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1级,那他可以选择的认证语言有几种?( ) A、…

C++ | Leetcode C++题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countPrimes(int n) {vector<int> primes;vector<int> isPrime(n, 1);for (int i 2; i < n; i) {if (isPrime[i]) {primes.push_back(i);}for (int j 0; j < primes.size() && i …

百度网盘下载速度慢的解决办法

目录 一、背景 二、解决办法 1、点击三个竖点&#xff0c;再点设置 2、点击传输&#xff0c;再点击去开启该功能 3、点击同意&#xff0c;开启优化速率 三、结果 四、备注 一、背景 当你不是百度网盘会员时&#xff0c;你在使用百度网盘下载时&#xff0c;是否下载速度太…

isalnum()方法——判断字符串是否由字母和数字组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isalnum()方法用于判断字符串是否由字母和数字组成。isalnum()方法的语法格式如下&#xff1a; str.isalnum() 如果字符串中至少有一个字…

缺少msvcp140一键修复方法,快速解决msvcp140.dll丢失问题

日常中电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是电脑运行软件时提示找不到msvcp140.dll。这个问题会导致软件无法启动运行&#xff0c;但只要我们了解其原因并采取相应的解…

六月,允许自己做自己,别人做别人

今天结束后&#xff0c;2024 就过去一半了。 年初的规划完成一半了吗&#xff1f;如果没有也没关系&#xff0c;做你自己继续前进。 家人来北京旅游&#xff0c;我累趴了 六月初&#xff0c;我搬家了&#xff0c;这次租了一整套房&#xff0c;是一个小俩居、还带一个小阁楼。…

鸿蒙如何打包应用程序

总结鸿蒙应用程序包 之前文章详细讲解了关于三种程序包的内容&#xff0c;现在简单总结一下&#xff1a; 1. 总结 首先需要搞清楚鸿蒙项目的模块Module的分类: Module分为“Ability”和“Library”两种类型 HAP HAP: Harmony Ability Package , 叫做鸿蒙Ability包。 “Abil…

静态时序分析:ideal_clock、propagated_clock以及generated_clock的关系及其延迟计算规则(二)

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 生成时钟 上一节中&#xff0c;我们讨论了理想时钟和传播时钟的创建和使用&#xff0c;本节将讨论生成时钟及其与理想时钟和传播时钟的关系。 图1所示的是一个简…

权限维持-域环境单机版---映像劫持(多)

目录 映像位置: 测试&#xff1a;执行 notepad 成 cmd 配合GlobalFlag隐藏-->执行正常关闭后触发 映像位置: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe 测试&#xff1a;执行 notepad 成 cmd…