编写一个学生成绩管理程序。
           学生的属性包括学号、姓名、年龄等。
           每个学生要学习若干课程,
           每门课程有平时成绩、期中考试成绩、实习成绩、期末考试成绩以及总评成绩等多个成绩,
           其中平时成绩的数目不定(因为不同课程的教师布置的平时作业数不同),
           而总评成绩是其它成绩的平均值。 
           请先设计合理的对象容器类存放这些信息,然后设计程序完成以下功能:
(1)列出某个学生的所有成绩;
(2)列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分;
(3)分区段统计某门课程的学生总评成绩,例如60 分以下的学生人数、60 至70 分的学生人数等。
        根据兴趣,你还可实现其它一些功能。请仔细设计和组织你的类和使用的集合类对象。
      

解决方案 »

  1.   

    Student.javapackage info;import java.util.ArrayList;
    import java.util.List;public class Student { private int sno;
    private String name;
    private int age; private List<Score> scores = new ArrayList<Score>(); public Student() { } public Student(int sno, String name, int age) {
    this.sno = sno;
    this.name = name;
    this.age = age;
    } public int getSno() {
    return sno;
    } public void setSno(int sno) {
    this.sno = sno;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    } /**
     * 指定课程成绩是否已经存在
     * 
     * @param cno
     * @return
     * @author sunstar
     * @date 2012-7-26 下午3:03:27
     */
    public boolean isExists(int cno) { for (int i = scores.size() - 1; i > -1; i--) { if (this.scores.get(i).getCno() == cno) {
    return true;
    }
    } return false;
    } public void addScore(Score score) {
    //如果课程还没有成绩则增加,否则不添加,防止添加多次相同课程的成绩
    if (!isExists(score.getCno())) {
    this.scores.add(score);
    }
    } public void delScore(int cno) { for (int i = scores.size() - 1; i > -1; i--) { if (this.scores.get(i).getCno() == cno) {
    scores.remove(i);
    break;
    }
    }
    } @Override
    public String toString() {
    return "Student [sno=" + sno + ", name=" + name + ", age=" + age
    + ", scores=" + scores + "]";
    } /**
     * 显示学生 的所有学习的课程成绩
     * 
     * @author sunstar
     * @date 2012-7-26 下午2:58:20
     */
    public void showScore() {
    System.out.println("Student [sno=" + sno + ", name=" + name + ", age="
    + age + "]  的详细成绩如下:");
    for (int i = 0; i < scores.size(); i++) {
    System.out.println(scores.get(i).toString());
    }
    } /**
     * 根据课程ID cno获取成绩
     * 
     * @param cno
     * @return
     * @author sunstar
     * @date 2012-7-26 下午2:57:58
     */
    public Score getScore(int cno) {
    Score score = null;
    for (int i = 0; i < scores.size(); i++) {
    if (scores.get(i).getCno() == cno) {
    score = scores.get(i);
    break;
    }
    } return score; } /**
     * 显示指定 课程ID的成绩
     * 
     * @param cno
     * @author sunstar
     * @date 2012-7-26 下午2:57:33
     */
    public void showScore(int cno) { Score score = getScore(cno); if (score == null) { System.out.println("Student [sno=" + sno + ", name=" + name
    + ", age=" + age + "]  没有学习 ID 为" + cno + "的课程.");
    } else {
    System.out.println("Student [sno=" + sno + ", name=" + name
    + ", age=" + age + "]  的 【" + score.getCourseName()
    + "】  成绩如下:");
    System.out.println(score.toString());
    } }
    }Score.java
    package info;import java.util.ArrayList;
    import java.util.List;public class Score { private List<Double> daily = new ArrayList<Double>() ;//日常成绩
    private double mid ;//期中
    private double practice ;//实习
    private double end ; //期末
    private int cno ;//课程号
    private String courseName ; //课程名 


    public String getCourseName() {
    return courseName;
    }
    public void setCourseName(String courseName) {
    this.courseName = courseName;
    }
    public Score(){}


    public Score(double mid, double practice, double end, int cno,String courseName) {
    this.mid = mid;
    this.practice = practice;
    this.end = end;
    this.cno = cno;
    this.courseName = courseName ;
    }

    public Score(List<Double> daily, double mid, double practice, double end,
    int cno, String courseName ) {
    this.daily = daily;
    this.mid = mid;
    this.practice = practice;
    this.end = end;
    this.cno = cno;
    this.courseName = courseName ;
    }
    public List<Double> getDaily() {
    return daily;
    }
    public void setDaily(List<Double> daily) {
    this.daily = daily;
    }
    public double getMid() {
    return mid;
    }
    public void setMid(double mid) {
    this.mid = mid;
    }
    public double getPractice() {
    return practice;
    }
    public void setPractice(double practice) {
    this.practice = practice;
    }
    public double getEnd() {
    return end;
    }
    public void setEnd(double end) {
    this.end = end;
    }
    public int getCno() {
    return cno;
    }
    public void setCno(int cno) {
    this.cno = cno;
    }
    /**
     * 得到日常成绩的平均值
     * @return
     * @author sunstar
     * @date 2012-7-26 下午2:11:07
     */
    public double getSumDaily(){ double sum = 0.0 ;
    for (int i = 0; i < daily.size(); i++){
    sum += daily.get(i) ;
    }
    return sum ;
    }
    //某个课程的总评成绩
    public double getZhongPing(){

    double sum = this.getSumDaily() + this.mid + this.practice + this.end ;

    return sum /  4 ;
    }
    @Override
    public String toString() {
    return "Score [cno=" + cno + ", courseName="
    + courseName +" , daily=" + this.getSumDaily() + ", mid=" + mid + ", practice="
    + practice + ", end=" + end + "]";
    }




    }
    School.javapackage info;import java.util.ArrayList;
    import java.util.List;public class School { public  static List<Student> stuList = new ArrayList<Student>() ;  //学生


    public static void showZhongPing(int cno){
    Score score = null ;
    Student stu = null ;
    for (int i = 0; i < stuList.size(); i++) {
    stu = stuList.get(i) ;
    score = stu.getScore(cno) ;
    if (score == null){
    System.out.println(stu.getName() + " 没有学习 ID 为  " + cno + "的课程.");
    }else{

    System.out.println(stu.getName() + " 的 【 " + score.getCourseName() + " 】课程总评成绩为:"+  score.getZhongPing());
    }
    }
    }
    /**
     * 0-60 , 61-80, 81 -100;
     * @return
     * @author sunstar
     * @date 2012-7-26 下午2:55:47
     */
    public static int[] total(){
    int iArrs[] = new int[3] ;

    //.iArrs......iArrs.

    return iArrs ;

    }

    /**
     * @param args
     * @author sunstar
     * @date 2012-7-26 下午2:20:05
     */
    public static void main(String[] args) {
    List<Double> daily  = null ;
    Student stu = new Student(1, "张三", 22) ;
    daily = new ArrayList<Double>() ;
    daily.add(90.5) ;
    daily.add(88.5) ;
    daily.add(85.0) ;
    daily.add(50.0) ;
    Score score = new Score(daily, 80.0, 60.0, 70.0,1, "A课程" ) ;
    stu.addScore(score) ;

    daily = new ArrayList<Double>() ;
    daily.add(50.5) ;
    daily.add(38.5) ;
    score = new Score(daily, 40.0, 50.0, 30.0,2, "B课程" ) ;
    stu.addScore(score) ;
    stuList.add( stu ) ;

    stu = new Student(2, "李斯", 22) ;
    daily = new ArrayList<Double>() ;
    daily.add(10.5) ;
    daily.add(18.5) ;
    daily.add(15.0) ;
    daily.add(10.0) ;
    score = new Score(daily, 10.0, 10.0, 10.0,1, "A课程" ) ;
    stu.addScore(score) ;

    daily = new ArrayList<Double>() ;
    daily.add(50.5) ;
    daily.add(38.5) ;
    score = new Score(daily, 40.0, 50.0, 30.0,2, "B课程" ) ;
    stu.addScore(score) ;
    stuList.add( stu ) ;
    stu = new Student(3, "Jone", 19) ;
    stuList.add( stu ) ;
    stu = new Student(4, "王五", 24) ;
    stuList.add( stu ) ;
    stu = new Student(5, "X六", 23) ;
    stuList.add( stu ) ;

    stuList.get(0).showScore() ;
    stuList.get(0).showScore(1) ;
    stuList.get(0).showScore(2) ;

    showZhongPing(1) ;


    }}
    Student [sno=1, name=张三, age=22]  的详细成绩如下:
    Score [cno=1, courseName=A课程 , daily=314.0, mid=80.0, practice=60.0, end=70.0]
    Score [cno=2, courseName=B课程 , daily=89.0, mid=40.0, practice=50.0, end=30.0]
    Student [sno=1, name=张三, age=22]  的 【A课程】  成绩如下:
    Score [cno=1, courseName=A课程 , daily=314.0, mid=80.0, practice=60.0, end=70.0]
    Student [sno=1, name=张三, age=22]  的 【B课程】  成绩如下:
    Score [cno=2, courseName=B课程 , daily=89.0, mid=40.0, practice=50.0, end=30.0]
    张三 的 【 A课程 】课程总评成绩为:131.0
    李斯 的 【 A课程 】课程总评成绩为:21.0
    Jone 没有学习 ID 为  1的课程.
    王五 没有学习 ID 为  1的课程.
    X六 没有学习 ID 为  1的课程.
    我没有理解你的总评成绩是计算每一门的 平均成绩呢 ,还是这个学生所学的各科学习成绩平均后在平均 ????就写到这里 ,之后的功能自己琢磨一些 ,应该能搞定的....