packagecom.qiqiao.test;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;importjava.util.Arrays;importjava.util.HashMap;importjava.util.HashSet;importjava.util.Scanner;importjava.util.Set;public classStudentManager {private static File DB = new File("students.db");private static Set studentList = null;
@SuppressWarnings("unchecked")private static voidinitStudentList() {if(DB.exists()) {
FileInputStream fi= null;
ObjectInputStream oi= null;try{
fi= newFileInputStream(DB);
oi= newObjectInputStream(fi);
Object obj=oi.readObject();
fi.close();
oi.close();if (obj instanceofSet)
studentList= (Set) obj;
}catch(Exception e) {
e.printStackTrace();
}
}if (studentList == null)
studentList= new HashSet();
}private static voidsave() {if (studentList == null)return;if (!DB.exists())try{
DB.createNewFile();
}catch(Exception e) {
e.printStackTrace();
}
FileOutputStream fo;try{
fo= newFileOutputStream(DB);
ObjectOutputStream oo= newObjectOutputStream(fo);
oo.writeObject(studentList);
fo.close();
oo.close();
}catch(Exception e) {
e.printStackTrace();
}
}private static Student[] getStudents(intid, String name) {
HashSet rlt = new HashSet();if (id != 0) {for(Student s : studentList) {if (s.id ==id)
rlt.add(s);
}
}else if (name != null && !name.isEmpty()) {for(Student s : studentList) {if(s._name.equalsIgnoreCase(name))
rlt.add(s);
}
}return rlt.toArray(new Student[0]);
}static{
initStudentList();
}static voidout(Object obj) {
System.out.println(obj);
}public static voidmenu() {
out("Welcome to use Student Manager!\n1-search student;\t2-add student;\t3-list all students;\nothers-exit");
Scanner in= newScanner(System.in);
Student student= null;
String input=in.nextLine();if (input.equals("1")) {
Student[] students= new Student[0];
out("please input name/id");
String ins=in.nextLine();if (ins.matches("\\d+"))
students= getStudents(Integer.parseInt(ins), null);elsestudents= getStudents(0, ins);if (students.length != 0) {
out(Arrays.toString(students).replaceAll("\\[|\\]|, ", "\n"));if (students.length == 1)
student= students[0];else{
out("please choose a student by id:\n");int i =in.nextInt();for(Student s : students) {if (s.id ==i) {
student=s;break;
}else{
out("error");
menu();
}
}
}
out("1-set score;\t2-delete score;\t3-delete student;\tother-exit");int input1 =in.nextInt();
in.nextLine();
String course= null;float score = 0;switch(input1) {case 1:
out("please input course");
course=in.nextLine();
out("please input score");
score=in.nextFloat();
in.nextLine();
student.setScore(course, score);break;case 2:
out("please input course");
course=in.nextLine();
student.removeScore(course);break;case 3:
student.removeFrom(studentList);break;
}
}else{
out("NO current record!");
}
}if (input.equals("2")) {
out("please input id");int id =in.nextInt();
in.nextLine();
out("please input name");
String name=in.nextLine();
out("please input class");
String cname=in.nextLine();
student= newStudent(id, name, cname);if(studentList.add(student)) {
out("create success!\n");
String input2= "-";while (!input2.isEmpty()) {
out("set score? \n1-yes;\t2-no");
input2=in.nextLine();if (input2.equals("1")) {
out("please input course");
String course=in.nextLine();
out("please input score");float score =in.nextFloat();
student.setScore(course, score);
in.nextLine();
}else
break;
}
}elseout("Error: id or student exists");
}if (input.equals("3")) {
out(studentList.toString().replaceAll("\\[|\\]|, ", "\n"));
}if(input.isEmpty())return;
save();
menu();
}public static voidmain(String[] args) {
menu();
}
}class Student implementsSerializable {publicString toString() {return "id: "
+id+ "\tclass: "
+_class+ "\tname: "
+_name+ courses.toString().replaceAll("\\{|\\}|, ", "\n").replaceAll("=", ": ");
}
Student(intid, String _name, String _class) {this.id =id;this._class =_class;this._name =_name;
}private static final long serialVersionUID = 1L;public int id = 0;public String _name = "";public String _class = "";
HashMap courses = new HashMap();void setScore(String course, floatscore) {
courses.put(course, score);
System.out.println("set success!\n\n" + this);
}voidremoveScore(String course) {
courses.remove(course);
System.out.println("delete success!\n\n" + this);
};void removeFrom(Set>list) {
list.remove(this);
System.out.println("delete success!");
}public inthashCode() {return 31;
}public booleanequals(Object obj) {
Student s= null;if (obj instanceofStudent) {
System.out.println(1);
s=(Student) obj;return s.id ==id|| (s._class.equals(_class) &&s._name.equals(_name));
}return false;
}
}classDaJiangYou {
DaJiangYou() {
System.out.println("I am da jiang you");
}
}