首页 > Python资料 博客日记

基于Python的学生成绩管理系统(附源码及解析)

2025-01-06 01:00:05Python资料围观9

本篇文章分享基于Python的学生成绩管理系统(附源码及解析),对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识

前言

上一篇文章我们分享了一个基于Python的文件处理的程序代码,这篇文章我们来分享一个基于Python的学生成绩管理系统,这个系统的难度不大,也没有用到别的第三方库,非常适合小白学习完Python基础后作为练手题目去巩固一下,毕竟只有会用了,会码了才是真的学会了。


 

正文

1、系统功能

 先来看一下这个系统可以执行的功能

 


 

2、整体代码 

话不多说,先附上整体的源码

students = []
print("欢迎来到由本人来自霍格沃茨设计的学生成绩管理系统")

def create_username():
    username = input("请输入用户名:")
    print(f"用户名 {username} 创建成功。")

def student_information():
    name = input("请输入学生姓名:")
    scores = {}
    subjects = ['语文', '英语', '数学', '理综']
    for subject in subjects:
        while True:
            try:
                if subject in ['语文', '英语', '数学']:
                    max_score = 150
                elif subject == '理综':
                    max_score = 300
                score = int(input(f"请输入{subject}成绩:"))
                if 0 <= score <= max_score:
                    scores[subject] = score
                    break
                else:
                    print(f"请输入一个介于0到{max_score}之间的有效成绩。")
            except ValueError:
                print("成绩输入无效,请输入整数。")
    student = {'name': name, 'scores': scores}
    students.append(student)

def make_list():
    if not students:
        print("没有学生信息可显示。")
        return
    total()
    sorted_students = sorted(students, key=lambda x: x['total_score'], reverse=True)
    print("姓名\t语文\t英语\t数学\t理综\t总分\t排名")
    for rank, student in enumerate(sorted_students, start=1):
        total_score = student['total_score']
        print(f"{student['name']}\t{student['scores']['语文']}\t{student['scores']['英语']}\t{student['scores']['数学']}\t{student['scores']['理综']}\t{total_score}\t{rank}")

def total():
    if not students:
        print("没有学生信息可计算。")
        return
    for student in students:
        total_score = sum(student['scores'].values())
        student['total_score'] = total_score
        print(f"{student['name']} 总分: {student['total_score']}")

def average():
    if not students:
        print("没有学生信息可计算。")
        return
    subject_totals = {
        '语文': 0,
        '英语': 0,
        '数学': 0,
        '理综': 0
    }
    total_score_sum = 0
    for student in students:
        total_score = sum(student['scores'].values())
        total_score_sum += total_score
        for subject in subject_totals:
            subject_totals[subject] += student['scores'][subject]
    num_students = len(students)
    print("各科平均分:")
    for subject, total in subject_totals.items():
        average = total / num_students
        print(f"{subject} 平均分: {average:.2f}")
    overall_average = total_score_sum / num_students
    print(f"总分平均分: {overall_average:.2f}")

def ranking():
    total()
    sorted_student = sorted(students, key=lambda x: x['total_score'], reverse=True)
    rank = 1
    for student in sorted_student:
        student['rank'] = rank
        rank += 1
        print(f"{student['name']}\t排名: {student['rank']}")

def get_highest_scores():
    if not students:
        print("没有学生信息可查询。")
        return
    highest_scores = {}
    subjects = ['语文', '英语', '数学', '理综']
    for subject in subjects:
        highest_scores[subject] = students[0]['scores'][subject]
    for student in students:
        for subject in subjects:
            if student['scores'][subject] > highest_scores[subject]:
                highest_scores[subject] = student['scores'][subject]
    print("各科的最高分分别为:")
    for subject in subjects:
        student_with_highest = max(students, key=lambda x: x['scores'][subject])
        print(f"{subject}: {student_with_highest['name']} {highest_scores[subject]}")

def close():
    print("系统要关闭咯,期待我们下次相遇")
    exit()

while True:
    print("1. 创建用户名")
    print("2. 录入学生信息")
    print("3. 显示成绩表")
    print("4. 计算总分")
    print("5. 给出排名")
    print("6. 输出各科最高分")
    print("7. 输出各科平均分")
    print("8. 退出系统")
    choice = input("请选择你想执行的操作序号:")

    if choice == "1":
        create_username()
    elif choice == "2":
        student_information()
    elif choice == "3":
        make_list()
    elif choice == "4":
        total()
    elif choice == "5":
        ranking()
    elif choice == "6":
        get_highest_scores()
    elif choice == "7":
        average()
    elif choice == "8":
        close()
    else:
        print("你输入的是什么玩意,本系统听不明白,重新输入")

可以看到,这个系统中主要是定义了这些个函数,通过判断输入的数字来调用不同的函数来实现相应的功能


 3、主要函数功能介绍

3.1 create_username函数

通过input函数获取用户输入的用户名,并告知用户用户名创建成功,主要用于系统个性化用户名的设定,但目前此用户名未在后续功能中有实质关联使用,更多是起到提示作用。

def create_username():
    username = input("请输入用户名:")
    print(f"用户名 {username} 创建成功。")

3.2 student_information函数

先获取学生的姓名,然后针对语文、英语、数学、理综这几门学科,循环让用户输入成绩。在输入成绩时,会根据学科不同设定不同的成绩范围限制(语文、英语、数学满分150,理综满分300),并对输入值进行有效性验证(要求输入整数且在对应学科的合理分数区间内),最后将学生姓名和各科成绩以字典形式组合成一个学生信息字典,添加到students列表中,用于后续的各种成绩相关统计和展示。

