Skip to content

👨‍🎓 学生成绩管理系统

【青橙】学生成绩管理系统 v1.0 是一款功能全面、操作简单的成绩管理工具,旨在帮助教师或管理员高效管理学生的成绩数据。该系统提供了多种功能,主要包括:

  • 学生成绩管理:可以添加、修改、删除学生成绩,并自动计算总分。
  • 查询功能:可以查询单个学生的成绩或查看所有学生的成绩,支持查询学生的各科成绩以及总分。
  • 成绩排名:按语文、数学、英语或总分排序学生成绩,生成学生排名。
  • 成绩分析:系统支持统计各科目及格率和成绩方差,帮助教师快速了解学生的整体成绩情况。

系统提供简洁的文本界面,操作直观,适合在日常教学或管理中使用。用户可通过简洁的命令完成各项操作,并能实时查看更新结果。

主要功能包括:

  1. 添加学生:为新学生录入成绩,并自动更新总分。
  2. 修改学生成绩:可以修改学生的单科成绩或所有科目成绩,系统会自动更新总分。
  3. 删除学生:删除指定学生的记录。
  4. 查询学生成绩:查询单个或所有学生的成绩,支持查看具体学科和总分。
  5. 显示排名:根据指定科目或总分,输出学生的成绩排名。
  6. 成绩分析:包括各科及格率和成绩方差的统计,帮助评估学生的整体表现。

该系统是基于 Python 编写的,通过字典数据结构存储学生成绩,简洁高效,便于扩展与修改。

一、数据结构设计

学生数据存储在一个大字典中,字典的每个键对应一个学生的名字,值是另一个字典,存储该学生的各科成绩以及计算出来的总分。

python
students = {
    "王浩": {"语文": 78, "数学": 82, "英语": 75},
    "李静": {"语文": 88, "数学": 91, "英语": 85},
    "张伟": {"语文": 65, "数学": 70, "英语": 68},
    "刘洋": {"语文": 92, "数学": 95, "英语": 93},
    "陈晨": {"语文": 56, "数学": 60, "英语": 58},  # 不及格
    "杨帆": {"语文": 45, "数学": 52, "英语": 49},  # 不及格
    "赵亮": {"语文": 81, "数学": 78, "英语": 80},
    "周敏": {"语文": 73, "数学": 65, "英语": 70},
    "吴婷": {"语文": 90, "数学": 88, "英语": 85},
    "郑杰": {"语文": 82, "数学": 79, "英语": 77},
    "孙悦": {"语文": 59, "数学": 61, "英语": 64},  # 临界不及格
    "朱琳": {"语文": 95, "数学": 97, "英语": 96},
    "马超": {"语文": 62, "数学": 58, "英语": 65},  # 一科不及格
    "胡芳": {"语文": 86, "数学": 83, "英语": 87},
    "郭强": {"语文": 49, "数学": 55, "英语": 51}   # 不及格
}

结构说明:

  • 外层字典的键(学生名字):每个学生的姓名作为字典的键,确保每个学生都是唯一的。
  • 内层字典的值:内层字典保存该学生的成绩数据,包含了“语文”、“数学”、“英语”三科成绩。后续添加“总分”作为该学生的综合成绩。

二、API函数

python
def update_total_score(name = 'ALL'):
    """
    功能:更新学生总分
    参数:
        name:需要更新总分的学生姓名,'ALL'表示更新所有学生总分
    返回:
        1:更新成功
        0:查无此人
    """
	pass

def add_student(name,chinese,math,english):
    """
    功能:添加学生
    参数:
        name:学生名字
        chinese:语文分数
        math:数学分数
        english:英语分数
    返回:无
    """
    pass

def modify_student(name,subject,score):
    """
    功能:修改学生成绩
    参数:
        name:学生名字
        subject:学科
        score:分数
    返回:
        0:查无此人
        1:成功
    """
    pass


def delete_student(name):
    """
    功能:删除学生
    参数:
        name:需要删除的学生的名字
    返回:
        0:查无此人
        1:成功
    """
    pass

def query_student(name = 'ALL'):
    """
    功能:查看学生成绩
    参数:
        name:需要查看的学生的分数,'ALL'表示查看所有学生
    返回:
        0:查无此人
        1:查询成功
    """
    pass

1. 查看学生成绩(查)

