学生成绩管理系统代码功能需求: (1)提供身份验证,和使用系统的权限设置、判定。 (2)(教师用户)能实现班级同学各学期各科成绩的录入(各科成绩包括: 英语、数学、数据结构、操作系统、面向对象程序设计)、并编辑好每个学生的信息,输入的数据必须保存在指定的文件中,以便反复使用。 (3)(学生用户或游客)提供对学号或姓名,各学期、各学科成绩的查询。 (4)(学生和教师用户)能按各学期 各学科分数排序输出(每一科都要能 排序输出)。 (5)(教师用户)能统计各科成绩分数段的分布(60以下、60~70、70~8 0、80~90、90~100)情况,并输出。
时间: 2023-06-10 14:06:08 浏览: 62
以下是一个简单的学生成绩管理系统代码,满足上述功能需求:
```python
import csv
class Student:
def __init__(self, id, name, grade=[]):
self.id = id
self.name = name
self.grade = grade
def add_grade(self, subject, semester, score):
for g in self.grade:
if g['subject'] == subject and g['semester'] == semester:
g['score'] = score
return
self.grade.append({'subject': subject, 'semester': semester, 'score': score})
def get_grade(self, subject=None, semester=None):
if subject and semester:
for g in self.grade:
if g['subject'] == subject and g['semester'] == semester:
return g['score']
elif subject:
scores = []
for g in self.grade:
if g['subject'] == subject:
scores.append(g['score'])
return scores
elif semester:
scores = []
for g in self.grade:
if g['semester'] == semester:
scores.append(g['score'])
return scores
else:
return self.grade
class Teacher:
def __init__(self, username, password):
self.username = username
self.password = password
def login(self, username, password):
return self.username == username and self.password == password
def add_student(self, id, name, grade=[]):
student = Student(id, name, grade)
with open('students.csv', 'a', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([student.id, student.name])
return student
def get_students(self):
students = []
with open('students.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
id, name = row
grades = self.load_grades(id)
student = Student(id, name, grades)
students.append(student)
return students
def load_grades(self, id):
grades = []
with open('grades.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row[0] == id:
grades.append({'subject': row[1], 'semester': row[2], 'score': int(row[3])})
return grades
def save_grade(self, id, subject, semester, score):
with open('grades.csv', 'a', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([id, subject, semester, score])
def sort_students(self, subject, semester):
students = self.get_students()
students.sort(key=lambda s: s.get_grade(subject, semester), reverse=True)
return students
def get_grade_distribution(self, subject):
distribution = {'60以下': 0, '60~70': 0, '70~80': 0, '80~90': 0, '90~100': 0}
with open('grades.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row[1] == subject:
score = int(row[3])
if score < 60:
distribution['60以下'] += 1
elif score < 70:
distribution['60~70'] += 1
elif score < 80:
distribution['70~80'] += 1
elif score < 90:
distribution['80~90'] += 1
else:
distribution['90~100'] += 1
return distribution
```
使用示例:
```python
# 添加学生
teacher = Teacher('admin', 'password')
student1 = teacher.add_student('20190101', '张三')
student2 = teacher.add_student('20190102', '李四')
# 添加成绩
teacher.save_grade(student1.id, '英语', '2019-1', 80)
teacher.save_grade(student1.id, '数学', '2019-1', 90)
teacher.save_grade(student2.id, '英语', '2019-1', 70)
teacher.save_grade(student2.id, '数学', '2019-1', 85)
# 查询成绩
print(student1.get_grade('英语', '2019-1')) # 80
print(student2.get_grade('数学', '2019-1')) # 85
# 排序输出
students = teacher.sort_students('数学', '2019-1')
for s in students:
print(s.name, s.get_grade('数学', '2019-1'))
# 统计成绩分布
distribution = teacher.get_grade_distribution('英语')
print(distribution)
```