java代码实现学生成绩统计程序,输入多个课程名称,选择考核方式为考试还是考察,若为考试则总成绩为平时分加上考试分数的平均数,若为考察则直接是考察分数,再输入学生的学号、姓名、所有科目的平均成绩,并对学生成绩进行排序,输入以end结束
时间: 2023-12-08 16:03:56 浏览: 27
好的,这个问题需要编写一个Java程序来实现。下面是代码实现:
```java
import java.util.*;
public class ScoreStatistics {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
List<Course> courses = new ArrayList<Course>();
// 输入课程信息
while (true) {
System.out.print("请输入课程名称(以end结束):");
String courseName = input.nextLine();
if (courseName.equals("end")) {
break;
}
System.out.print("请选择考核方式(考试/考察):");
String testType = input.nextLine();
boolean isExam = false;
if (testType.equals("考试")) {
isExam = true;
}
courses.add(new Course(courseName, isExam));
}
// 输入学生信息
System.out.print("请输入学生数量:");
int studentNum = input.nextInt();
Student[] students = new Student[studentNum];
for (int i = 0; i < studentNum; i++) {
System.out.println("请输入第" + (i+1) + "个学生的信息:");
System.out.print("学号:");
int id = input.nextInt();
input.nextLine(); // 消耗掉多余的换行符
System.out.print("姓名:");
String name = input.nextLine();
double[] avgScores = new double[courses.size()];
for (int j = 0; j < courses.size(); j++) {
System.out.print("请输入" + courses.get(j).getName() + "的平均成绩:");
avgScores[j] = input.nextDouble();
}
students[i] = new Student(id, name, avgScores);
}
// 计算成绩并排序
for (int i = 0; i < studentNum; i++) {
double totalScore = 0;
for (int j = 0; j < courses.size(); j++) {
if (courses.get(j).isExam()) {
System.out.print("请输入第" + (i+1) + "个学生的" + courses.get(j).getName() + "考试成绩:");
double examScore = input.nextDouble();
totalScore += (students[i].getAvgScores()[j] + examScore) / 2;
} else {
totalScore += students[i].getAvgScores()[j];
}
}
students[i].setTotalScore(totalScore);
}
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
if (o1.getTotalScore() < o2.getTotalScore()) {
return 1;
} else if (o1.getTotalScore() > o2.getTotalScore()) {
return -1;
} else {
return 0;
}
}
});
// 输出成绩排名
System.out.println("成绩排名:");
System.out.print("姓名\t学号");
for (int j = 0; j < courses.size(); j++) {
System.out.print("\t" + courses.get(j).getName());
}
System.out.println("\t总成绩");
for (int i = 0; i < studentNum; i++) {
System.out.print(students[i].getName() + "\t" + students[i].getId());
for (int j = 0; j < courses.size(); j++) {
System.out.print("\t" + students[i].getAvgScores()[j]);
}
System.out.println("\t" + students[i].getTotalScore());
}
}
}
class Course {
private String name;
private boolean isExam;
public Course(String name, boolean isExam) {
this.name = name;
this.isExam = isExam;
}
public String getName() {
return name;
}
public boolean isExam() {
return isExam;
}
}
class Student {
private int id;
private String name;
private double[] avgScores;
private double totalScore;
public Student(int id, String name, double[] avgScores) {
this.id = id;
this.name = name;
this.avgScores = avgScores;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double[] getAvgScores() {
return avgScores;
}
public double getTotalScore() {
return totalScore;
}
public void setTotalScore(double totalScore) {
this.totalScore = totalScore;
}
}
```
这个程序实现了以下功能:
1. 输入多个课程名称和考核方式(考试/考察),以end结束输入;
2. 输入学生数量和每个学生的学号、姓名和所有科目的平均成绩;
3. 根据考核方式计算每个学生的总成绩;
4. 对学生按照总成绩进行降序排序;
5. 输出成绩排名。
注意,这个程序还有一些限制和不足之处,例如没有对输入进行严格判断和异常处理,也没有考虑同分的情况。可以根据实际需要进行改进。