您的位置:首页 > 其它

练习:存储学生信息

2015-10-13 19:21 411 查看
package exercise;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

//学生类,实现Comparable接口,能够比较
class Student implements Comparable<Student> {

private String name;
private int ma, cn, en;
private int sum;

Student(String name, int ma, int cn, int en) {
this.name = name;
this.ma = ma;
this.cn = cn;
this.en = en;
sum = ma + cn + en;
}

public String getName() {
return name;
}

public int getSum() {
return sum;
}

public int hashCode() {
return name.hashCode() + sum * 78;
}

public boolean equals(Object obj) {
if (!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s = (Student) obj;
return this.name.equals(s.name) && this.sum == s.sum;
}

//覆盖compareTo方法
@Override
public int compareTo(Student s) {
int num = new Integer(this.sum).compareTo(new Integer(s.sum));
if (num == 0)
return this.name.compareTo(s.name);
return num;
}

public String toString() {
return "student[" + name + ", " + ma + ", " + cn + ", " + en + "]";
}
}

//工具类
class StudentInfoTool {

public static Set<Student> getStudents() throws IOException {
return getStudents(null);
}

//Comparator比较器
public static Set<Student> getStudents(Comparator<Student> cmp)
throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));

String line = null;
Set<Student> stus = null;
if (cmp == null) {
stus = new TreeSet<Student>();
} else {
stus = new TreeSet<Student>(cmp);
}
while ((line = bufr.readLine()) != null) {
if ("over".equals(line))
break;
String[] info = line.split(",");
Student stu = new Student(info[0], Integer.parseInt(info[1]),
Integer.parseInt(info[2]), Integer.parseInt(info[3]));
stus.add(stu);
}

bufr.close();
return stus;
}

//写入文件方法
public static void write2File(Set<Student> stus) throws IOException {
BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt"));
for (Student stu : stus) {
bufw.write(stu.toString() + "\t");
bufw.write(stu.getSum() + "");
bufw.newLine();
bufw.flush();
}
bufw.close();
}
}

public class StudentInfoTest {

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

// 按照成绩递增
Set<Student> stus1 = StudentInfoTool.getStudents();

// 按照成绩递减
Comparator<Student> cmp = Collections.reverseOrder();
Set<Student> stus2 = StudentInfoTool.getStudents(cmp);

StudentInfoTool.write2File(stus2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: