IO流综合练习

来源:互联网 发布:求数组最大值和最小值 编辑:程序博客网 时间:2024/05/01 20:48

有5个学生有3门课的成绩,从键盘输入以上数据(包括学生姓名和三门课的成绩),输入的格式为zhangsan,30,40,50,
计算出总成绩,并把学生的信息和计算出的总分数按有高到低的顺序存放在磁盘文件a.txt中。
分析:
1.描述学生对象
2.定义一个可操作学生对象的工具类
思路:
1.通过获取键盘录入一行数据,并将该行中的数据取出封装成学生对象。
2.因为学生对象有很多,那么久需要存储,使用到集合。
又因为要对学生的总分进行排序,所以要使用TreeSet。
3.将集合中的信息写入到一个文件中。

public class Student implements Comparable<Student>{    private String name;    private int ma,cn,en;    private int sum;    public Student(String name, int ma, int cn, int en) {        super();        this.name = name;        this.ma = ma;        this.cn = cn;        this.en = en;        sum = ma + cn + en;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getMa() {        return ma;    }    public void setMa(int ma) {        this.ma = ma;    }    public int getCn() {        return cn;    }    public void setCn(int cn) {        this.cn = cn;    }    public int getEn() {        return en;    }    public void setEn(int en) {        this.en = en;    }    public int getSum() {        return sum;    }    public void setSum(int sum) {        this.sum = sum;    }    @Override    public int compareTo(Student s) {        int num = new Integer(this.sum).compareTo(new Integer(s.sum));        if(num==0)            return this.name.compareTo(s.name);        return num;    }    @Override    public int hashCode() {        return name.hashCode()+sum*31;    }    @Override    public boolean equals(Object obj) {        if(!(obj instanceof Student))            throw new ClassCastException("类型不匹配");        Student s = (Student)obj;        return this.name.equals(s.name)&&this.sum==s.sum;     }    @Override    public String toString() {        return "Student [name=" + name + ", ma=" + ma + ", cn=" + cn + ", en="                + en + "]";    }}public class StudentInfoTool {    public static Set<Student> getStudents() throws IOException{        return getStudents(null);    }    public static Set<Student> getStudents(Comparator<Student> cmp) throws IOException{        BufferedReader bufr = new BufferedReader(                new InputStreamReader(System.in));        String line = null;        Set<Student> stus = null;        if(cmp==null)            stus = new TreeSet<Student>();        else            stus = new TreeSet<Student>(cmp);        while((line=bufr.readLine())!=null){            if("over".equals(line))                break;            String[] info = line.split(",");            Student stu = new Student(info[0],Integer.parseInt(info[1]),                    Integer.parseInt(info[2]),Integer.parseInt(info[3]));            stus.add(stu);        }        bufr.close();        return stus;    }    public static void write2File(Set<Student> stus) throws IOException{        BufferedWriter bufw = new BufferedWriter(                new FileWriter("E:\\a.txt"));        for(Student s :stus){            bufw.write(s.toString()+"\t");            bufw.write(s.getSum()+"");            bufw.newLine();            bufw.flush();        }        bufw.close();    }}public class StudentInfoTest {    public static void main(String[] args) throws IOException{        Comparator<Student> cmp = Collections.reverseOrder();        Set<Student> stus = StudentInfoTool.getStudents(cmp);        StudentInfoTool.write2File(stus);    }}
0 0
原创粉丝点击