单人信息管理程序

1 文件操作类


package cn.lyun.java.io.pim;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import javax.imageio.stream.FileImageInputStream; /* * 此类专门用于保存和读取对象 * 因为是对对象的读写,所以使用了对象的序列化进行操作 * 所以在Person类时要实现Serializable接口 * */ 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 falg = false; //定义标志为 try { oos = new ObjectOutputStream(new FileOutputStream(this.file)); //实例化对象输出流 oos.writeObject(obj); //对象输出流 falg = true; //改变标志位 } catch (Exception e) { throw e; //异常抛出 } finally //因为是资源处理 所以无论是否有异常都应该关闭 { if (oos!= null) { //判断对象输出流对象是否被实例化 oos.close(); //关闭 } } return falg; } 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; } }

  

数据操作类

package cn.lyun.java.io.pim;

import java.io.File;
import java.io.Serializable;

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) {
			// TODO: handle exception
			e.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) {
			// TODO: handle exception
			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) {
			// TODO: handle exception
			e.printStackTrace();
		}
		System.out.println(per);
	}
	

  将数据保存到文档

package cn.lyun.java.io.pim;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Date;
import java.text.SimpleDateFormat;

public class InputData 
{
	private BufferedReader buf = null;
	public InputData()
	{                                                    //实例化BufferedReader对象,
		                                                 //当后面实例化的时候 就可以直接进行输入操作传值了
		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 (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return temp;
		
	}
	public int getInt(String info,String err)          //当调用此方法时 会给两个参数,一个是
													   //调用此方法时的两个参数
	{
		int temp = 0;                          //定义一个temp 用作将input接受进来的字符串进行转换成数字
		String str = null;                     //用作接受
		boolean flag = true;
		while (flag) {
			str = this.getString(info);        //此处经过getString()方法 会返回一个temp的值 是从缓存区中读取出来的 即我们自己输入的东西
			if (str.matches("^\\d+$")) {       //判断是不是数字
				temp = Integer.parseInt(str);  //将字符串转换成数字
				flag = false;                  //改变标识符
			}else {
				System.out.println(err);
			}
		}
	return temp;	                             //     返回一个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 = (Date) sdf.parse(str) ;	// 将字符串变为Date型数据
				}catch(Exception e){}
				flag = false ;	// 结束循环
			}else{
				System.out.println(err) ;	// 打印错误信息
			}
		}
		return temp ;
	}
}

  Person类

package cn.lyun.java.io.pim;

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 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 cn.lyun.java.io.pim;
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("请选择正确的操作!") ;
			}
		}
	}
};

  

 主方法

package cn.lyun.java.io.pim;

public class ExecDemo01{
	public static void main(String args[]) throws Exception{
		new Menu() ;
	}
};

  

转载于:https://www.cnblogs.com/ivan999/p/10764997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值