1. 根据提供的实验数据统计出学生的人数即文件的行数加1
2. 统计每门成绩优异的学生即成绩大于85,(由于文件随机产生的成绩有可能大于100的)
3. 统计每个学生的平均成绩,并将此成绩添加到文件的末尾一列
4. 按照学生的平时成绩对文件进行重新排序,将排好序的文件写入以自己班级为文件名的txt中在编写程序时要符合JavaDemo所给的接口进行编程,在提交程序时只有符合接口的程序才通过,即在不改动接口和主函数的情况下之间运行程序能够成功import java.util.ArrayList;
public interface GradeDispose {
/**
 * 获得学生人数
 * @return
 */
      int getStudentCount();
      /**
       * 获得各科成绩优秀学生的人数
       * @return
       */
      ArrayList<Integer> getExcellentStudentCount();
      /**
       * 设置各学生的平均成绩
       */
      void setAvgGrade();
      /**
       * 将学生按平时成绩排序
       */
      void sortGrade();
}
public class Test {
GradeDispose gradeDispose;
public GradeDispose getGradeDispose() {
return gradeDispose;
} public Test(GradeDispose gradeDispose){
this.gradeDispose=gradeDispose;
}

/**
 * @param args
 */
public static void main(String[] args) {
/**请新建一个实现了gradeDispose接口的类作为参数传入*/

Test t=new Test(gradeDispose);
t.getGradeDispose().getStudentCount();
t.getGradeDispose().getExcellentStudentCount();
t.getGradeDispose().setAvgGrade();
t.getGradeDispose().sortGrade(); }}

解决方案 »

  1.   

    思考了一下你的问题,感觉具体的实现与你所用的文件有关系,我的理解是你先把学生的信息都放在一个文件中(我用的Student.txt),然后通过程序把文件中的学生信息读出来,排序,最后写入到相应班级的文件中。不知道我对你的问题的理解是否符合你的要求(完全正确的理解另一个人的思想是一件很头疼是事情,所以如果你看我的程序的话可能也会有些难以理解我的思想),基于以上的理解我写了一下你的程序,希望能起到抛砖引玉的作用吧public class Student {
    String name;//姓名
    String classnum;//班级
    float grade1;//成绩1
    float grade2;//成绩2
    float grade3;//成绩3
    float avg;//平均成绩
    //一个构造函数,用来根据文件信息构造Student
    Student(String name,String classnum,float grade1,float grade2,float grade3){
    this.name=name;
    this.classnum=classnum;
    this.grade1=grade1;
    this.grade2=grade2;
    this.grade3=grade3;
    }
    //写文件时会用到
    public String toString(){
    return name+" "+classnum+" "+grade1+" "+ grade2+" "+grade3+" "+avg;
    }}
    import java.util.ArrayList;
    import java.io.*;public class Grade implements GradeDispose {
        public Grade() {
    init();//调用init()函数,将文件中的学生信息读到内存方便以后操作
    }
    Student[] stu;//存放所有学生的信息
    //将文件中的学生信息读到内存以数组形式存储
    public void init() {
    //首先创建一个存储学生信息的数组,他的大小通过getStudentCount()函数获得
    stu = new Student[getStudentCount()];
    int i = 0;
    String str;
    try {
    BufferedReader br = new BufferedReader(new FileReader(
    "Student.txt"));
    while ((str = br.readLine()) != null) {
    String temp;
    String name;
    String classnum;
    float grade1;
    float grade2;
    float grade3;
    //以空格为标记,把字符串分割成姓名、班级、各科成绩
    int start = 0;
    int end = str.indexOf(" ");
    name = str.substring(start, end);
    start = end + 1;
    end = str.indexOf(" ", start);
    classnum = str.substring(start, end);
    start = end + 1;
    end = str.indexOf(" ", start);
    temp = str.substring(start, end);
    grade1 = Float.valueOf(temp);
    start = end + 1;
    end = str.indexOf(" ", start);
    temp = str.substring(start, end);
    grade2 = Float.valueOf(temp);
    start = end + 1;
    temp = str.substring(start);
    grade3 = Float.valueOf(temp);
    //每一行学生信息构成一个学生实例,并加入到数组中
    Student S = new Student(name, classnum, grade1, grade2, grade3);
    stu[i] = S;
    i++;
    }
    br.close();
    } catch (IOException e) {
    System.out.println("找不到文件Student.txt");
    }
    } public int getStudentCount() {
    int count = 0;
    try {
    BufferedReader br = new BufferedReader(new FileReader(
    "Student.txt"));
    while (br.readLine() != null) {
    count++;
    }
    } catch (IOException e) {
    System.out.println("找不到文件Student.txt");
    }
    return count;
    }
    public ArrayList<Integer> getExcellentStudentCount() {
    ArrayList<Integer> result = new ArrayList<Integer>();
    int excellent1 = 0;
    int excellent2 = 0;
    int excellent3 = 0;
    for (int i = 0; i < stu.length; i++) {
    if (stu[i].grade1 > 85)
    excellent1++;
    if (stu[i].grade2 > 85)
    excellent2++;
    if (stu[i].grade3 > 85)
    excellent3++;
    }
    result.add(new Integer(excellent1));
    result.add(new Integer(excellent2));
    result.add(new Integer(excellent3));
    return result;
    }
    public void setAvgGrade() {
    for (int i = 0; i < stu.length; i++) {
    stu[i].avg = (stu[i].grade1 + stu[i].grade2 + stu[i].grade3) / 3;
    }
    }
    public void sortGrade() {
    // 冒泡排序
    for (int i = 0; i < stu.length; i++) {
    for (int j = 0; j < stu.length - i - 1; j++) {
    if (stu[j].avg < stu[j + 1].avg) {
    Student temp = stu[j];
    stu[j] = stu[j + 1];
    stu[j + 1] = temp;
    }
    }
    }
    // 按平均成绩写入相应的班级
    for (int i = 0; i < stu.length; i++) {
    try {
    PrintWriter pw = new PrintWriter(new FileOutputStream(
    stu[i].classnum + ".txt",true));
    pw.println(stu[i].toString());
    pw.close();
    } catch (IOException e) {
    e.printStackTrace();
    } }
    }}
    import java.util.ArrayList;public class Test {
    GradeDispose gradeDispose; public GradeDispose getGradeDispose() {
    return gradeDispose;
    } public Test(GradeDispose gradeDispose) {
    this.gradeDispose = gradeDispose;
    } /**
     * @param args
     */
    public static void main(String[] args) {
    /** 请新建一个实现了gradeDispose接口的类作为参数传入 */
    Grade gradeDispose=new Grade(); Test t = new Test(gradeDispose);
    t.getGradeDispose().getStudentCount();
    t.getGradeDispose().getExcellentStudentCount();
    t.getGradeDispose().setAvgGrade();
    t.getGradeDispose().sortGrade(); }}
    再说明一下,我先设计了一个学生类,包含一下几个属性:姓名、班级、成绩1、成绩2、成绩3和平均成绩,这样在做排序,比较等操作时可以对学生类进行操作,不必麻烦的去读文件,缺点是增加了一个函数,用来把文件中的信息读到学生数组中。也许你不会赞同我的设计,希望能对楼主有所启发吧。