分类: Java
〖JAVA IO〗_实例操作—单人信息管理程序笔记
实例要求:
将之前的菜单程序进行扩充,要求:增加的时候可以增加一个人的完整信息,人的信息包括姓名和年龄。保存之后也可以修改此信息、删除此信息,查询此信息此代码该如何完成?
提示:使用对象序列化保存。
此时程序可以使用之前讲解过的几个类:InputData、Person、Operate、Menu。需要增加文件操作类,专门负责保存和读取文件的内容,以及修改Operate类,为其增加具体的操作。
文件操作类:
操作是的人员信息,所以一定要定义Person类。
修改操作类:
编写InputData类
测试InputData类
编写Menu菜单类
客户端类
实例要求:
将之前的菜单程序进行扩充,要求:增加的时候可以增加一个人的完整信息,人的信息包括姓名和年龄。保存之后也可以修改此信息、删除此信息,查询此信息此代码该如何完成?
提示:使用对象序列化保存。
此时程序可以使用之前讲解过的几个类: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() ;
- }
- };
操作成功截图: