用Scala语言:给定成绩单,统计出各门课程的平均成绩,最低、高成绩,及格率,男女同学分开, 分别统计各门课程的平均成绩,最低成绩,最高成绩
时间: 2024-11-23 17:51:01 浏览: 10
为了满足这个需求,我们可以在`StudentRecord`类的基础上进行扩展,添加一些静态方法来处理所有学生的数据。我们将创建两个辅助函数:一个用于处理所有学生的数据,另一个用于性别分类。以下是相应的代码:
首先,我们需要为学生信息添加性别字段:
```scala
case class StudentInfo(name: String, gender: Char, grades: List[Grade])
```
然后更新`StudentRecord`类:
```scala
class StudentRecord(name: String, info: StudentInfo) extends StudentInfo(info) {
... // 原有的addGrade方法和toString方法
// 新增静态方法,用于处理所有学生的数据
@staticmethod
def statsForAll(gradesList: List[StudentInfo]): Map[String, (Double, Int, Int)] = {
gradesList.groupBy(_.subject).mapValues { grades =>
val scores = grades.flatMap(_.score)
(scores.map(_.toDouble).sum / scores.length, scores.min, scores.max)
}
}
// 新增静态方法,按性别分类统计
@staticmethod
def statsByGender(gradesList: List[StudentInfo], gender: Char): Map[String, (Double, Int, Int)] = {
gradesList.filter(_.gender == gender).groupBy(_.subject).mapValues { grades =>
val scores = grades.flatMap(_.score)
(scores.map(_.toDouble).sum / scores.length, scores.min, scores.max)
}
}
}
```
现在你可以使用这两个方法来获取统计数据:
```scala
val students = List(
StudentInfo("张三", 'M', List(Grade("数学", 95), Grade("语文", 88))),
StudentInfo("李四", 'F', List(Grade("数学", 92), Grade("英语", 97)))
)
// 统计所有学生的数据
val allStats = StudentRecord.statsForAll(students)
// 按性别统计各门课程成绩
val maleStats = StudentRecord.statsByGender(students, 'M')
val femaleStats = StudentRecord.statsByGender(students, 'F')
println(allStats)
println(maleStats)
println(femaleStats)
```
阅读全文