目标:使用python实现模拟一个学生成绩管理系统 具体内容: 1. 随机生成40名学生的信息,包括姓名、学号。随机生成五门课的成绩,并且这些课程学分不同。存储为CSV格式的文件。 2. 读取这些学生的成绩文件,为每位学生生成一份成绩报告单。 3. 为每门课程的老师生成一份成绩分析表,包含学生成绩分布直方图、不及格名单等。
时间: 2024-02-19 09:03:05 浏览: 75
好的,我可以帮助你完成这个任务。以下是一个可能的实现方案:
1. 随机生成40名学生的信息,包括姓名、学号。随机生成五门课的成绩,并且这些课程学分不同。存储为CSV格式的文件。
```python
import csv
import random
# 生成40名学生信息
students = []
for i in range(40):
name = 'student' + str(i + 1)
student_id = '202100' + str(i + 1).zfill(2)
scores = [random.randint(60, 100) for _ in range(5)]
credits = [2, 3, 4, 2, 3] # 五门课的学分
students.append([name, student_id] + scores + credits)
# 将学生信息写入CSV文件
with open('students.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['姓名', '学号', '语文', '数学', '英语', '物理', '化学', '语文学分', '数学学分', '英语学分', '物理学分', '化学学分'])
writer.writerows(students)
```
2. 读取这些学生的成绩文件,为每位学生生成一份成绩报告单。
```python
import csv
# 读取学生信息文件
with open('students.csv', 'r') as file:
reader = csv.reader(file)
header = next(reader) # 跳过表头
students = list(reader)
# 为每位学生生成成绩报告单
for student in students:
name = student[0]
student_id = student[1]
scores = [int(score) for score in student[2:7]]
credits = [int(credit) for credit in student[7:]]
grades = []
for i in range(5):
grade = scores[i] * credits[i]
grades.append(grade)
total_credits = sum(credits)
total_grades = sum(grades)
gpa = total_grades / total_credits
report = f'姓名:{name}\n学号:{student_id}\n语文:{scores[0]},数学:{scores[1]},英语:{scores[2]},物理:{scores[3]},化学:{scores[4]}\n'
report += f'学分绩点:{gpa:.2f}\n'
print(report)
```
3. 为每门课程的老师生成一份成绩分析表,包含学生成绩分布直方图、不及格名单等。
```python
import csv
import numpy as np
import matplotlib.pyplot as plt
# 读取学生信息文件
with open('students.csv', 'r') as file:
reader = csv.reader(file)
header = next(reader) # 跳过表头
students = list(reader)
# 统计每门课程的成绩分布
scores = [[] for _ in range(5)]
for student in students:
for i in range(5):
scores[i].append(int(student[i + 2]))
for i in range(5):
print(f'课程{i+1}成绩分布直方图:')
plt.hist(scores[i], bins=range(0, 101, 10))
plt.show()
# 输出每门课程的不及格名单
for i in range(5):
print(f'课程{i+1}不及格名单:')
for student in students:
if int(student[i + 2]) < 60:
print(student[0], student[1])
```
阅读全文