第12次作业

你说的曾经没有我的故事 提交于 2019-11-27 20:35:54

1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。

2. 面向系统综合设计-图书馆管理系统或购物车

使用流与文件改造你的图书馆管理系统或购物车。

2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何?

答:
用流与文件改造系统的主要步骤

  • 静态初始化块初始图书馆内的图书的数据。
  • 将初始化后的数据使用对象流ObjectOutputStream写入文件Book.data进行保存(用户模块也用类似的方式进行操作)。
  • 在图书馆模块中写一个方法,用于保存修改后文件数据,操作过程中数据的修改都将能进行保存(用户模块也要写这个方法)。

文件中数据的格式:用对象流写入文件是以十六进制保存的。

2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类?

接口InputStreamOutputStreamSerializable
ObjectInputStreamObjectOutputStream、文件类File
原因:不使用字节字符流,而使用对象流,是为了可以将一整个对象的信息都存入文件。使用对象流写入或读取对象时,是需要对象序列化的,这时候就要用到Serializable接口。

2.3 截图读写文件相关代码。关键行需要加注释。

图书馆初始化

        books.put(new Book("红",100,"文学"), 33);
        books.put(new Book("橙",101,"艺术"), 44);
        books.put(new Book("黄",102,"经济"), 66);
        books.put(new Book("绿",103,"娱乐"), 11);
        books.put(new Book("青",130,"杂志"), 22);
        books.put(new Book("蓝",140,"报纸"), 55);
        books.put(new Book("紫",300,"哲学"), 44);
        //使用ObjectOutputStream类将这些图书信息写入文件且保存
        File file = new File("Books.data");
        if(!file.exists()){//文件不存在时,创建文件,并将图书信息写入文件
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        Iterator<Map.Entry<Book, Integer>> m = books.entrySet().iterator();
        while(m.hasNext()){
            Map.Entry<Book, Integer> e = m.next();
                oos.writeObject(e.getKey());
                oos.writeObject(e.getValue());
        }
        oos.close();
        }
        else{//文件存在时,直接从文件中读取数据
            try{
                System.out.println("hhhhh");
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            Book b = (Book)ois.readObject();
            while(b!=null){
                int num = (int)ois.readObject();
                books.put(b,num);
            
            }
            ois.close();
            }catch(Exception e){//使用对象流读取到文件尾的时候会提示EOFException异常,所以进行try/catch处理
            }
        }
    

用户初始化

    public static void initializeAdministrator( ) throws ClassNotFoundException, FileNotFoundException, IOException{
        userSet.add(new Administrator("管理员", 0, "0"));
        userSet.add(new Student("yellow", 00000, "huang"));
        userSet.add(new Student("red", 12345, "hong"));
        File file = new File("Users.data");
        if(!file.exists()){ //文件不存在时,将用户信息写入文件
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        for(User u:userSet)
            oos.writeObject(u);
        oos.close();
        }
        else{//文件存在时,直接读取文件内信息
            ObjectInputStream ois;
            try {
                ois = new ObjectInputStream(new FileInputStream(file));
                User u=(User)ois.readObject();
                while(u!=null){
                    if(u instanceof User)
                    userSet.add(u);
                     u=(User)ois.readObject();
                }
                ois.close();
            }  catch (Exception e) {//使用对象流读取到文件尾的时候会提示EOFException异常,所以要进行try/catch处理
            }
        }
    }

修改后的图书信息的保存

    private static void saveBookData() throws IOException{//书籍信息改动之后进行的保存
        File file = new File("Books.data");
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        Iterator<Map.Entry<Book, Integer>> m = books.entrySet().iterator();
        while(m.hasNext()){
            Map.Entry<Book, Integer> e = m.next();
                oos.writeObject(e.getKey());
                oos.writeObject(e.getValue());
        }
        oos.close();
    }

修改后的用户信息的保存

    public static void saveUser() throws IOException{//用户信息改动之后进行的保存
        File file = new File("Users.data");
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        User u;
        for(User u1:userSet){
                oos.writeObject(u1);
        }
        oos.close();
    }

3. 代码量统计

3.1 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次 行数 新增行数 文件数 新增文件数
1 115 115 17 17
2 421 306 24 7
3 698 277 30 6
5 1085 387 38 8
6 1497 412 48 10
7 2033 536 57 9
8 2265 232 60 3
9 2728 522 65 5
10 3360 632 73 8
11 3958 598 83 10
12 4435 477 90 7
13 4802 367 96 6
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!