编程要求 打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。 编写一个程序,实现学生成绩的读取和写入操作,完成以下操作: 从 /data/bigfiles/input.txt 文本文件中读取学生成绩数据,字段之间的间隔符为:一个空格符。 对学生成绩进行统计,计算每个学生的平均分和总分,其中平均分保留两位小数,四舍五入。 按照学生姓名升序排列,将统计结果写入到 /root/output.txt文本文件中,字段之间使用 \t 作为间隔符进行输出,示例如下: Allen 88.88 222 Tom 87.88 233 ...import scala.io.Source import java.io.PrintWriter object GradeStatistics { def main(args: Array[String]): Unit = { /******************* Begin *******************/ // 读取成绩数据 // 计算平均分和总分 // 按学生姓名升序排序 // 写入统计结果 /******************* End *******************/ } }
时间: 2025-05-30 15:08:53 浏览: 83
### Scala 实现学生成绩处理
以下是基于问题需求编写的 Scala 程序,该程序能够从输入文件中读取学生成绩数据,计算每个学生的平均分(保留两位小数)和总分,并将结果按学生姓名升序排列后写入输出文件。
#### 完整代码示例
```scala
import scala.io.Source
import java.nio.file.{Files, Paths}
object StudentScoreProcessor {
def main(args: Array[String]): Unit = {
// 假设输入文件名为 Algorithm.txt、Database.txt 和 Python.txt
val inputFiles = List("Algorithm.txt", "Database.txt", "Python.txt")
val outputFile = "output.txt"
// 步骤1:读取所有文件并解析成绩
val scoresByStudent = inputFiles.flatMap(readScoresFromFile).groupBy(_._1)
// 步骤2:计算每个学生的总分和平均分
val results = scoresByStudent.map { case (studentName, scores) =>
val totalScore = scores.map(_._2.toDouble).sum
val averageScore = BigDecimal(totalScore / scores.size).setScale(2, BigDecimal.RoundingMode.HALF_UP)
(studentName, totalScore, averageScore.toDouble)
}
// 步骤3:按学生姓名排序
val sortedResults = results.toSeq.sortBy(_._1)
// 步骤4:将结果写入输出文件
writeToFile(outputFile, sortedResults.map(result => s"${result._1},${result._2},${result._3}").mkString("\n"))
println(s"处理完成,结果已保存至 $outputFile 文件。")
}
// 辅助方法:从单个文件中读取成绩
private def readScoresFromFile(fileName: String): Seq[(String, Double)] = {
Source.fromFile(fileName).getLines().map(line => {
val parts = line.split(",")
(parts(0), parts(1).toDouble)
}).toSeq
}
// 辅助方法:将字符串列表写入文件
private def writeToFile(filePath: String, content: String): Unit = {
Files.write(Paths.get(filePath), content.getBytes())
}
}
```
---
#### 功能说明
1. **读取文件**
使用 `Source.fromFile` 方法逐行读取指定的输入文件内容[^1]。每一行被拆分为学生姓名和对应的分数。
2. **聚合成绩**
将来自不同文件的学生成绩通过 `.groupBy` 操作聚合成以学生姓名为键的 Map 结构[^1]。
3. **计算总分与平均分**
遍历每位学生的成绩记录,分别计算其总分和平均分。为了确保平均分保留两位小数,使用了 `BigDecimal` 的 `setScale` 方法[^1]。
4. **排序与输出**
对结果按照学生姓名进行升序排序,并将最终的结果格式化为逗号分隔的形式写入目标文件。
---
#### 输入输出示例
假设输入文件如下:
- **Algorithm.txt**
```
Alice,85
Bob,90
Charlie,78
```
- **Database.txt**
```
Alice,88
Bob,92
Charlie,80
```
- **Python.txt**
```
Alice,90
Bob,88
Charlie,85
```
运行程序后,输出文件 (`output.txt`) 内容应为:
```
Alice,263,87.67
Bob,270,90.00
Charlie,243,81.00
```
---
#### 注意事项
- 如果输入文件路径不正确或文件不存在,则可能会抛出异常。
- 学生姓名需唯一,若有重复则可能导致错误结果。
- 平均分采用四舍五入方式保留两位小数。
---
###
阅读全文
相关推荐

















