package train;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
class Person implements Serializable{//实现Serializable接口表示Person类可以进行序列化
private String name ;
private int age ;
public Person(String name,int age){
this.setName(name);
this.setAge(age);
}
public String toString(){//覆写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 ;
}
}
文件操作类,在指定文件实现对象序列化,保存和得到对象
class FileOp{//文件操作类,在指定文件内,进行对象的序列化
private File file;
public FileOp(String path){//构造方法
this.file=new File(path);//按照传入的路径实例化文件对象
}
public void save(Object obj)throws Exception{//保存
ObjectOutputStream oos=null;//对象输入流
try{
oos=new ObjectOutputStream(new FileOutputStream(this.file));//实例化对象输入流的对象
oos.writeObject(obj);//在指定文件内将对象序列化
}catch(Exception e){
throw e;
}finally{
if(oos!=null){//判断对象输出流对象是否为空,若为空就不存在关闭文件的问题了
oos.close();
}
}
}
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;
}
}
public static void add(){//增加
Scanner s=new Scanner(System.in);//输入
FileOp f=new FileOp("d:"+File.separator+"person.txt");
System.out.println("请输入姓名:");
String name=s.nextLine();
System.out.println("请输入年龄:");
int age=s.nextInt();
Person p=new Person(name,age);
try{
f.save(p);//序列化保存对象
}catch(Exception e){
e.printStackTrace();
}
System.out.println("保存信息成功!");
}
public static void delete(){
FileOp f=new FileOp("d:"+File.separator+"person.txt");
try{
f.save(null);//直接保存空对象就是删除
}catch(Exception e){
e.printStackTrace();
}
System.out.println("删除成功!");
}
public static void change(){
Scanner s=new Scanner(System.in);
FileOp f=new FileOp("d:"+File.separator+"person.txt");
Person p=null;
try{
p=(Person) f.load();//反序列化读出对象
}catch(Exception e){
e.printStackTrace();
}
System.out.println("原来的姓名为:"+p.getName()+",请输入新的姓名:");
String newName=s.nextLine();
System.out.println("原来的年龄为:"+p.getAge()+",请输入新的年龄:");
int newAge=s.nextInt();
Person q=new(newName,newAge);
try {
f.save(q);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("信息修改成功!");
System.out.println("修改之后的信息为:"+q);
}
public static void find(){
Scanner s=new Scanner(System.in);
System.out.println("请输入查找人员的姓名:");
String name=s.nextLine();
FileOp f=new FileOp("d:"+File.separator+"person.txt");
Person p=null;
try {
p=(Person) f.load();
} catch (Exception e) {
e.printStackTrace();
}
if(p.getName().equals(name)){//验证名字
System.out.println("查找成功:\n此人信息为:"+p);
}else{
System.out.println("查找失败:不包含"+name+"的信息");
}
}
}
class PersonMenu{
public PersonMenu(){//构造方法
while(true){//无限循环
this.show();
}
}
public void show(){//菜单显示
System.out.println("========单人信息管理系统========");
System.out.println("1.增加");
System.out.println("2.删除");
System.out.println("3.修改");
System.out.println("4.查找");
System.out.println("0.退出系统");
Scanner s=new Scanner(System.in);
System.out.println("请输入您所需操作的序号:");
int n=s.nextInt();
switch(n){//分支
case 1:{
Operate.add();
break;
}
case 2:{Operate.delete();
break;
}
case 3:{Operate.change();
break;
}
case 4:{Operate.find();
break;
}
case 0:{
System.exit(1);//退出系统
break;
}
default:{
System.out.println("请输入正确的操作序号:");
}
}
}
}
public class train2{//主加载类
public static void main(String args[]){
new PersonMenu();//实例化菜单对象
}
}