IO流--学生成绩记录练习题

如题所示

从score.txt文件中读取数据,文件中每行是一个学生的成绩记录,
内容格式为:
姓名、英语成绩、语文成绩、数学成绩、JAVA成绩。
要求:按总分从高到低排序后显示出每个学生的各科成绩和总成绩。
score.txt文件内容例如:
姓名##英语##语文##数学##JAVA
罗霄##68##95##52##81
刘苗苗##97##97##84##62
郝笑##75##93##87##52
李昊阳##86##83##88##68
雷鸣##54##73##70##91
李文龙##79##97##96##63
赵璧辉##52##51##75##97
姜治文##59##88##60##86
陈琳##86##53##58##63
苏浩##79##68##89##55
李金洲##61##89##72##71
王欢##82##66##86##70
王璐##68##60##84##70

主要代码

public static void main(String[] args) throws IOException {
        /*
        获取文档中的学生人数
         */
        FileReader fr = new FileReader("D:\\score.txt");
        BufferedReader br = new BufferedReader(fr);
        String str = null;
        int num = 0;//记录学生人数
        while ((str = br.readLine()) != null) {
            num++;
        }
        StudentDemo[] atu = new StudentDemo[num - 1];//建立一个学生类数组用于存储学生信息

        /*
        获取每个学生的信息
         */
        FileReader fread = new FileReader("D:\\score.txt");
        BufferedReader bread = new BufferedReader(fread);
        bread.readLine();  // 读取第一行,为后面读取的每行都是学生的信息

        String s = null;
        int count = 0;
        while ((s = bread.readLine()) != null) {//从文档中的第二行读取,每次读取一个学生的所有信息
            int sum = 0;//总成绩
            String[] infor = s.split("##");    // 存储第二行之后的每个学生的信息,因为文档中每个学生的信息中都有"##",所以split分割出学生的信息
            Integer[] score = new Integer[infor.length - 1];    //分割之后的转数字
            for (int i = 1; i < infor.length; i++) {
                score[i - 1] = new Integer(infor[i]); //获取infor数组中的成绩,存储到score数组中
                sum += score[i - 1]; //求成绩总和
            }

										//分别对应 姓名		英语	  语文      数学	  java
            StudentDemo stu = new StudentDemo(infor[0], score[0], score[1], score[2], score[3], sum);   // 存储每次读取的一位同学的所有信息
            atu[count] = stu;
            count++;
        }
        Arrays.sort(atu);//在Student类中重写了Compare方法,使用总成绩排序

        //遍历输出
        for (StudentDemo i : atu) {
            System.out.println(i);
        }
    }

Student类

public class StudentDemo implements Comparable<StudentDemo> {
    /*
    英语成绩、语文成绩、数学成绩、JAVA成绩
     */
    private String name;
    private int English;
    private int Chinese;
    private int Math;
    private int JavaS;
    private int num;

    public StudentDemo(String name, int english, int chinese, int math, int javaS, int num) {
        this.name = name;
        this.English = english;
        this.Chinese = chinese;
        this.Math = math;
        this.JavaS = javaS;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getEnglish() {
        return English;
    }

    public void setEnglish(int english) {
        English = english;
    }

    public int getMath() {
        return Math;
    }

    public void setMath(int math) {
        Math = math;
    }

    public int getChinese() {
        return Chinese;
    }

    public void setChinese(int chinese) {
        Chinese = chinese;
    }

    public int getJavaS() {
        return JavaS;
    }

    public void setJavaS(int javaS) {
        JavaS = javaS;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "{" +
                "姓名='" + name + '\'' +
                ", 英语成绩=" + English +
                ", 语文成绩=" + Math +
                ", 数学成绩=" + Chinese +
                ", java成绩=" + JavaS +
                ", 总成绩=" + num +
                '}';
    }

    @Override
    public int compareTo(StudentDemo o) {
        return this.num - o.num;
    }
}

运行结果

{姓名='	陈琳', 英语成绩=86, 语文成绩=58, 数学成绩=53, java成绩=63, 总成绩=260}
{姓名='	赵璧辉', 英语成绩=52, 语文成绩=75, 数学成绩=51, java成绩=97, 总成绩=275}
{姓名='	王璐', 英语成绩=68, 语文成绩=84, 数学成绩=60, java成绩=70, 总成绩=282}
{姓名='	雷鸣', 英语成绩=54, 语文成绩=70, 数学成绩=73, java成绩=91, 总成绩=288}
{姓名='	苏浩', 英语成绩=79, 语文成绩=89, 数学成绩=68, java成绩=55, 总成绩=291}
{姓名='	姜治文', 英语成绩=59, 语文成绩=60, 数学成绩=88, java成绩=86, 总成绩=293}
{姓名='	李金洲', 英语成绩=61, 语文成绩=72, 数学成绩=89, java成绩=71, 总成绩=293}
{姓名='	罗霄', 英语成绩=68, 语文成绩=52, 数学成绩=95, java成绩=81, 总成绩=296}
{姓名='	王欢', 英语成绩=82, 语文成绩=86, 数学成绩=66, java成绩=70, 总成绩=304}
{姓名='	郝笑', 英语成绩=75, 语文成绩=87, 数学成绩=93, java成绩=52, 总成绩=307}
{姓名='	李昊阳', 英语成绩=86, 语文成绩=88, 数学成绩=83, java成绩=68, 总成绩=325}
{姓名='	李文龙', 英语成绩=79, 语文成绩=96, 数学成绩=97, java成绩=63, 总成绩=335}
{姓名='	刘苗苗', 英语成绩=97, 语文成绩=84, 数学成绩=97, java成绩=62, 总成绩=340}

Process finished with exit code 0

posted @ 2021-12-03 17:19  肖帆咪  阅读(66)  评论(0编辑  收藏  举报