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