学生信息管理系统 (直接在命令行 操作)
总体功能需求(利用集合类ArrayList存储对象,序列化写入到文件 再反序列化打印到控制台)1. 录入学生信息 (初始化)
     在系统中不存在任何对象时,实现该功能。具体功能为:
      (1:检测文件系统是否存在相关文件;
      (2:若不存在相关文件,则要求用户录入学生信息,并序列化到文件;
      (3:若已存在相关文件,则反序列化读取到程序中。
       注意:学生纪录不允许重复,判断的关键字为学号
2. 添加学生记录
   往已有的学生纪录添加新的学生纪录。具体功能为:
     (1:要求用户从键盘输入一个或多个学生信息;
     (2:输入完成后 序列化 到文件。
    注意:学生纪录不允许重复,判断的关键字为学号
3. 删除学生记录
   在已有的学生纪录中删除一个或多个学生纪录。具体功能为:
   (1:要求用户输入欲删除的学生的学号;
   (2:删除学生记录;
   (3:更新到文件。
4. 修改学生记录
   在已有的学生记录中修改某学生的相关信息。具体功能为:
    (1:要求用户输入欲修改的学生的学号;
    (2:判断该学生是否存在于记录中;
    (3:若学生记录存在,提供修改学生信息功能。
5. 查看学生记录
   查看单个学生记录。具体功能为:
    (1:输入学生学号;
2:若该学生存在,打印该学生相关信息。
   查看多个学生记录。具体功能为:
     (1:打印出所有学生的记录;
     (2:能分别按学号、姓名、性别、年龄和分数进行排序。
6. 退出系统 退出系统。
      

解决方案 »

  1.   

    先写一个Pojo类必须是实现序列化的
    public class Pojo implements Serializable{
    ...
    }----------------华丽的分割线---------------------------
    定义一个泛型的集合list
    Collection<Pojo> list=new ArrayList<Pojo>();用Object输出流输出对象list,输出到哪里看你自己的需求,可以是文件,可以是socket传输
    ObjectOutputStream.writeObject(list);----------------华丽的分割线---------------------------
    用Object输入流读取对象,从哪里读看你自己的需求,可以是从文件,可以是socket传输
    读到的对象为Object类型的,强转为Collection
    Collection<Pojo> list =(Collection<Pojo>)ObjectInputStream.readObject();输出到控制台
    for(Pojo p:list){
        System.out.println("学号:"+p.getId());
        System.out.println("姓名:"+p.getName());
        ...
        System.out.println("----------华丽的分割线-----------");
    }
      

  2.   

    // 写入文件 实现序列化
    public static void writeToFile(ArrayList<Student> list){
    File dstFile = new File("D:\\studentInfo.obj");
    for(Student student : list) {
    try {
    if(!dstFile.exists()){
    System.out.println(" 创建文件中......");
    dstFile.createNewFile();
    }
    ObjectOutputStream oos = new ObjectOutputStream(
                     new FileOutputStream(dstFile,true));
    oos.writeObject(student);
    oos.close();
    }catch (Exception e){
    e.printStackTrace();
    }
    }
    }// 读取数据 实现反序列化
    public static ArrayList<Student> readFromFile(String fileName) {
    ArrayList<Student> list = new ArrayList<Student>();
    Student student = new Student();
    File dstFile = new File(fileName);
    try {
    ObjectInputStream ois = new ObjectInputStream(
                    new FileInputStream(dstFile));
    student = (Student)ois.readObject();
    list.add(student);
    StudentProcess.display(list);
    ois.close();
    } catch(ClassNotFoundException  e){
    e.printStackTrace();
    } catch (IOException e) {
    System.out.println("找不到文件");
    e.printStackTrace();
    } catch(Exception e){
    e.printStackTrace();
    }
    return list;
    }
      

  3.   

    你写入的肯定是一个集合啊,照你这么写的话写了无数个student对象进去,但是你反序列化的时候怎么弄?
    读出来的是一个对象,你知道自己序列化写入文件的时候的每个student对象的大小么?要是知道还可以反序列成不同的student对象,但是你不觉得这是吃饱了没事做么,为什么不用集合?java有集合给你用你不用,嵌入式用c/c++开发项目你想用还没的用呢,都得自己实现