〖JAVA IO〗_实例操作—单人信息管理程序笔记

〖JAVA IO〗_实例操作—单人信息管理程序笔记

分类: Java
〖JAVA IO〗_实例操作—单人信息管理程序笔记

实例要求:

将之前的菜单程序进行扩充,要求:增加的时候可以增加一个人的完整信息,人的信息包括姓名和年龄。保存之后也可以修改此信息、删除此信息,查询此信息此代码该如何完成?
提示:使用对象序列化保存。

此时程序可以使用之前讲解过的几个类:InputData、Person、Operate、Menu。需要增加文件操作类,专门负责保存和读取文件的内容,以及修改Operate类,为其增加具体的操作。

文件操作类:
[java]  view plain copy print ?
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.ObjectInputStream;  
  5. import java.io.ObjectOutputStream;  
  6. public class FileOperate{  
  7.     private File file = null;  
  8.     public FileOperate(String pathName){  
  9.         this.file = new File(pathName);      
  10.     }  
  11.     public boolean save(Object obj) throws Exception{  
  12.         ObjectOutputStream oos = null;  
  13.         boolean flag = false;//定义操作标志位  
  14.         try{  
  15.             oos = new ObjectOutputStream(new FileOutputStream(this.file));  
  16.             oos.writeObject(obj);  
  17.             flag = true;  
  18.         }catch(Exception e){  
  19.             throw e;// 有异常交给被调用处处理  
  20.         }finally{  
  21.             if(oos!=null){  
  22.                 oos.close();  
  23.             }  
  24.         }  
  25.         return flag;  
  26.     }  
  27.     public Object load()throws Exception{  
  28.         Object obj = null;  
  29.         ObjectInputStream ois = null;  
  30.         try{  
  31.             ois = new ObjectInputStream(new FileInputStream(this.file));  
  32.             obj = ois.readObject();    //读取对象  
  33.         }catch(Exception e){  
  34.             throw e;  
  35.         }finally{  
  36.             if(ois!=null){  
  37.                 ois.close();//关闭  
  38.             }              
  39.         }  
  40.         return obj;  
  41.     }  
  42.   
  43. }  



操作是的人员信息,所以一定要定义Person类。

[java]  view plain copy print ?
  1. import java.io.Serializable;  
  2. public class Person implements Serializable{  
  3.     private String name;  
  4.     private int age;  
  5.     public Person(String name,int age){  
  6.         this.name = name;  
  7.         this.age = age;  
  8.     }  
  9.     public String toString(){  
  10.         return "姓名:"+this.name+";年龄:"+this.age;  
  11.     }  
  12.     public void setName(String name){  
  13.         this.name = name;  
  14.     }  
  15.     public void setAge(int age){  
  16.         this.age = age;  
  17.     }  
  18.     public String getName(){  
  19.         return this.name;  
  20.     }  
  21.     public int ageAge(){  
  22.         return this.age;  
  23.     }  
  24. }  


修改操作类:
[java]  view plain copy print ?
  1. public class Operate{  
  2.     public static void add(){  
  3.         InputData input = new InputData();  
  4.         FileOperate fo = new FileOperate("d:\\test.per");  
  5.         String name = input.getString("请输入姓名:");  
  6.         int age = input.getInt("请输入年龄:","年龄必须是数字!");  
  7.         Person per = new Person(name,age);    //实例化Person对象  
  8.         try{  
  9.             fo.save(per);  
  10.         }catch(Exception e){  
  11.             e.printStackTrace();  
  12.         }  
  13.         System.out.println("信息增加成功!");  
  14.     }  
  15.     public static void delete(){  
  16.         FileOperate fo = new FileOperate("d:\\test.per");  
  17.         try{  
  18.             fo.save(null);    //保存对象  
  19.         }catch(Exception e){  
  20.             e.printStackTrace();  
  21.         }  
  22.         System.out.println("信息删除成功!");  
  23.     }  
  24.     public static void update(){  
  25.         InputData input = new InputData();  
  26.         FileOperate fo = new FileOperate("d:\\test.per");  
  27.         Person per = null;  
  28.         try{  
  29.             per = (Person)fo.load();    //读取对象  
  30.         }catch(Exception e){  
  31.             e.printStackTrace();  
  32.         }  
  33.         String name = input.getString("请输入姓名(原姓名:"+per.getName()+")");  
  34.         int age = input.getInt("请输入年龄(原年龄:"+per.getAge()+")","年龄必须是数字");  
  35.         per = new Person(name,age);    //实例化Person对象  
  36.         try{  
  37.             fo.save(per);  
  38.         }catch(Exception e){  
  39.             e.printStackTrace();  
  40.         }  
  41.         System.out.println("信息修改成功!");  
  42.     }      
  43.     public static void find(){  
  44.         FileOperate fo = new FileOperate("d:\\test.per");  
  45.         Person per = null;  
  46.         try{  
  47.             per = (Person)fo.load();  
  48.         }catch(Exception e){  
  49.             e.printStackTrace();  
  50.         }  
  51.         System.out.println(per);  
  52.     }  
  53. }  





