练习:存储学生信息

来源:互联网 发布:ceph 写入数据失败 编辑:程序博客网 时间:2024/06/10 00:29
package exercise;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.util.Collections;import java.util.Comparator;import java.util.Set;import java.util.TreeSet;//学生类,实现Comparable接口,能够比较class Student implements Comparable<Student> {    private String name;    private int ma, cn, en;    private int sum;    Student(String name, int ma, int cn, int en) {        this.name = name;        this.ma = ma;        this.cn = cn;        this.en = en;        sum = ma + cn + en;    }    public String getName() {        return name;    }    public int getSum() {        return sum;    }    public int hashCode() {        return name.hashCode() + sum * 78;    }    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;    }    //覆盖compareTo方法    @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;    }    public String toString() {        return "student[" + name + ", " + ma + ", " + cn + ", " + en + "]";    }}//工具类class StudentInfoTool {    public static Set<Student> getStudents() throws IOException {        return getStudents(null);    }    //Comparator比较器    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("stuinfo.txt"));        for (Student stu : stus) {            bufw.write(stu.toString() + "\t");            bufw.write(stu.getSum() + "");            bufw.newLine();            bufw.flush();        }        bufw.close();    }}public class StudentInfoTest {    public static void main(String[] args) throws IOException {        // 按照成绩递增        Set<Student> stus1 = StudentInfoTool.getStudents();        // 按照成绩递减        Comparator<Student> cmp = Collections.reverseOrder();        Set<Student> stus2 = StudentInfoTool.getStudents(cmp);        StudentInfoTool.write2File(stus2);    }}
0 0