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
相关产品推荐
相关产品推荐