当我们确定好核心的功能以后,就可以开始逐步实现功能了,在这个调试系统中,我们手写实现查询学生成绩的函数,因为这个功能可以验证其他函数知否正常工作。

  • update_total_score(name = 'ALL') : 计算学生总分函数(系统只需要录入学生分科成绩,总分由程序自动计算
  • query_student(name = 'ALL'):查看学生的成绩
python
def update_total_score(name):
    """
    功能:更新学生总分
    参数:
        name:需要更新总分的学生姓名,'ALL'表示更新所有学生总分
    返回:
        1:更新成功
        0:查无此人
    """
    if name == 'ALL':
        for name,score in students.items():
            total_score = score['语文']+score['数学']+score['英语']
            score['总分'] = total_score
    else:
        if(students.get(name) == None):
            return 0
        total_score = students[name]['语文']+students[name]['数学']+students[name]['英语']
        students[name]['总分'] = total_score
    
    return 1

def query_student(name = 'ALL'):
    """
    功能:查看所有学生成绩
    参数:
        name:需要查看的学生的分数,'ALL'表示查看所有学生
    返回:无
    """
    if name == 'ALL':
        print("姓名\t语文\t数学\t英语\t总分\t")
        for name,score in students.items():
            print(f"{name}\t{score['语文']:>3}\t{score['数学']:>3}\t{score['英语']:>3}\t{score['总分']:>3}\t")
    else:
        if(students.get(name) == None):
            return 0
        print(f"{name}\t{students[name]['语文']:>3}\t{students[name]['数学']:>3}\t{students[name]['英语']:>3}\t{students[name]['总分']:>3}\t")

2.增加,删除,修改学生成绩(增,删,改)

  • add_student(name,chinese,math,english):添加学生及分数
  • modify_student(name,subject,score):修改学生分数
  • delete_student(name):删除学生
python
def add_student(name,chinese,math,english):
    """
    功能:添加学生
    参数:
        name:学生名字
        chinese:语文分数
        math:数学分数
        english:英语分数
    返回:无
    """
    students[name] = {}
    students[name]["语文"] = chinese
    students[name]["数学"] = math
    students[name]["英语"] = english
    
    update_total_score(name)

def modify_student(name,subject,score):
    """
    功能:修改学生成绩
    参数:
        name:学生名字
        subject:学科
        score:分数
    返回:
        0:查无此人
        1:成功
    """
    if students.get(name) == None:
        return 0
    
    students[name][subject] = score
    update_total_score(name)
    return 1

def delete_student(name):
    """
    功能:修改学生成绩
    参数:
        name:需要删除的学生的名字
    返回:
        0:查无此人
        1:成功
    """
    if students.get(name) == None:
        return 0

    del students[name]
    return 1

3. 成绩排名

  • query_rank(subject='总分'):根据所选的科目进行排序
python
def query_rank(subject='总分'):
    """
    功能:返回按指定科目或总分排序的学生排名列表
    参数:
        subject: '语文', '数学', '英语' 或 '总分',默认为 '总分'
    返回:
        0:输入错误
        1:成功
    """
    if subject not in ('语文', '数学', '英语', '总分'):
        return 0

    # 先确保总分字段已经更新
    update_total_score()

    # 按指定科目排序,返回名字和分数元组
    rank_list = sorted(
                [(name, scores[subject]) for name, scores in students.items()],
                key=lambda x: x[1],
                reverse=True
            )
    
    # 打印出排名
    print(f"姓名\t{subject}\t名次")
    for rank,student in enumerate(rank_list,1):
        print(f"{student[0]}\t{student[1]}\t{rank}")

三、交互界面的设计

由于我们还没有学习GUI变成,所以先用 input 和 print 来做交互界面

首先是用 print 来打印出菜单:

py
print("\n=== 学生成绩管理系统 ===")
print("1. 添加学生")
print("2. 修改学生成绩")
print("3. 删除学生")
print("4. 查询学生成绩")
print("5. 显示排名")
print("0. 退出")

四、实现交互界面逻辑

python
def main_menu():
    print("\n=== 欢迎使用【青橙】学生成绩管理系统 v1.0===")
    while True:
        print("1. 添加学生")
        print("2. 修改学生成绩")
        print("3. 删除学生")
        print("4. 查询学生成绩")
        print("5. 显示排名")
        print("0. 退出")
        choice = input("请输入操作编号:")

        if choice == '1':
            name = input("请输入学生姓名:")
            chinese = int(input("语文成绩:"))
            math = int(input("数学成绩:"))
            english = int(input("英语成绩:"))
            add_student(name, chinese, math, english)
            print("学生添加成功。")

        elif choice == '2':
            name = input("请输入学生姓名:")
            subject = input("请输入学科(语文/数学/英语):")
            score = int(input("请输入新分数:"))
            result = modify_student(name, subject, score)
            if result == 1:
                print("成绩修改成功。")
            else:
                print("未找到该学生。")

        elif choice == '3':
            name = input("请输入要删除的学生姓名:")
            result = delete_student(name)
            if result == 1:
                print("删除成功")
            else:
                print("未找到该学生。")

        elif choice == '4':
            name = input("请输入要查询的学生姓名(输入 ALL 查看全部):")
            result = query_student(name)
            if result == 0:
                print("未找到该学生")

        elif choice == '5':
            subject = input("请输入排名依据(语文/数学/英语/总分):")
            query_rank(subject)
        
        elif choice == '0':
            print("退出程序。")
            break

        else:
            print("无效输入,请重新选择。")

💬 与我联系 QQ:774165314 | 微信:Yonas_Luo