Scala:给定成绩单,使用scala编程完成以下分析工作:(1)统计出各门课程的平均成绩,最低、高成绩,及格率;(2)男女同学分开, 分别统计各门课程的平均成绩,最低成绩,最高成绩
时间: 2024-11-04 13:16:01 浏览: 23
Scala是一种基于JVM的强类型函数式编程语言,它结合了面向对象和纯函数式编程的特点,适合处理数据处理和复杂算法分析任务。对于这个成绩单分析的问题,我们可以创建一个包含学生信息和成绩的数据结构,比如`Student`类和`CourseScore`类。
首先,我们定义`Student`类和`CourseScore`类:
```scala
case class Student(name: String, gender: String)
case class CourseScore(course: String, score: Int)
class GradeReport(scores: List[CourseScore]) {
// 数据库查询或文件读取等操作
}
```
然后,在`GradeReport`类中添加方法来计算总分、平均分、最低分、最高分和及格率:
```scala
def averageScore(course: String): Double = {
val courseScores = scores.filter(_.course == course).map(_.score)
if (courseScores.isEmpty) Double.NaN else courseScores.sum.toDouble / courseScores.length
}
def minScore(course: String): Int = {
scores.find(_.course == course).map(_.score).getOrElse(Int.MinValue)
}
def maxScore(course: String): Int = {
scores.maxBy(_.score).score
}
def passingRate(course: String): Double = {
val passingScores = scores.count(_.course == course && _.score >= 60)
if (scores.exists(_.course == course)) passingScores.toDouble / scores.count(_.course == course) else 0.0
}
// 为了区分男女同学,可以增加性别过滤
def groupedAnalysis(sex: String)(fn: CourseScore => Unit): Unit = {
scores.filter(student => student.gender == sex).foreach { student =>
fn(student.course)
}
}
// 示例用法
val report = new GradeReport(someScoresList)
report.groupedAnalysis("男") { cs => println(s"${cs.course} - 男生平均分: ${averageScore(cs.course)}") }
report.groupedAnalysis("女") { cs => println(s"${cs.course} - 女生平均分: ${averageScore(cs.course)}") }
report.minScore("数学")
report.maxScore("英语")
report.passingRate("计算机科学")
```
注意这只是一个简化的例子,实际应用中可能需要从数据库或CSV文件中读取数据,并可能需要更复杂的错误处理。在这个示例中,`someScoresList`应该是一个包含`CourseScore`实例的列表。运行上述代码,即可得到所需的结果。
阅读全文