Java IO ——实例操作:单人信息管理程序

数据输入类:

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+{1}quot;)){	// 判断是否由数字组成
				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+{1}quot;)){	// 判断是否由数字组成
				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}{1}quot;)){	// 判断是否由数字组成
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
				try{
					temp = sdf.parse(str) ;	// 将字符串变为Date型数据
				}catch(Exception e){}
				flag = false ;	// 结束循环
			}else{
				System.out.println(err) ;	// 打印错误信息
			}
		}
		return temp ;
	}
};
菜单类:
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("请选择正确的操作!") ;
			}
		}
	}
};
操作类:
public class Operate{
	public static void add(){	// 增加操作
		System.out.println("** 选择的是增加操作") ;
	}
	public static void delete(){	// 删除操作
		System.out.println("** 选择的是删除操作") ;
	}
	public static void update(){	// 更新操作
		System.out.println("** 选择的是更新操作") ;
	}
	public static void find(){	// 查看操作
		System.out.println("** 选择的是查看操作") ;
	}
};
主方法类:

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


本实例主要采用的知识

1、类的设计

2、对象序列化

3、输入数据

具体内容


文件操作类:

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 ;		// 定义name属性	
	private int age ;			// 定义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 getAge(){
		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) ;
	}
};
总结:

只要类进行了合理的划分,则在修改的时候只需要修改局部即可,这些经验是代码的反复开发中才会慢慢形成的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值