1.输入、修改和显示n个学生的m门考试科目的成绩,计算总分和平均分。 2.分别按总分和学号进行排序。 3.输入学生的学号,显示该学生的姓名、各门课程的成绩。 4.将输入的学生成绩数据保存到文件中。 5.从文件中读出学生成绩数据,查询学生成绩。 6.程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性
时间: 2024-03-17 22:45:12 浏览: 138
好的,以下是一个基于Python语言的成绩管理系统的示例代码,包括输入、修改和显示学生的成绩数据、计算总分和平均分、按总分和学号进行排序、输入学生的学号显示该学生的姓名、各门课程的成绩、将输入的学生成绩数据保存到文件中、从文件中读出学生成绩数据查询学生成绩、程序异常处理等功能。请注意,代码中可能存在一些细节问题,需要根据具体情况进行具体的调整和修改。
```python
import os
# 定义一个学生类
class Student:
def __init__(self, id, name, scores):
self.id = id
self.name = name
self.scores = scores
def __str__(self):
return '学号:{},姓名:{},成绩:{}'.format(self.id, self.name, self.scores)
# 读取学生成绩数据
def read_scores(filename):
scores = []
if os.path.exists(filename):
with open(filename, 'r') as f:
lines = f.readlines()
for line in lines:
data = line.strip().split(',')
id = int(data[0])
name = data[1]
scores = [float(x) for x in data[2:]]
scores.append(id) # 把学号放到最后,方便排序
student = Student(id, name, scores)
scores.append(student)
return scores
# 保存学生成绩数据
def save_scores(scores, filename):
with open(filename, 'w') as f:
for student in scores:
f.write('{},{},{}\n'.format(student.id, student.name, ','.join([str(x) for x in student.scores[:-1]])))
# 输入学生成绩数据
def input_scores():
n = int(input("请输入学生数量:"))
m = int(input("请输入科目数量:"))
scores = []
for i in range(n):
id = int(input("请输入第{}个学生的学号:".format(i+1)))
name = input("请输入第{}个学生的姓名:".format(i+1))
s = []
for j in range(m):
score = float(input("请输入第{}个学生的第{}门课程成绩:".format(i+1, j+1)))
s.append(score)
s.append(id) # 把学号放到最后,方便排序
student = Student(id, name, s)
scores.append(student)
return scores
# 显示学生成绩数据
def show_scores(scores):
for student in scores:
print(student)
# 计算学生成绩总分和平均分
def calc_scores(scores):
total_score = [0] * len(scores[0].scores) # 初始化总分列表
for student in scores:
for i in range(len(student.scores)):
total_score[i] += student.scores[i]
avg_score = [round(x/len(scores), 2) for x in total_score] # 四舍五入保留两位小数
return total_score, avg_score
# 按总分排序
def sort_by_total_score(scores):
scores.sort(key=lambda x: sum(x.scores[:-1]), reverse=True)
# 按学号排序
def sort_by_id(scores):
scores.sort(key=lambda x: x.scores[-1])
# 查询学生成绩
def query_scores(scores, id):
for student in scores:
if student.id == id:
print(student)
# 主函数
def main():
# 从文件中读取学生成绩数据
filename = 'scores.txt'
scores = read_scores(filename)
# 如果文件中没有数据,则输入学生成绩数据
if not scores:
scores = input_scores()
while True:
print('1.输入学生成绩')
print('2.修改学生成绩')
print('3.显示学生成绩')
print('4.计算学生成绩总分和平均分')
print('5.按总分排序')
print('6.按学号排序')
print('7.查询学生成绩')
print('8.保存学生成绩数据到文件')
print('9.退出')
choice = input("请选择操作:")
if choice == '1':
scores += input_scores()
elif choice == '2':
id = int(input("请输入要修改的学生学号:"))
for student in scores:
if student.id == id:
name = input("请输入新的姓名:")
student.name = name
for i in range(len(student.scores) - 1):
score = float(input("请输入新的成绩:"))
student.scores[i] = score
break
elif choice == '3':
show_scores(scores)
elif choice == '4':
total_score, avg_score = calc_scores(scores)
print('总分:{},平均分:{}'.format(total_score, avg_score))
elif choice == '5':
sort_by_total_score(scores)
elif choice == '6':
sort_by_id(scores)
elif choice == '7':
id = int(input("请输入要查询的学生学号:"))
query_scores(scores, id)
elif choice == '8':
save_scores(scores, filename)
elif choice == '9':
break
else:
print("无效操作,请重新输入!")
if __name__ == '__main__':
main()
```
请注意,以上代码只是一个简单的示例,实际应用中可能需要进行更加复杂的功能设计和实现。
阅读全文