import java.io.*;
import java.util.Iterator;
import java.util.TreeSet;
/*
* Test4--有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
* 输入格式为:name,30,30,30(姓名,三门课成绩),
* 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
* 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
*
* 思路:
* 1.定义一个描述学生的类,里面包含姓名,各门课成绩。并且让该类具备比较性,要实现Comparable接口。
* 2.定义一个输入流,从键盘接收字符。
* 3.因为要用到总成绩的排序,所以使用到TreeSet集合。
* 4.将学生封装成对象,安装总成绩的排序放入TreeSet集合中。
* 5,定义一个输出流对象,从集合中读取数据,并将其存入到指定的文件中。
* */
public class Test4 {
public static void main(String[] args) {
stuCompare();
}
public static void stuCompare(){
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
bufr = new BufferedReader(new InputStreamReader(System.in));
bufw = new BufferedWriter(new FileWriter("stu.txt"));
TreeSet<Student> ts = new TreeSet<Student>();
String line = null;
while((line = bufr.readLine())!=null){
if("over".equals(line))
break;
String[] str = line.split(",");
ts.add(new Student(str[0],Integer.parseInt(str[1]),
Integer.parseInt(str[2]),Integer.parseInt(str[3])));
//str = null;
}
Iterator it = ts.iterator();
while(it.hasNext()){
Student stu = (Student) it.next();
bufw.write(stu.getName()+","+String.valueOf(stu.getCn())
+","+String.valueOf(stu.getMa())+","
+String.valueOf(stu.getEn()));
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
throw new RuntimeException("读写文件失败");
}
finally{
try {
if(bufr!=null)
bufr.close();
} catch (IOException e) {
// TODO: handle exception
throw new RuntimeException("关闭读取流失败");
}
try {
if(bufw!=null)
bufw.close();
} catch (IOException e) {
// TODO: handle exception
throw new RuntimeException("关闭写入流失败");
}
}
}
}
class Student implements Comparable {
private String name ;
private int cn;
private int ma;
private int en;
private int sum;
public Student(String name, int cn, int ma, int en) {
this.name = name;
this.cn = cn;
this.ma = ma;
this.en = en;
this.sum =cn+ma+en;
}
public String getName(){
return name;
}
public int getCn(){
return cn;
}
public int getMa(){
return ma;
}
public int getEn(){
return en;
}
public int getSum(){
return sum;
}
@Override
public int compareTo(Object obj) {
if(obj == null){
throw new RuntimeException("学生对象不存在");
}
Student stu = (Student)obj;
if(this.sum>stu.sum)
return -1;
else if(this.sum==stu.sum)
return 0;
return 1;
}
} |
|