package com.qiqiao.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class StudentManager { private static File DB = new File("students.db"); private static Set<Student> studentList = null; @SuppressWarnings("unchecked") private static void initStudentList() { if (DB.exists()) { FileInputStream fi = null; ObjectInputStream oi = null; try { fi = new FileInputStream(DB); oi = new ObjectInputStream(fi); Object obj = oi.readObject(); fi.close(); oi.close(); if (obj instanceof Set) studentList = (Set<Student>) obj; } catch (Exception e) { e.printStackTrace(); } } if (studentList == null) studentList = new HashSet<Student>(); } private static void save() { if (studentList == null) return; if (!DB.exists()) try { DB.createNewFile(); } catch (Exception e) { e.printStackTrace(); } FileOutputStream fo; try { fo = new FileOutputStream(DB); ObjectOutputStream oo = new ObjectOutputStream(fo); oo.writeObject(studentList); fo.close(); oo.close(); } catch (Exception e) { e.printStackTrace(); } } private static Student[] getStudents(int id, String name) { HashSet<Student> rlt = new HashSet<Student>(); 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 void out(Object obj) { System.out.println(obj); } public static void menu() { out("Welcome to use Student Manager!\n1-search student;\t2-add student;\t3-list all students;\nothers-exit"); Scanner in = new Scanner(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); else students = 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 = new Student(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; } } else out("Error: id or student exists"); } if (input.equals("3")) { out(studentList.toString().replaceAll("\\[|\\]|, ", "\n")); } if (input.isEmpty()) return; save(); menu(); } public static void main(String[] args) { menu(); } } class Student implements Serializable { public String toString() { return "id: " + id + "\tclass: " + _class + "\tname: " + _name + courses.toString().replaceAll("\\{|\\}|, ", "\n").replaceAll( "=", ": "); } Student(int id, 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<String, Float> courses = new HashMap<String, Float>(); void setScore(String course, float score) { courses.put(course, score); System.out.println("set success!\n\n" + this); } void removeScore(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 int hashCode() { return 31; } public boolean equals(Object obj) { Student s = null; if (obj instanceof Student) { System.out.println(1); s = (Student) obj; return s.id == id || (s._class.equals(_class) && s._name.equals(_name)); } return false; } } class DaJiangYou { DaJiangYou() { System.out.println("I am da jiang you"); } }
时间: 2024-11-03 21:24:34