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

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

实例要求:

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

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

文件操作类:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class FileOperate{
    private File file = null;
    public FileOperate(String pathName){
        this.file = new File(pathName);    
    }
    public boolean save(Object obj) throws Exception{
        ObjectOutputStream oos = null;
        boolean flag = false;//定义操作标志位
        try{
            oos = new ObjectOutputStream(new FileOutputStream(this.file));
            oos.writeObject(obj);
            flag = true;
        }catch(Exception e){
            throw e;// 有异常交给被调用处处理
        }finally{
            if(oos!=null){
                oos.close();
            }
        }
        return flag;
    }
    public Object load()throws Exception{
        Object obj = null;
        ObjectInputStream ois = null;
        try{
            ois = new ObjectInputStream(new FileInputStream(this.file));
            obj = ois.readObject();    //读取对象
        }catch(Exception e){
            throw e;
        }finally{
            if(ois!=null){
                ois.close();//关闭
            }            
        }
        return obj;
    }

}



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

import java.io.Serializable;
public class Person implements Serializable{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String toString(){
        return "姓名:"+this.name+";年龄:"+this.age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public String getName(){
        return this.name;
    }
    public int ageAge(){
        return this.age;
    }
}


修改操作类:
public class Operate{
    public static void add(){
        InputData input = new InputData();
        FileOperate fo = new FileOperate("d:\\test.per");
        String name = input.getString("请输入姓名:");
        int age = input.getInt("请输入年龄:","年龄必须是数字!");
        Person per = new Person(name,age);    //实例化Person对象
        try{
            fo.save(per);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("信息增加成功!");
    }
    public static void delete(){
        FileOperate fo = new FileOperate("d:\\test.per");
        try{
            fo.save(null);    //保存对象
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("信息删除成功!");
    }
    public static void update(){
        InputData input = new InputData();
        FileOperate fo = new FileOperate("d:\\test.per");
        Person per = null;
        try{
            per = (Person)fo.load();    //读取对象
        }catch(Exception e){
            e.printStackTrace();
        }
        String name = input.getString("请输入姓名(原姓名:"+per.getName()+")");
        int age = input.getInt("请输入年龄(原年龄:"+per.getAge()+")","年龄必须是数字");
        per = new Person(name,age);    //实例化Person对象
        try{
            fo.save(per);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("信息修改成功!");
    }    
    public static void find(){
        FileOperate fo = new FileOperate("d:\\test.per");
        Person per = null;
        try{
            per = (Person)fo.load();
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println(per);
    }
}





编写InputData类

import java.io.*;
import java.util.*;
import java.text.*;
public class InputData{
    private BufferedReader buf = null;
    public InputData(){
        this.buf = new BufferedReader(new InputStreamReader(System.in));
    }
    public String getString(String info){
        String temp = null;
        System.out.print(info);    //打印提示信息
        try{
            temp = this.buf.readLine();
        }catch(IOException e){
            e.printStackTrace();
        }
        return temp;
    }
    public int getInt(String info,String err){
        int temp = 0;
        String str = null;
        boolean flag = true;
        while(flag){
            str = this.getString(info);
            if(str.matches("^\\d+$")){//判断是否由数字组成
                temp = Integer.parseInt(str);
                flag = false;
            }else{
                System.out.println(err);
            }
        }
        return temp;
    }
    public float getFloat(String info,String err){
        float temp=0;
        String str = null;
        boolean flag = true;
        while(flag){
            str = this.getString(info);
            if(str.matches("^\\d+.?\\d+$")){
                temp = Float.parseFloat(str);
                flag = false;
            }else{
                System.out.println(err);
            }
        }
        return temp;    
    }
    public Date getDate(String info,String err){
        Date temp = null;
        String str = null;
        boolean flag = true;
        while(flag){
            str = this.getString(info);
            if(str.matches("^\\d{4}-\\d{2}-\\d{2}$")){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                try{
                    temp = sdf.parse(str);
                }catch(Exception e){}
                flag = false;
            }else{
                System.out.println(err);
            }
        }
        return temp;
    }
}



测试InputData类

import java.io.* ;
import java.util.* ;
public class TestInput{
    public static void main(String args[]) throws Exception{
        InputData input = new InputData() ;
        // float f = input.getFloat("请输入小数:","输入的不是小数,请重新输入!") ;
        // System.out.println("小数:" + f) ;
        Date d = input.getDate("请输入日期,格式为(yyyy-mm-dd):","输入的日期格式不正确,请重新输入") ;
        System.out.println("日期" + d) ;
    }
};




编写Menu菜单类

public class Menu{
    public Menu(){
        while(true){
            this.show() ;        // 无限制调用菜单的显示
        }
    }
    public void show(){
        System.out.println("===== Xxx系统 =====") ;
        System.out.println("    [1]、增加数据") ;
        System.out.println("    [2]、删除数据") ;
        System.out.println("    [3]、修改数据") ;
        System.out.println("    [4]、查看数据") ;
        System.out.println("    [0]、系统退出\n") ;
        InputData input = new InputData() ;
        int i = input.getInt("请选择:","请输入正确的选项!") ;
        switch(i){
            case 1:{
                Operate.add() ;        // 调用增加操作
                break ;
            }
            case 2:{
                Operate.delete() ;    // 调用删除操作
                break ;
            }
            case 3:{
                Operate.update() ;    // 调用更新操作
                break ;
            }
            case 4:{
                Operate.find() ;        // 调用查看操作
                break ;
            }
            case 0:{
                System.exit(1) ;        // 系统退出
                break ;
            }
            default:{
                System.out.println("请选择正确的操作!") ;
            }
        }
    }
};




客户端类
import java.io.* ;
public class ExecDemo03{
    public static void main(String args[]) throws Exception{
        new Menu() ;
    }
};



操作成功截图:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值