You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python学生成绩管理系统补全总分/科目状元及成绩降序导出功能

补全功能后的Python学生成绩管理系统

以下代码在原有功能(二进制成绩文件创建、成绩文件展示、指定学生信息查询)基础上,补充了要求的两个功能,所有交互提示已翻译为中文:

import pickle
while True:
    print('''    1. 创建二进制成绩文件
    2. 展示所有成绩记录
    3. 查询指定学生信息
    4. 导出总分状元及各科目状元信息
    5. 导出按成绩百分比降序排序的学生列表''')
    a = int(input('请选择操作编号(1-5): '))
    if a == 1:
        f = open('student.dat','wb')
        o = open('suiuii.dat','wb')
        x = int(input('请输入学生数量: '))
        for i in range(x):
            name = input('姓名: ')
            phy = int(input('物理成绩: '))
            chem = int(input('化学成绩: '))
            cs = int(input('计算机成绩: '))
            maths = int(input('数学成绩: '))
            english = int(input('英语成绩: '))
            total = phy + chem + cs + maths + english
            per = (total / 500) * 100
            if total < 45:
                grade = "不及格"
            if total >= 45:
                grade = "D"
            if total > 60:
                grade = "C"
            if total > 75:
                grade = "B"
            if total > 90:
                grade = "A"
            t = [name, phy, chem, cs, maths, english, total, str(per)+"%", grade]
            g = [str(per)+"%"]
            pickle.dump(g, o)
            pickle.dump(t, f)
        f.close()
        o.close()
        print("成绩文件创建完成")
    elif a == 2:
        f = open('student.dat','rb')
        print("所有学生成绩记录如下:")
        try:
            while True:
                p = pickle.load(f)
                print(p)
        except:
            f.close()
    elif a == 3:
        find = input('请输入要查询的学生姓名: ')
        found = False
        with open('student.dat','rb') as f:
            try:
                while True:
                    p = pickle.load(f)
                    if p[0] == find:
                        print(f"查询结果:{p}")
                        found = True
                        break
            except EOFError:
                pass
        if not found:
            print("未找到该学生信息")
    elif a == 4:
        # 读取所有学生数据
        students = []
        with open('student.dat', 'rb') as f:
            try:
                while True:
                    stu = pickle.load(f)
                    students.append(stu)
            except EOFError:
                pass
        # 查找总分状元
        total_topper = max(students, key=lambda x:x[6])
        # 各科对应索引 1:物理 2:化学 3:计算机 4:数学 5:英语
        subjects = ['物理', '化学', '计算机', '数学', '英语']
        subject_toppers = []
        for idx, sub_name in enumerate(subjects, start=1):
            sub_top = max(students, key=lambda x:x[idx])
            subject_toppers.append((sub_name, sub_top))
        # 写入文本文件
        with open('topper.txt', 'w', encoding='utf-8') as f:
            f.write("===== 总分状元 =====\n")
            f.write(f"姓名:{total_topper[0]} 总分:{total_topper[6]} 百分比:{total_topper[7]} 等级:{total_topper[8]}\n\n")
            f.write("===== 各科目状元 =====\n")
            for sub_name, top_stu in subject_toppers:
                f.write(f"{sub_name}状元:{top_stu[0]} 成绩:{top_stu[subjects.index(sub_name)+1]}\n")
        print("状元信息已成功写入topper.txt文件")
    elif a == 5:
        # 读取所有学生数据
        students = []
        with open('student.dat', 'rb') as f:
            try:
                while True:
                    stu = pickle.load(f)
                    students.append(stu)
            except EOFError:
                pass
        # 按百分比降序排序,处理带%的字符串为数值
        sorted_students = sorted(students, key=lambda x: float(x[7].replace('%', '')), reverse=True)
        # 写入排序结果文件
        with open('sorted_student.txt', 'w', encoding='utf-8') as f:
            f.write("===== 按成绩百分比降序排序的学生列表 =====\n")
            f.write("姓名\t物理\t化学\t计算机\t数学\t英语\t总分\t百分比\t等级\n")
            for stu in sorted_students:
                f.write(f"{stu[0]}\t{stu[1]}\t{stu[2]}\t{stu[3]}\t{stu[4]}\t{stu[5]}\t{stu[6]}\t{stu[7]}\t{stu[8]}\n")
        print("排序后的学生信息已成功写入sorted_student.txt文件")

内容的提问来源于stack exchange,提问作者Nishan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:27:02