• 第12次作业


    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
  • 相关阅读:
    USART串口通信实验
    EXTI 外部中断
    NVIC中断优先级管理
    实验1 跑马灯实验
    redis集群部署---一台主机
    zookeeper服务启动报错---Error contacting service. It is probably not running.
    shell脚本学习笔记
    最短路径算法——Floyd算法
    一篇文章学懂Shell脚本(摘抄)
    VIM空格和TAB转换
  • 原文地址:https://www.cnblogs.com/yellower/p/8012089.html
Copyright © 2020-2023  润新知