编写InputData类

[java]  view plain copy print ?
  1. import java.io.*;  
  2. import java.util.*;  
  3. import java.text.*;  
  4. public class InputData{  
  5.     private BufferedReader buf = null;  
  6.     public InputData(){  
  7.         this.buf = new BufferedReader(new InputStreamReader(System.in));  
  8.     }  
  9.     public String getString(String info){  
  10.         String temp = null;  
  11.         System.out.print(info);    //打印提示信息  
  12.         try{  
  13.             temp = this.buf.readLine();  
  14.         }catch(IOException e){  
  15.             e.printStackTrace();  
  16.         }  
  17.         return temp;  
  18.     }  
  19.     public int getInt(String info,String err){  
  20.         int temp = 0;  
  21.         String str = null;  
  22.         boolean flag = true;  
  23.         while(flag){  
  24.             str = this.getString(info);  
  25.             if(str.matches("^\\d+$")){//判断是否由数字组成  
  26.                 temp = Integer.parseInt(str);  
  27.                 flag = false;  
  28.             }else{  
  29.                 System.out.println(err);  
  30.             }  
  31.         }  
  32.         return temp;  
  33.     }  
  34.     public float getFloat(String info,String err){  
  35.         float temp=0;  
  36.         String str = null;  
  37.         boolean flag = true;  
  38.         while(flag){  
  39.             str = this.getString(info);  
  40.             if(str.matches("^\\d+.?\\d+$")){  
  41.                 temp = Float.parseFloat(str);  
  42.                 flag = false;  
  43.             }else{  
  44.                 System.out.println(err);  
  45.             }  
  46.         }  
  47.         return temp;      
  48.     }  
  49.     public Date getDate(String info,String err){  
  50.         Date temp = null;  
  51.         String str = null;  
  52.         boolean flag = true;  
  53.         while(flag){  
  54.             str = this.getString(info);  
  55.             if(str.matches("^\\d{4}-\\d{2}-\\d{2}$")){  
  56.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  57.                 try{  
  58.                     temp = sdf.parse(str);  
  59.                 }catch(Exception e){}  
  60.                 flag = false;  
  61.             }else{  
  62.                 System.out.println(err);  
  63.             }  
  64.         }  
  65.         return temp;  
  66.     }  
  67. }  



测试InputData类

[java]  view plain copy print ?
  1. import java.io.* ;  
  2. import java.util.* ;  
  3. public class TestInput{  
  4.     public static void main(String args[]) throws Exception{  
  5.         InputData input = new InputData() ;  
  6.         // float f = input.getFloat("请输入小数:","输入的不是小数,请重新输入!") ;  
  7.         // System.out.println("小数:" + f) ;  
  8.         Date d = input.getDate("请输入日期,格式为(yyyy-mm-dd):","输入的日期格式不正确,请重新输入") ;  
  9.         System.out.println("日期" + d) ;  
  10.     }  
  11. };  




编写Menu菜单类

[java]  view plain copy print ?
  1. public class Menu{  
  2.     public Menu(){  
  3.         while(true){  
  4.             this.show() ;        // 无限制调用菜单的显示  
  5.         }  
  6.     }  
  7.     public void show(){  
  8.         System.out.println("===== Xxx系统 =====") ;  
  9.         System.out.println("    [1]、增加数据") ;  
  10.         System.out.println("    [2]、删除数据") ;  
  11.         System.out.println("    [3]、修改数据") ;  
  12.         System.out.println("    [4]、查看数据") ;  
  13.         System.out.println("    [0]、系统退出\n") ;  
  14.         InputData input = new InputData() ;  
  15.         int i = input.getInt("请选择:","请输入正确的选项!") ;  
  16.         switch(i){  
  17.             case 1:{  
  18.                 Operate.add() ;        // 调用增加操作  
  19.                 break ;  
  20.             }  
  21.             case 2:{  
  22.                 Operate.delete() ;    // 调用删除操作  
  23.                 break ;  
  24.             }  
  25.             case 3:{  
  26.                 Operate.update() ;    // 调用更新操作  
  27.                 break ;  
  28.             }  
  29.             case 4:{  
  30.                 Operate.find() ;        // 调用查看操作  
  31.                 break ;  
  32.             }  
  33.             case 0:{  
  34.                 System.exit(1) ;        // 系统退出  
  35.                 break ;  
  36.             }  
  37.             default:{  
  38.                 System.out.println("请选择正确的操作!") ;  
  39.             }  
  40.         }  
  41.     }  
  42. };  




客户端类
[java]  view plain copy print ?
  1. import java.io.* ;  
  2. public class ExecDemo03{  
  3.     public static void main(String args[]) throws Exception{  
  4.         new Menu() ;  
  5.     }  
  6. };  


操作成功截图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值