package com.it.heima;
import java.io.*;
import java.util.*;
public class Test1{
/**题目:1、 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
* 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
* 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
* @param args
* 分析:
* 1)键盘输入学生信息,以quit作为结束标记,并将信息取出封装成Student对象
* 2)学生为对象,用集合存储,需要排序,用TreeSet
* 3)把集合数据写到文件中
*/
public static void main(String[] args) throws IOException {
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new FileWriter("stu.txt"));
TreeSet<Student> ts=new TreeSet<Student>();
String line=null;
System.out.println("请输入学生信息,格式如name,30,30,30(输入quit结束输入):");
//将从键盘接收到学生信息放到一个TreeSet集合中
while((line=bufr.readLine())!=null){
if("quit".equalsIgnoreCase(line))
break;
//通过","分割
String[] strs=line.split(",");
if(strs.length!=4){
System.out.println("输入格式不对,请重新输入");
continue;
}
ts.add(fillStu(strs));
}
bufr.close();
//将TreeSet写入到stu.txt文件中
Iterator<Student> it=ts.iterator();
while(it.hasNext()){
Student stu=it.next();
bufw.write(stu.toString());
bufw.newLine();
}
bufw.flush();
bufw.close();
}
//根据一个字符串数组信息填充生成Student对象
public static Student fillStu(String[] strs){
Student stu=new Student(strs[0],Float.parseFloat(strs[1]),Float.parseFloat(strs[2]),Float.parseFloat(strs[3]));
return stu;
}
}
//定义Student类,实现带泛型的Comparable接口,让Student对象自身具备比较性
class Student implements Comparable<Student>{
private String name;
private float yuWen;
private float shuXue;
private float yingYu;
private float sum;
public Student(String name, float yuWen, float shuXue, float yingYu) {
super();
this.name = name;
this.yuWen = yuWen;
this.shuXue = shuXue;
this.yingYu = yingYu;
this.sum=yuWen+shuXue+yingYu;
}
@Override
//复写compareTo()方法,实现Student对象按总分比较,总分一致时按姓名比较
public int compareTo(Student o) {
float result=this.sum-o.sum;
if(result>0)
return -1;
else if(result==0){
return this.name.compareTo(o.name);
}
return 1;
}
//stu.txt文件的格式要比较直观,所以复写toString方法
public String toString(){
return name+"\t 语文成绩:"+yuWen+"\t 数学成绩:"+shuXue+"\t 英语成绩:"+yingYu+"\t总分:"+sum;
}
} |