使用java编程实现以下功能: (1)从键盘输人姓名、学号、成绩,并保存到文本文件中。重复进行,直到输人空 字符为止。 (2)从文件中读取各学生的成绩,并计算所有学生成绩的平均值、最大值和最小值。
时间: 2024-12-29 12:34:25 浏览: 5
在Java中,你可以通过`BufferedReader`和`PrintWriter`来实现这两个功能。首先,我们创建一个方法用于将学生信息写入文本文件:
```java
import java.io.*;
public void saveStudentInfo(String name, String id, double score) {
try {
File file = new File("students.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
// 如果文件不存在,则添加一行新的内容
if (!file.exists()) {
writer.write("Name\tID\tScore\n");
}
// 写入新行数据
writer.write(name + "\t" + id + "\t" + score + "\n");
writer.close();
} catch (IOException e) {
System.out.println("Error writing to file: " + e.getMessage());
}
}
```
接着,我们创建另一个方法来读取并处理文件中的数据:
```java
public void readAndProcessStudentData() {
try {
File file = new File("students.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
double sum = 0;
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
String line;
while ((line = reader.readLine()) != null) {
// 分割每一行数据
String[] parts = line.split("\t");
if (parts.length == 3) { // 检查是否为有效记录
double score = Double.parseDouble(parts[2]);
// 更新总分、最大值和最小值
sum += score;
max = Math.max(max, score);
min = Math.min(min, score);
System.out.println("Name: " + parts[0] + ", ID: " + parts[1] + ", Score: " + score);
}
}
// 计算平均值
double average = sum / (reader.lines().count() - 1); // 减一是因为首行为表头
reader.close();
System.out.println("\nAverage score: " + average);
System.out.println("Max score: " + max);
System.out.println("Min score: " + min);
} catch (IOException e) {
System.out.println("Error reading from file: " + e.getMessage());
}
}
```
在这个程序中,用户可以反复输入学生信息直到遇到空字符退出。每次读取文件时,都会更新分数统计。注意,为了处理文件头,我们在计算平均值时需要减去一行。
你可以结合这两个方法,在主程序中循环询问用户输入,直到用户不再输入。例如:
```java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Enter student's name (empty input to quit): ");
String name = scanner.nextLine();
if (name.isEmpty()) break;
System.out.print("Enter student's ID: ");
String id = scanner.nextLine();
System.out.print("Enter student's score: ");
double score = scanner.nextDouble();
saveStudentInfo(name, id, score);
readAndProcessStudentData();
}
scanner.close();
}
```
阅读全文