1.某班学生姓名以及语文、数学、英语三门课程的成绩信息存储与一个文件中,文件中的内容样式如下所示,其中三个数字依次为语文、数学、英语的成绩; 小红 65.5 81 79 小兰 88.5 99 96.5 小方 52 85 95 ...... 请编写一个程序,读取文件中的内容,计算每个同学的总成绩,在命令行窗口中输出该班级成绩单,即:按总成绩由高到低的显示每个同学每门课的得分及总成绩),同时将所显示的内容保存到另一个文件中。 要求:恰当选择IO流类型完成编码,输出的成绩单的每列应对齐。
时间: 2023-06-10 09:06:58 浏览: 245
以下是实现该程序的代码:
```java
import java.io.*;
public class ScoreAnalyzer {
public static void main(String[] args) {
try {
// 读取文件
BufferedReader reader = new BufferedReader(new FileReader("scores.txt"));
// 创建输出文件
BufferedWriter writer = new BufferedWriter(new FileWriter("scoreAnalysis.txt"));
// 存储每个同学的姓名和总成绩
String[] names = new String[30];
double[] totals = new double[30];
// 计算每个同学的总成绩
String line;
int count = 0;
while ((line = reader.readLine()) != null) {
String[] items = line.split(" ");
double total = Double.parseDouble(items[1]) + Double.parseDouble(items[2]) + Double.parseDouble(items[3]);
names[count] = items[0];
totals[count] = total;
count++;
}
// 按总成绩由高到低排序
for (int i = 0; i < count - 1; i++) {
for (int j = i + 1; j < count; j++) {
if (totals[j] > totals[i]) {
double tempTotal = totals[i];
totals[i] = totals[j];
totals[j] = tempTotal;
String tempName = names[i];
names[i] = names[j];
names[j] = tempName;
}
}
}
// 输出成绩单
System.out.println("姓名\t语文\t数学\t英语\t总成绩");
writer.write("姓名\t语文\t数学\t英语\t总成绩\n");
for (int i = 0; i < count; i++) {
reader.close();
reader = new BufferedReader(new FileReader("scores.txt"));
while ((line = reader.readLine()) != null) {
String[] items = line.split(" ");
if (items[0].equals(names[i])) {
System.out.printf("%s\t%.1f\t%.1f\t%.1f\t%.1f\n", items[0], Double.parseDouble(items[1]),
Double.parseDouble(items[2]), Double.parseDouble(items[3]), totals[i]);
writer.write(String.format("%s\t%.1f\t%.1f\t%.1f\t%.1f\n", items[0],
Double.parseDouble(items[1]), Double.parseDouble(items[2]), Double.parseDouble(items[3]),
totals[i]));
break;
}
}
}
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在该程序中,我们使用了 `BufferedReader` 和 `BufferedWriter` 类来分别读取和写入文件中的内容。首先,我们读取文件中的内容,并计算每个同学的总成绩,将其存储在 `names` 和 `totals` 数组中。然后,我们按总成绩由高到低排序,使用 `System.out.printf()` 和 `writer.write()` 方法在命令行窗口和输出文件中输出成绩单。注意,我们在输出成绩单之前需要重新打开文件进行读取操作。最后,我们关闭了文件输入输出流。
阅读全文