• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會(huì)很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::

            package test;


            import java.io.FileInputStream;

            import java.io.FileOutputStream;

            import java.io.IOException;

            import java.io.ObjectInputStream;

            import java.io.ObjectOutputStream;

            import java.io.Serializable;

            import java.util.ArrayList;

            import java.util.Collections;

            import java.util.Comparator;

            import java.util.List;

            import java.util.Scanner;

            import java.util.Set;

            import java.util.TreeSet;


            public class StudentManageSystem {

                /** StudentManager中提供的操作菜單 **/

                public static void showMenus() {

                    String format = "              %s\n";

                    System.out.println("----------------功能菜單------------------");

                    System.out.printf(format, "0. 退出管理");

                    System.out.printf(format, "1. 功能菜單");

                    System.out.printf(format, "2. 顯示學(xué)生");

                    System.out.printf(format, "3. 查詢學(xué)生");

                    System.out.printf(format, "4. 添加學(xué)生");

                    System.out.printf(format, "5. 刪除學(xué)生");

                    System.out.printf(format, "6. 修改學(xué)生");

                    System.out.printf(format, "7. 讀取學(xué)生");

                    System.out.printf(format, "8. 保存學(xué)生");

                    System.out.println("-------------------結(jié)束------------------");

                    System.out.println();

                }


                /** 管理學(xué)生信息 **/

                public void manageStudents() throws IOException {

                    Scanner scanner = new Scanner(System.in);

                    StudentDao sd = new StudentDao();

                    StudentService ss = new StudentService(sd, scanner);


                    showMenus();

                    int op = -1;


                    while (op != 0) {

                        System.in.skip(System.in.available());

                        System.out.print("輸入菜單編號(hào): ");

                        op = scanner.nextInt();

                        scanner.nextLine(); // 吃掉輸入菜單編號(hào)后無(wú)效的回車(chē)字符


                        try {

                            switch (op) {

                            case 0:

                                break;

                            case 1:

                                showMenus();

                                break;

                            case 2:

                                ss.showStudents();

                                break;

                            case 3:

                                ss.findStudents();

                                break;

                            case 4:

                                ss.addStudent();

                                break;

                            case 5:

                                ss.removeStudent();

                                break;

                            case 6:

                                ss.updateStudent();

                                break;

                            case 7:

                                ss.readStudents();

                                break;

                            case 8:

                                ss.saveStudents();

                                break;

                            default:

                                System.out.println("沒(méi)有提供此項(xiàng)操作\n");

                            }

                        } catch (Exception e) {

                            System.out.println("\t" + e.getMessage() + "\n");

                        }

                    }

                }


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

                    StudentManageSystem sm = new StudentManageSystem();

                    sm.manageStudents();

                    System.out.println("程序結(jié)束");

                }

            }


            /** Service中的很多功能都是委托給Dao對(duì)象去完成 **/

            class StudentService {

                private StudentDao studentDao;

                private Scanner scanner;


                public StudentService(StudentDao studentDao, Scanner scanner) {

                    this.studentDao = studentDao;

                    this.scanner = scanner;

                }


                // 添加學(xué)生

                public void addStudent() {

                    System.out.print("輸入學(xué)生資料進(jìn)行添加,格式為id|name|age: "); // name|age

                    String info = scanner.nextLine();

                    Student s = Student.buildStudent(info);

                    if (studentDao.hasStudent(s)) { throw new RuntimeException("此學(xué)生信息已經(jīng)存在"); }

                    studentDao.addStudent(s);

                    System.out.println("\t添加成功\n");

                }


                // 刪除學(xué)生

                public void removeStudent() {

                    System.out.print("輸入學(xué)生id進(jìn)行刪除: ");

                    int id = scanner.nextInt();

                    Student s = studentDao.findStudent(id);


                    if (s == null) {

                        System.out.println("\t查無(wú)此學(xué)生");

                    } else {

                        studentDao.removeStudent(s);

                        System.out.println("\t已經(jīng)刪除學(xué)生: " + s);

                    }

                    System.out.println();

                }

                

                /** 修改學(xué)生信息 **/

                public void updateStudent() {

                    System.out.print("修改學(xué)生信息,輸入學(xué)生id: ");

                    int id = scanner.nextInt();

                    Student s = studentDao.findStudent(id);


                    if (s == null) {

                        System.out.println("\t查無(wú)此學(xué)生");

                    } else {

                        scanner.nextLine(); // 吃掉回車(chē)

                        System.out.println("\t學(xué)生: " + s);

                        System.out.print("\t輸入新的信息,格式為name|age: ");

                        String line = scanner.nextLine().trim();

                        if (!line.matches("\\w+\\|\\d+")) {

                            throw new RuntimeException("輸入的修改學(xué)生信息格式不對(duì)");

                        }

                        

                        // 修改已搜索到的學(xué)生信息

                        String[] infos = line.split("\\|");

                        String name = infos[0];

                        int age = Integer.parseInt(infos[1]);

                        s.setName(name);

                        s.setAge(age);

                        System.out.println("\t修改完成");

                    }

                    System.out.println();

                }


                /** 輸入學(xué)生的學(xué)號(hào)或者姓名進(jìn)行查找 **/

                public void findStudents() {

                    System.out.print("輸入學(xué)生ID或者姓名進(jìn)行查詢: ");

                    String info = scanner.nextLine().trim();

                    List<Student> ss = new ArrayList<Student>();


                    // 如果輸入的是數(shù)字,默認(rèn)為學(xué)號(hào)

                    if (info.matches("\\d+")) {

                        int id = Integer.parseInt(info);

                        Student s = studentDao.findStudent(id);

                        if (s != null) {

                            ss.add(s);

                        }

                    } else {

                        ss = studentDao.findStudents(info);

                    }


                    // 輸出查詢結(jié)果

                    if (ss.size() == 0) {

                        System.out.println("查無(wú)此學(xué)生");

                    } else {

                        for (Student s : ss) {

                            System.out.println("\t" + s);

                        }

                    }

                    System.out.println();

                }


                /** 顯示已經(jīng)有的學(xué)生信息 **/

                public void showStudents() {

                    Set<Student> students = studentDao.getStudents();


                    if (students.size() == 0) {

                        System.out.println("\t列表中還沒(méi)有任何學(xué)生");

                        return;

                    }


                    System.out.println("========所有學(xué)生信息========");

                    for (Student s : students) {

                        System.out.println("\t" + s);

                    }

                    System.out.println();

                }


                public void saveStudents() {

                    studentDao.saveStudents();

                    System.out.println("\t保存成功");

                }


                public void readStudents() {

                    studentDao.readStudents();

                    System.out.println("\t讀取完成");

                }

            }


            /** 對(duì)學(xué)生數(shù)據(jù)進(jìn)行執(zhí)久化操作 **/

            class StudentDao {

                private Set<Student> students;

                private String fileName = "students.dat";


                public StudentDao() {

                    students = new TreeSet<Student>(new StudentComparator());

                }


                /** 添加學(xué)生 **/

                public void addStudent(Student student) {

                    students.add(student);

                }


                /** 刪除學(xué)生 **/

                public void removeStudent(Student student) {

                    students.remove(student);

                }


                /** 使用學(xué)生的id進(jìn)行查找 **/

                public Student findStudent(int id) {

                    for (Student s : students) {

                        if (s.getId() == id) { return s; }

                    }

                    return null;

                }


                /** 使用學(xué)生的名字查找進(jìn)行查找 **/

                public List<Student> findStudents(String name) {

                    List<Student> found = new ArrayList<Student>();

                    for (Student s : students) {

                        if (s.getName().equals(name)) {

                            found.add(s);

                        }

                    }


                    return found;

                }


                /** 判斷學(xué)生是否已經(jīng)存在 **/

                public boolean hasStudent(Student s) {

                    return students.contains(s);

                }


                /** 返回學(xué)生列表的視圖,不可修改 **/

                public Set<Student> getStudents() {

                    return Collections.unmodifiableSet(students);

                }


                /** 把學(xué)生信息保存到文件 **/

                public void saveStudents() {

                    ObjectOutputStream oos = null;

                    try {

                        oos = new ObjectOutputStream(new FileOutputStream(fileName));

                        oos.writeObject(students);

                    } catch (Exception e) {

                        e.printStackTrace();

                        throw new RuntimeException("保存失敗");

                    } finally {

                        if (oos != null) {

                            try {

                                oos.close();

                            } catch (Exception e2) {

                            }

                        }

                    }

                }


                /** 從文件讀取學(xué)生信息 **/

                public void readStudents() {

                    ObjectInputStream ois = null;

                    try {

                        ois = new ObjectInputStream(new FileInputStream(fileName));

                        students = (Set<Student>) ois.readObject();

                    } catch (Exception e) {

                        e.printStackTrace();

                        throw new RuntimeException("讀取失敗");

                    } finally {

                        if (ois != null) {

                            try {

                                ois.close();

                            } catch (Exception e2) {

                            }

                        }

                    }

                }

            }


            /** 學(xué)生類,可以序列化保存到文件 **/

            class Student implements Serializable {

                private static final long serialVersionUID = 1L;

                private int id;

                private int age;

                private String name;


                public Student() {

                }


                public Student(int id, String name, int age) {

                    this.id = id;

                    this.age = age;

                    this.name = name;

                }


                public String getName() {

                    return name;

                }


                public void setName(String name) {

                    this.name = name;

                }


                public int getId() {

                    return id;

                }


                public void setId(int id) {

                    this.id = id;

                }


                public int getAge() {

                    return age;

                }


                public void setAge(int age) {

                    this.age = age;

                }


                // Info format: id|name|age

                public static Student buildStudent(String studentInfo) {

                    if (!studentInfo.matches("\\d+\\|\\w+\\|\\d+")) { throw new RuntimeException(

                        "The student information's format should be \"id|name|age\" without quote"); }


                    String[] infos = studentInfo.split("\\|");

                    int id = Integer.parseInt(infos[0]);

                    String name = infos[1].trim();

                    int age = Integer.parseInt(infos[2]);


                    return new Student(id, name, age);

                }


                @Override

                public int hashCode() {

                    return id;

                }


                @Override

                public boolean equals(Object obj) {

                    if (obj == null || obj.getClass() != this.getClass()) { return false; }

                    Student other = (Student) obj;

                    if (other.id == this.id) { return true; }

                    return false;

                }


                @Override

                public String toString() {

                    return String.format("ID:%d, Name:%s, Age:%d", id, name, age);

                }

            }


            // 使用TreeSet時(shí)需要的比較器

            class StudentComparator implements Comparator<Student>, Serializable {

                private static final long serialVersionUID = 1L;


                @Override

                public int compare(Student s1, Student s2) {

                    return s1.getId() - s2.getId();

                }

            }


            posted on 2011-05-25 12:17 逛奔的蝸牛 閱讀(3333) 評(píng)論(4)  編輯 收藏 引用 所屬分類: Java

            評(píng)論

            # re: Java:寫(xiě)了個(gè)學(xué)生管理系統(tǒng),以備期末之需 2011-06-09 17:09 6a209
            你去當(dāng)老師了么????還有期末???  回復(fù)  更多評(píng)論
              

            # re: Java:寫(xiě)了個(gè)學(xué)生管理系統(tǒng),以備期末之需 2012-09-08 18:54 SEO
            RuntimeException("此學(xué)生信息已經(jīng)存在"); }

              回復(fù)  更多評(píng)論
              

            # re: Java:寫(xiě)了個(gè)學(xué)生管理系統(tǒng),以備期末之需 2012-10-12 17:52 SEO
            buildStudent(String studentInfo)  回復(fù)  更多評(píng)論
              

            # re: Java:寫(xiě)了個(gè)學(xué)生管理系統(tǒng),以備期末之需 2015-03-01 18:12 s
            這個(gè)挺簡(jiǎn)單的
              回復(fù)  更多評(píng)論
              

            人妻精品久久久久中文字幕| 日韩美女18网站久久精品| 最新久久免费视频| 久久久久久极精品久久久| 91秦先生久久久久久久| 国产精品久久久久影院色 | 亚洲国产成人久久综合碰碰动漫3d | 天天综合久久一二三区| 国内精品久久久久久久久电影网| 日韩一区二区久久久久久| 色综合久久久久网| 国产精品午夜久久| 久久精品国产一区二区三区不卡| 狠狠综合久久综合中文88| 欧美精品一区二区久久 | 久久久久亚洲精品天堂久久久久久 | 国产激情久久久久影院小草 | 久久91精品国产91久久小草| 99久久精品午夜一区二区| 999久久久无码国产精品| 麻豆精品久久精品色综合| 成人a毛片久久免费播放| 久久精品无码一区二区日韩AV| 久久精品国产WWW456C0M| 伊人久久无码精品中文字幕| 久久精品国产亚洲av麻豆蜜芽| 久久久久久毛片免费播放| 青青青国产精品国产精品久久久久| www亚洲欲色成人久久精品| 四虎亚洲国产成人久久精品| 无码人妻久久一区二区三区| 久久综合久久综合久久| 亚洲国产成人久久综合区| 久久精品中文字幕无码绿巨人| 91久久精品国产91性色也| 久久精品亚洲AV久久久无码 | 亚洲乱亚洲乱淫久久| 中文成人无码精品久久久不卡 | 久久er国产精品免费观看2| 久久香蕉国产线看观看猫咪?v| 欧美va久久久噜噜噜久久|