〖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() ;
}
};
操作成功截图: