java笔记--综合应用

需求:有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,
输入学生姓名和成绩,输入的格式:name,30,30,30从键盘输入以上数据(包括姓名,三门课成绩),
按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

思路:
1,3门课的成绩都是数据,为了便于操作,将其封装到学生对象中。
学生本身就是问题领域中涉及的对象,对学生描述。
学生:
姓名,语文成绩,英语成绩,数学成绩,总分.
2,数据来源于键盘录入,将这些数据都封装到每一个学生对象中。
3,按照总分排个序,很熟,但是这些数据都存储到了学生对象中,其实是学生对象排序。
学生对象很多,先想到的就是存起来--集合-不重复排序-TreeSet。
4,将排序后的信息写入到一个文件中。定义操作文件的输出流。
将信息写入到文件中。

public class ComparatorByMath implements Comparator {

    @Override
    public int compare(Student o1, Student o2) {
        
        int temp=o1.getMa()-o2.getMa();
        
        return temp==0?o1.getName().compareTo(o2.getName()):temp;
    }
}
public class Student implements Comparable{
    
    

    private String name;
    private int cn,en,ma;
    private int sum;
    public Student(String name, int cn, int en, int ma) {
        super();
        this.name = name;
        this.cn = cn;
        this.en = en;
        this.ma = ma;
        sum=cn+en+ma;
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + sum;
        return result;
    }



    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (sum != other.sum)
            return false;
        return true;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    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 getMa() {
        return ma;
    }
    public void setMa(int ma) {
        this.ma = ma;
    }
    public int getSum() {
        return sum;
    }
    public void setSum(int sum) {
        this.sum = sum;
    }

    @Override
    public int compareTo(Student o) {
        
        int temp=this.sum-o.sum;
        
        return temp==0?this.name.compareTo(o.name):temp;
    }
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", cn=" + cn + ", en=" + en + ", ma=" + ma + "]";
    }
}
public class StudentInfoTool {

    /*
     * 定义功能,获取键盘录入的信息。 并将信息封装成学生对象。存储到容器中。
     * 按照学生的自然排序完成排序动作。 
     */
    /*public static Set getStudents() throws IOException {
        
        return getStudents(null);
    }*/
    /*
     * 定义功能,获取键盘录入的信息。 并将信息封装成学生对象。存储到容器中。
     * 按照指定比较器完成排序的动作。
     */

    public static Set getStudents(Comparator comp) throws IOException {

        // 获取键盘录入。
        BufferedReader bufr = new BufferedReader(new InputStreamReader(
                System.in));

        // 创建一个集合对象。TreeSet.
        Set set = null;
        
        if(comp==null)
            set = new TreeSet();
        else
            set = new TreeSet(comp);
        String line = null;

        while ((line = bufr.readLine()) != null) {

            if ("over".equals(line))// 定义键盘录入的结束标记。
                break;

            // 对获取的信息进行切割,获取指定的数据内容。
            String[] info_arr = line.split(",");
            Student stu = new Student(info_arr[0],
                    Integer.parseInt(info_arr[1]),
                    Integer.parseInt(info_arr[2]),
                    Integer.parseInt(info_arr[3]));

            // 把学生对象存储到集合中去。
            set.add(stu);
        }

        return set;
    }

    /*
     * 定义功能,将集合中的对象信息写入到指定文件中进行存储。
     */
    public static void write2File(Set set, File file)
            throws IOException {

        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(file));

            for (Student stu : set) {
                bufw.write(stu.toString() + "\t"+stu.getSum());             
                bufw.newLine();
                bufw.flush();
            }
        } finally {
            if (bufw != null)
                bufw.close();
        }

    }
}
public class StudentInfoTest {

    public static void main(String[] args) throws IOException {

        Comparator comp = Collections.reverseOrder();
        comp = Collections.reverseOrder(new ComparatorByMath());
        Set set = StudentInfoTool.getStudents(comp);
        
        
        File file = new File("stuinfo.txt");
        StudentInfoTool.write2File(set, file);
    }
}

运行:
java笔记--综合应用_第1张图片

java笔记--综合应用_第2张图片

你可能感兴趣的:(java笔记--综合应用)