用java编写一个学生成绩管理程序,内容包括学号、姓名,以及数学、外语、Java等课程的成绩,设计一个文件管理程序,实现如下功能: (1)录入10个学生的数据,写人文件; (2)从文件中读取数据,计算每位学生的所有课程平均分; (3)计算全部学生的数学平均分。
时间: 2024-12-20 14:30:24 浏览: 24
在Java中,我们可以创建一个简单的`Student`类表示每个学生的信息,并有一个`Course`类存储各个科目的成绩。首先,我们需要创建这两个类:
```java
// 学生类(Student)
public class Student {
private String id;
private String name;
private Course[] courses;
// 构造函数、getter和setter...
}
// 课程类(Course)
public class Course {
private String subject;
private double score;
// 构造函数、getter和setter...
}
```
接下来,我们将实现文件操作功能:
```java
import java.io.*;
// 文件操作类(FileManager)
public class FileManager {
public void writeStudentsToFile(Student[] students, String fileName) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
for (Student student : students) {
writer.write(student.getId() + "," + student.getName());
for (Course course : student.getCourses()) {
writer.write("," + course.getSubject() + ":" + course.getScore());
}
writer.newLine();
}
} catch (IOException e) {
System.err.println("Error writing to file: " + e.getMessage());
}
}
public Student[] readStudentsFromFile(String fileName) {
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
List<Student> studentsList = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
String[] data = line.split(",");
String id = data[0];
String name = data[1];
Course[] courses = parseCourses(data);
studentsList.add(new Student(id, name, courses));
}
return studentsList.toArray(new Student[0]);
} catch (IOException e) {
System.err.println("Error reading from file: " + e.getMessage());
return null;
}
}
private Course[] parseCourses(String[] data) {
Course[] courses = new Course[data.length - 2]; // 假设每行有两列数据:id, name 和 n个课程名+分数
for (int i = 2; i < data.length; i += 2) {
String subject = data[i];
double score = Double.parseDouble(data[i + 1]); // 假设分数总是double类型
courses[i / 2 - 1] = new Course(subject, score);
}
return courses;
}
// 其他辅助方法计算平均分...
}
// 主函数
public static void main(String[] args) {
FileManager manager = new FileManager();
// 录入10个学生的数据
Student[] students = createSampleStudents();
manager.writeStudentsToFile(students, "students.txt");
// 从文件中读取数据并计算平均分
students = manager.readStudentsFromFile("students.txt");
calculateAverageScores(students);
// 计算全部学生的数学平均分
double mathAverage = calculateMathAverage(students);
System.out.println("全班数学平均分: " + mathAverage);
}
```
在这个例子中,我们假设课程数据是以特定格式保存在文本文件中的。为了更全面地实现上述功能,你需要添加更多关于计算平均分的方法(如`calculateAverageScores`和`calculateMathAverage`),并且确保所有输入检查和错误处理。
阅读全文