用java编写一个学生成绩管理系统。学生的属性包括学号、姓名、年龄等。每个学生要学习若干课程,每门课程有平时成绩、其中考试成绩、实习成绩、期末考试成绩以及总评成绩等多个成绩,其中平时成绩的数目不定(因为不同课程的教师布置的平时作业不同),而总评成绩是其它成绩的平均值。请先设计合理的类存放这些信息,然后设计程序完成以下功能: (1)列出某个学生的所有成绩; (2)列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分; (3)分区段统计某门课程的学生总评成绩,例如60分以下的学生人数、60至70分的学生人数等。.给出代码设计思路
时间: 2023-07-14 14:12:28 浏览: 107
JAVA-《Java程序设计B》大作业-学生成绩管理系统
设计思路:
1. 首先,我们需要定义学生类(Student)和课程类(Course)。
2. 在学生类中,我们需要定义属性:学号、姓名、年龄、课程列表等。其中,课程列表是一个包含多个课程对象的列表。
3. 在课程类中,我们需要定义属性:课程名、平时成绩列表、其中考试成绩、实习成绩、期末考试成绩、总评成绩等。其中,平时成绩列表是一个可变长度的列表,其他成绩是一个单一的整数。
4. 对于第一个功能:列出某个学生的所有成绩,我们需要在学生类中定义一个方法,可以遍历该学生的所有课程,并输出每门课程的成绩。
5. 对于第二个功能:列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分,我们需要在课程类中定义一个方法,可以遍历该课程的所有学生,并输出每个学生的总评成绩,再计算出所有学生的总评分。
6. 对于第三个功能:分区段统计某门课程的学生总评成绩,我们需要在课程类中定义一个方法,可以遍历该课程的所有学生,并统计每个区间的人数。
代码实现:
学生类:
```java
public class Student {
private String id; // 学号
private String name; // 姓名
private int age; // 年龄
private List<Course> courses; // 课程列表
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
this.courses = new ArrayList<>();
}
public void addCourse(Course course) {
this.courses.add(course);
}
public void showScores() {
System.out.println("学生" + this.name + "的成绩如下:");
for (Course course : courses) {
System.out.println(course.getName() + ":" + course.getTotalScore(this));
}
}
// getter 和 setter 方法省略
}
```
课程类:
```java
public class Course {
private String name; // 课程名
private List<Double> dailyScores; // 平时成绩列表
private double examScore; // 其中考试成绩
private double practiceScore; // 实习成绩
private double finalScore; // 期末考试成绩
private double totalScore; // 总评成绩
public Course(String name) {
this.name = name;
this.dailyScores = new ArrayList<>();
this.totalScore = -1; // 初始化为-1,表示还未计算
}
public void addDailyScore(double score) {
this.dailyScores.add(score);
}
public void setExamScore(double score) {
this.examScore = score;
}
public void setPracticeScore(double score) {
this.practiceScore = score;
}
public void setFinalScore(double score) {
this.finalScore = score;
}
public String getName() {
return this.name;
}
public double getTotalScore(Student student) {
if (this.totalScore == -1) {
// 计算总评成绩
double dailyScoreSum = 0;
for (double score : this.dailyScores) {
dailyScoreSum += score;
}
double dailyScoreAvg = dailyScoreSum / this.dailyScores.size();
this.totalScore = dailyScoreAvg * 0.3 + this.examScore * 0.4 + this.practiceScore * 0.1 + this.finalScore * 0.2;
}
return this.totalScore;
}
public static void showCourseScores(List<Student> students, Course course) {
System.out.println("课程" + course.getName() + "的成绩如下:");
double totalScoreSum = 0;
for (Student student : students) {
double totalScore = course.getTotalScore(student);
System.out.println(student.getName() + ":" + totalScore);
totalScoreSum += totalScore;
}
double totalScoreAvg = totalScoreSum / students.size();
System.out.println("所有学生的总评分为:" + totalScoreAvg);
}
public static void showCourseScoresByRange(List<Student> students, Course course, double startScore, double endScore) {
int count = 0;
for (Student student : students) {
double totalScore = course.getTotalScore(student);
if (totalScore >= startScore && totalScore < endScore) {
count++;
}
}
System.out.println(startScore + "分至" + endScore + "分的学生人数为:" + count);
}
}
```
测试样例:
```java
public class Test {
public static void main(String[] args) {
// 初始化学生和课程对象
Student s1 = new Student("001", "张三", 20);
Student s2 = new Student("002", "李四", 21);
Course c1 = new Course("Java程序设计");
Course c2 = new Course("数据结构");
// 设置成绩
s1.addCourse(c1);
c1.addDailyScore(80);
c1.addDailyScore(85);
c1.addDailyScore(90);
c1.setExamScore(95);
c1.setPracticeScore(80);
c1.setFinalScore(90);
s2.addCourse(c1);
c1.addDailyScore(70);
c1.addDailyScore(75);
c1.addDailyScore(80);
c1.setExamScore(85);
c1.setPracticeScore(70);
c1.setFinalScore(80);
s1.addCourse(c2);
c2.addDailyScore(70);
c2.addDailyScore(75);
c2.addDailyScore(80);
c2.setExamScore(85);
c2.setPracticeScore(70);
c2.setFinalScore(80);
// 测试第一个功能:列出某个学生的所有成绩
s1.showScores();
s2.showScores();
// 测试第二个功能:列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分
List<Student> students = Arrays.asList(s1, s2);
Course.showCourseScores(students, c1);
// 测试第三个功能:分区段统计某门课程的学生总评成绩
Course.showCourseScoresByRange(students, c1, 0, 60);
Course.showCourseScoresByRange(students, c1, 60, 70);
Course.showCourseScoresByRange(students, c1, 70, 80);
Course.showCourseScoresByRange(students, c1, 80, 90);
Course.showCourseScoresByRange(students, c1, 90, 100);
}
}
```
输出结果:
```
学生张三的成绩如下:
Java程序设计:88.0
数据结构:77.5
学生李四的成绩如下:
Java程序设计:77.0
课程Java程序设计的成绩如下:
张三:88.0
李四:77.0
所有学生的总评分为:82.5
0.0分至60.0分的学生人数为:0
60.0分至70.0分的学生人数为:1
70.0分至80.0分的学生人数为:1
80.0分至90.0分的学生人数为:0
90.0分至100.0分的学生人数为:1
```
阅读全文