(Java)单人信息管理程序

对前一个菜单程序进行扩充,要求增加一个人的完整信息,人的信息包括姓名和年龄。保存后也可以修改、删除、查询此信息。
可以使用对象序列化保存,需要增加文件操作类,专门负责保存和读取文件的内容,并修改 Operate 类,为其增加具体的操作:
在这里插入图片描述

一、增加文件操作类

package Chapter_9;

import java.io.*;

//此类专门用于保存和读取对象
public class FileOperate {
    private File file = null;//定义一个文件对象
    public FileOperate(String pathName){//通过构造方法传递文件路径
        this.file = new File(pathName);//实例化File对象
    }
    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.*;

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 String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

三、操作类

package Chapter_9;

public class Operate {
    public static void add(){//增加数据操作
        InputData input = new InputData();//实例化输入数据对象
        FileOperate fo = new FileOperate("D://test.txt");
        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.txt");
        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.txt");
        Person per = null;
        try{
            per = (Person)fo.load();//读取数据
        }catch (Exception e1){
            e1.printStackTrace();
        }
        String name = input.getString("请输入新的姓名(原姓名:" + per.getName() + "):");
        int age = input.getInt("请输入是新的年龄(原年龄:" +
                per.getAge() + ")","年龄必须是数字!");
        per = new Person(name,age);//重新实例化对象
        try{
            fo.save(per);//重新保存对象
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("信息更新成功");
    }
    public static void find(){
        FileOperate fo = new FileOperate("D:\\test.txt");
        Person per = null;
        try{
            per = (Person)fo.load();//读取对象
        }catch (Exception e1){
            e1.printStackTrace();
        }
        System.out.println(per);
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南淮北安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值