def student_information():
    name = input("请输入学生姓名:")
    scores = {}
    subjects = ['语文', '英语', '数学', '理综']
    for subject in subjects:
        while True:
            try:
                if subject in ['语文', '英语', '数学']:
                    max_score = 150
                elif subject == '理综':
                    max_score = 300
                score = int(input(f"请输入{subject}成绩:"))
                if 0 <= score <= max_score:
                    scores[subject] = score
                    break
                else:
                    print(f"请输入一个介于0到{max_score}之间的有效成绩。")
            except ValueError:
                print("成绩输入无效,请输入整数。")
    student = {'name': name, 'scores': scores}
    students.append(student)

3.3 make_list函数 

首先判断students列表是否为空,如果为空则提示没有学生信息可显示并返回。若不为空,先调用total函数计算每个学生的总分,然后根据学生的总分对students列表中的学生信息字典进行降序排序,接着按照固定格式(姓名、各科成绩、总分、排名)打印出成绩表信息,方便直观查看学生成绩情况及排名情况。

def make_list():
    if not students:
        print("没有学生信息可显示。")
        return
    total()
    sorted_students = sorted(students, key=lambda x: x['total_score'], reverse=True)
    print("姓名\t语文\t英语\t数学\t理综\t总分\t排名")
    for rank, student in enumerate(sorted_students, start=1):
        total_score = student['total_score']
        print(f"{student['name']}\t{student['scores']['语文']}\t{student['scores']['英语']}\t{student['scores']['数学']}\t{student['scores']['理综']}\t{total_score}\t{rank}")

3.4 total函数 

同样先判断students列表是否为空,为空则返回。不为空时,初始化一个用于记录各科成绩总和的字典,以及用于统计所有学生总分总和的变量。接着遍历学生信息列表,累加每个学生的总分到总和变量,同时针对每个学科累加对应成绩到学科总和字典中。最后根据学生数量计算各科平均分以及总分平均分,并按照格式打印输出,能直观呈现各科以及整体的平均成绩水平。

 

def total():
    if not students:
        print("没有学生信息可计算。")
        return
    for student in students:
        total_score = sum(student['scores'].values())
        student['total_score'] = total_score
        print(f"{student['name']} 总分: {student['total_score']}")

3.5 average函数 

同样先判断students列表是否为空,为空则返回。不为空时,初始化一个用于记录各科成绩总和的字典,以及用于统计所有学生总分总和的变量。接着遍历学生信息列表,累加每个学生的总分到总和变量,同时针对每个学科累加对应成绩到学科总和字典中。最后根据学生数量计算各科平均分以及总分平均分,并按照格式打印输出,能直观呈现各科以及整体的平均成绩水平。

def average():
    if not students:
        print("没有学生信息可计算。")
        return
    subject_totals = {
        '语文': 0,
        '英语': 0,
        '数学': 0,
        '理综': 0
    }
    total_score_sum = 0
    for student in students:
        total_score = sum(student['scores'].values())
        total_score_sum += total_score
        for subject in subject_totals:
            subject_totals[subject] += student['scores'][subject]
    num_students = len(students)
    print("各科平均分:")
    for subject, total in subject_totals.items():
        average = total / num_students
        print(f"{subject} 平均分: {average:.2f}")
    overall_average = total_score_sum / num_students
    print(f"总分平均分: {overall_average:.2f}")

3.6 ranking函数 

先调用total函数计算总分,再根据学生的总分对学生信息列表进行降序排序,然后依次给每个学生添加排名信息,并打印出学生姓名和对应的排名,清晰展示学生成绩排名情况。

def ranking():
    total()
    sorted_student = sorted(students, key=lambda x: x['total_score'], reverse=True)
    rank = 1
    for student in sorted_student:
        student['rank'] = rank
        rank += 1
        print(f"{student['name']}\t排名: {student['rank']}")

 3.7 get_highest_scores函数

首先判断students列表是否为空,为空则返回。不为空时,初始化一个记录各科最高分的字典,先默认将第一个学生的各科成绩作为初始最高分。接着遍历所有学生信息,比较各科成绩,如果发现有更高的成绩则更新最高分字典中的对应学科成绩。最后打印出各科的最高分以及取得该最高分的学生姓名,方便查看各学科的最优成绩情况。 

def get_highest_scores():
    if not students:
        print("没有学生信息可查询。")
        return
    highest_scores = {}
    subjects = ['语文', '英语', '数学', '理综']
    for subject in subjects:
        highest_scores[subject] = students[0]['scores'][subject]
    for student in students:
        for subject in subjects:
            if student['scores'][subject] > highest_scores[subject]:
                highest_scores[subject] = student['scores'][subject]
    print("各科的最高分分别为:")
    for subject in subjects:
        student_with_highest = max(students, key=lambda x: x['scores'][subject])
        print(f"{subject}: {student_with_highest['name']} {highest_scores[subject]}")

 3.8 close函数

 简单打印系统关闭提示信息,并通过exit函数退出整个程序,实现正常关闭系统的功能。

 

def close():
    print("系统要关闭咯,期待我们下次相遇")
    exit()

4、程序主循环逻辑

通过一个无限循环while True来持续展示操作菜单,让用户选择想要执行的操作序号,根据不同的输入序号调用对应的函数来完成相应功能。如果用户输入的序号不在规定的 1 - 8 范围内,则提示输入无效让用户重新输入,以此保证系统能按照用户期望的功能进行交互操作。 


结语

        这篇基于Python的学生成绩管理系统就分享到这里了,如果有需要的可以借鉴,希望我的分享可以对你起到帮助。还是前言那里说的,这个系统真的很适合新手学完基础之后练手使用,相信经过实战之后,你会对Python的理解更上一层楼。

        阅读过程中,如果有发现文章哪里写的有问题,或者代码运行报错,可以发在评论区,我们一起讨论,我看到之后一定会尽快回复。

        创作不易,能否给个三连支持一下~


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