用java实现以下代码,并告知代码思想 编写一个程序,随机生成10000个学生及三门科目的分数,写入指定文件名的文件,其中,姓名字段不需要随机生成,直接使用“张三”等即可;平均分(Average)与总分(Total)字段在随机生成时给0即可,后续再统计填充。从文件中读出学生信息,统计平均分、总分,并写入文件。比如,原学生信息为 "张三 90 91 92 0 0",处理后的结果为"张三 90 91 92 91 273",这里仅使用整型运算即可,不需要用浮点数。找出平均成绩前10名的学生,写入“first_10.txt”文件。最后编写一个查找学生的方法,public static String[] findStudent(String name)。根据传入的name在文件中查找姓名相同的学生,并以数组的形式返回。
时间: 2023-11-11 10:03:20 浏览: 79
利用java实现学生成绩
下面是Java实现的代码,并附有详细的注释:
```java
import java.io.*;
import java.util.*;
public class Main {
// 定义常量
private static final int NUM_STUDENTS = 10000; // 学生数目
private static final int NUM_SUBJECTS = 3; // 科目数目
private static final String[] NAMES = {"张三", "李四", "王五", "赵六", "孙七"}; // 姓名数组
private static final String FILE_NAME = "students.txt"; // 文件名
public static void main(String[] args) {
// 生成随机的学生信息
List<Student> students = generateStudents();
// 将学生信息写入文件
writeToFile(students, FILE_NAME);
// 从文件中读取学生信息
List<Student> readStudents = readFromFile(FILE_NAME);
// 计算平均分和总分
calculateScores(readStudents);
// 找出平均成绩前10名的学生
List<Student> top10Students = getTop10Students(readStudents);
// 将前10名学生写入文件
writeToFile(top10Students, "first_10.txt");
// 查找学生信息
String[] result = findStudent(readStudents, "张三");
System.out.println(Arrays.toString(result));
}
// 生成随机的学生信息
private static List<Student> generateStudents() {
List<Student> students = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < NUM_STUDENTS; i++) {
Student student = new Student();
student.setName(NAMES[random.nextInt(NAMES.length)]);
student.setScore1(random.nextInt(101));
student.setScore2(random.nextInt(101));
student.setScore3(random.nextInt(101));
student.setTotal(0);
student.setAverage(0);
students.add(student);
}
return students;
}
// 将学生信息写入文件
private static void writeToFile(List<Student> students, String fileName) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
for (Student student : students) {
writer.write(student.toString());
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 从文件中读取学生信息
private static List<Student> readFromFile(String fileName) {
List<Student> students = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(" ");
Student student = new Student();
student.setName(parts[0]);
student.setScore1(Integer.parseInt(parts[1]));
student.setScore2(Integer.parseInt(parts[2]));
student.setScore3(Integer.parseInt(parts[3]));
student.setTotal(Integer.parseInt(parts[4]));
student.setAverage(Integer.parseInt(parts[5]));
students.add(student);
}
} catch (IOException e) {
e.printStackTrace();
}
return students;
}
// 计算平均分和总分
private static void calculateScores(List<Student> students) {
for (Student student : students) {
int total = student.getScore1() + student.getScore2() + student.getScore3();
student.setTotal(total);
student.setAverage(total / NUM_SUBJECTS);
}
}
// 找出平均成绩前10名的学生
private static List<Student> getTop10Students(List<Student> students) {
// 按照平均分从高到低排序
Collections.sort(students, (s1, s2) -> s2.getAverage() - s1.getAverage());
// 取前10个学生
return students.subList(0, 10);
}
// 查找学生信息
public static String[] findStudent(List<Student> students, String name) {
List<String> result = new ArrayList<>();
for (Student student : students) {
if (student.getName().equals(name)) {
result.add(student.toString());
}
}
return result.toArray(new String[0]);
}
}
class Student {
private String name; // 姓名
private int score1; // 科目1成绩
private int score2; // 科目2成绩
private int score3; // 科目3成绩
private int total; // 总分
private int average; // 平均分
// toString方法用于将学生信息转换为字符串
@Override
public String toString() {
return name + " " + score1 + " " + score2 + " " + score3 + " " + total + " " + average;
}
// getters和setters方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore1() {
return score1;
}
public void setScore1(int score1) {
this.score1 = score1;
}
public int getScore2() {
return score2;
}
public void setScore2(int score2) {
this.score2 = score2;
}
public int getScore3() {
return score3;
}
public void setScore3(int score3) {
this.score3 = score3;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getAverage() {
return average;
}
public void setAverage(int average) {
this.average = average;
}
}
```
代码思想:
1. 定义常量,包括学生数目、科目数目、姓名数组和文件名等。
2. 编写生成随机学生信息的函数,使用Java的Random类生成随机数。
3. 编写将学生信息写入文件的函数,使用Java的BufferedWriter类实现。
4. 编写从文件中读取学生信息的函数,使用Java的BufferedReader类实现。
5. 编写计算平均分和总分的函数,使用Java的整数除法实现。
6. 编写找出平均成绩前10名的学生的函数,使用Java的Collections类的排序功能实现。
7. 编写查找学生信息的函数,遍历学生列表,查找姓名相同的学生。
8. 在main函数中按顺序调用以上函数,实现完整的程序。
阅读全文