import java.io.*;
import java.util.*;
public class Operate {
private List<Person> list;
public Operate(){
this.list=new ArrayList<>();
}
public File dhb =new File("d:/智能电话本.txt");
/**
* 实现电话本存储功能
*/
public void cunchu(List p){
ObjectOutputStream oos =null;
try {
oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(dhb)));
oos.writeObject(p);
oos.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (oos!=null){
oos.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 实现电话本的读取功能
*/
public void duqv(){
File a = new File("d:/智能电话本.txt");
ObjectInputStream ois= null;
try {
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(a)));
List list2 = (List) ois.readObject();
System.out.println("执行读取功能");
list.addAll(list2);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(ois!=null){
ois.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* addLogic() 用户添加记录业务逻辑控制
*/
public void addLogic(){
Menu menu = new Menu();
TelNoteRegex telNoteRegex = new TelNoteRegex();
while (true){
menu.addMenu();
int input = telNoteRegex.menuItemValidate(1,3);
switch (input){
case 1:
this.addOperation();
break;
case 2:
this.showAll();
break;
case 3:
return;
}
}
}
/**
* searchLogic() 用户查询记录业务逻辑控制
*/
public void serchLogic(){
Menu menu = new Menu();
TelNoteRegex telNoteRegex = new TelNoteRegex();
while (true){
menu.searchMenu();
int input = telNoteRegex.menuItemValidate(1,7);
switch (input){
case 1:
this.searchByName();
break;
case 2:
this.searchByAge();
break;
case 3:
this.searchBySex();
break;
case 4:
this.searchByTelNum();
break;
case 5:
this.searchByAdd();
break;
case 6:
this.showAll();
break;
case 7:
return;
}
}
}
/**
* modifyLogic() 修改记录业务逻辑控制
*/
public void modifyLogic(){
Menu menu = new Menu();
TelNoteRegex telNoteRegex=new TelNoteRegex();
while (true){
menu.modifyMenu();
int input = telNoteRegex.menuItemValidate(1,3);
switch (input){
case 1:
this.showAll();
break;
case 2:
this.modifyOperation();
break;
case 3:
return;
}
}
}
/**
* deleteLogic() 删除记录业务逻辑控制
*/
public void deleteLogic(){
Menu menu = new Menu();
TelNoteRegex telNoteRegex=new TelNoteRegex();
while (true) {
menu.deleteMenu();
int input = telNoteRegex.menuItemValidate(1,4);
switch (input){
case 1:
this.showAll();
break;
case 2:
this.deleteOperation();
break;
case 3:
this.deleteAllOperation();
break;
case 4:return;
}
}
}
/**
* orderLogic() 排序记录业务逻辑控制
*/
public void orderLogic(){
Menu menu = new Menu();
TelNoteRegex telNoteRegex=new TelNoteRegex();
while (true){
menu.orderMenu();
int input = telNoteRegex.menuItemValidate(1,5);
switch (input){
case 1:
this.orderName();
break;
case 2:
this.orderAge();
break;
case 3:
this.orderSex();
break;
case 4:
this.showAll();
break;
case 5:
return;
}
}
}
/**
* addOperation () 添加新记录信息
*/
public void addOperation(){
TelNoteRegex telNoteRegex= new TelNoteRegex();
String name = telNoteRegex.nameValidate();
String age = telNoteRegex.ageValidate();
String sex = telNoteRegex.sexValidate();
String telnum = telNoteRegex.telNumValidate();
String address = telNoteRegex.addressValidate();
Person person = new Person(name,age,sex,telnum,address);
list.add(person);
person.setId(this.list.size());
cunchu(this.list);
}
/**
* showAll() 查询全部记录
*/
public void showAll(){
int size = list.size();
if (size==0){
System.out.println("没有任何记录");
}else {
for (Person per:list){
System.out.println(per);
}
}
}
/**
* searchByName() 按姓名查询记录
*/
public void searchByName(){
if (list.size()==0){
System.out.println("无任何记录");
return;
}
TelNoteRegex telNoteRegex= new TelNoteRegex();
String name = telNoteRegex.nameValidate();
boolean flag = true;
for(int i = 0 ;i<list.size();i++){
if (name.equals(list.get(i).getName())){
System.out.println(list.get(i));
flag=false;
}
}
if (flag){
System.out.println("没有该记录");
}
}
/**
* searchByAge() 按年龄查询记录
*/
public void searchByAge(){
if (list.size()==0){
System.out.println("无任何记录");
return;
}
TelNoteRegex telNoteRegex= new TelNoteRegex();
String age = telNoteRegex.ageValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (age.equals(list.get(i).getAge())){
System.out.println(list.get(i));
flag=false;
}
}
if (flag){
System.out.println("没有此纪录");
}
}
/**
* searchBySex() 按性别查询记录
*/
public void searchBySex(){
if (list.size()==0){
System.out.println("无任何记录");
return;
}
TelNoteRegex telNoteRegex= new TelNoteRegex();
String sex = telNoteRegex.sexValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (sex.equals(list.get(i).getSex())){
System.out.println(list.get(i));
flag=false;
}
}
if (flag){
System.out.println("没有此纪录");
}
}
/**
* searchByTelNum() 按电话号码查询记录
*/
public void searchByTelNum(){
if (list.size()==0){
System.out.println("无任何记录");
return;
}
TelNoteRegex telNoteRegex= new TelNoteRegex();
String telnum = telNoteRegex.telNumValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (telnum.equals(list.get(i).getTelnum())){
System.out.println(list.get(i));
flag=false;
}
}
if (flag){
System.out.println("没有此纪录");
}
}
/**
* searchByAdd() 按地址查询记录
*/
public void searchByAdd(){
if (list.size()==0){
System.out.println("无任何记录");
return;
}
TelNoteRegex telNoteRegex= new TelNoteRegex();
String address = telNoteRegex.addressValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (address.equals(list.get(i).getAddress())){
System.out.println(list.get(i));
flag=false;
}
}
if (flag){
System.out.println("没有此纪录");
}
}
/**
* modifyOperation() 修改指定记录
*/
public void modifyOperation(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
Menu menu = new Menu();
if (list.size()==0){
System.out.println("当前无任何记录");
return;
}
System.out.println("请输入您想修改的序号:");
int itnum = telNoteRegex.menuItemValidate(1,this.list.size());
System.out.println("即将修改的数据如下:");
System.out.println(list.get(itnum-1));
menu.subModifyMenu();
int input2 = telNoteRegex.menuItemValidate(1,6);
while (true){
switch (input2){
case 1:
String name = telNoteRegex.nameValidate();
this.list.get(itnum-1).setName(name);
System.out.println("记录修改成功");
System.out.println("当前数据为:"+list.get(itnum-1));
cunchu(this.list);
return;
case 2:
String age = telNoteRegex.ageValidate();
this.list.get(itnum-1).setAge(age);
System.out.println("记录修改成功");
System.out.println("当前数据为:"+list.get(itnum-1));
cunchu(this.list);
return;
case 3:
String sex = telNoteRegex.sexValidate();
this.list.get(itnum-1).setSex(sex);
System.out.println("记录修改成功");
System.out.println("当前数据为:"+list.get(itnum-1));
cunchu(this.list);
return;
case 4:
String telnum = telNoteRegex.telNumValidate();
this.list.get(itnum-1).setTelnum(telnum);
System.out.println("记录修改成功");
System.out.println("当前数据为:"+list.get(itnum-1));
cunchu(this.list);
return;
case 5:
String adress = telNoteRegex.addressValidate();
this.list.get(itnum-1).setAddress(adress);
System.out.println("记录修改成功");
System.out.println("当前数据为:"+list.get(itnum-1));
cunchu(this.list);
return;
case 6:return;
}
}
}
/**
* deleteOperation() 删除指定记录
*/
public void deleteOperation(){
TelNoteRegex telNoteRegex=new TelNoteRegex();
Scanner scanner=new Scanner(System.in);
if(this.list.size()==0){
System.out.println("当前无任何记录!");
return;
}
System.out.println("请输入您想删除的记录序号:");
int itnum = telNoteRegex.menuItemValidate(1,this.list.size());
System.out.println("即将删除如下数据:");
System.out.println(this.list.get(itnum-1));
System.out.println("是否确认删除?");
String input = scanner.nextLine();
if (input.equals("是")){
this.list.remove(itnum-1);
for (int i = 0;i<list.size();i++){
list.get(i).setId(i+1);
}
System.out.println("数据已成功删除!");
cunchu(this.list);
return;
}else {
System.out.println("已取消删除");
cunchu(this.list);
return;
}
}
/**
* deleteAllOperation() 删除全部记录
*/
public void deleteAllOperation(){
if (this.list.size()==0){
System.out.println("当前无任何记录!");
return;
}
Scanner scanner=new Scanner(System.in);
System.out.println("即将删除全部记录,是否继续?");
String input = scanner.nextLine();
if (input.equals("是")){
this.list.clear();
System.out.println("数据已全部删除");
cunchu(this.list);
return;
}else {
System.out.println("已取消删除");
cunchu(this.list);
return;
}
}
/**
*orderName() 按用户姓名排序记录
*/
public void orderName(){
if (this.list.size()==0){
System.out.println("当前无任何记录!");
return;
}
Collections.sort(this.list, new OrderByName());
for (int i = 0 ;i<list.size();i++){
this.list.get(i).setId(i+1);
System.out.println("排序成功");
cunchu(this.list);
for (Person per:list) {
System.out.println(per);
}
return;
}
}
/**
* orderAge() 按用户年龄排序记录
*/
public void orderAge(){
if (this.list.size()==0){
System.out.println("当前无任何记录!");
return;
}
Collections.sort(this.list, new OrderByAge());
for (int i = 0 ;i<list.size();i++){
this.list.get(i).setId(i+1);
System.out.println("排序成功");
cunchu(this.list);
for (Person per:list) {
System.out.println(per);
}
return;
}
}
/**
* orderSex() 按用户性别排序记录
*/
public void orderSex(){
if (this.list.size()==0){
System.out.println("当前无任何记录!");
return;
}
Collections.sort(this.list, new OrderBySex());
for (int i = 0 ;i<list.size();i++){
this.list.get(i).setId(i+1);
System.out.println("排序成功");
cunchu(this.list);
for (Person per:list) {
System.out.println(per);
}
return;
}
}
/**
* 按照姓名排序的比较器
*/
class OrderByName implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
}
/**
* 按照年龄排序的比较器
*/
class OrderByAge implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
}
/**
* 按照性别排序的比较器
*/
class OrderBySex implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getSex().compareTo(o2.getSex());
}
}
}
在Operate类中建立了存储和读取的方法,之后在下面每一个涉及电话本改动的地方都调用了一次存储方法,保证添加,修改,排序,删除都能正常存储到文件中,但是感觉这样比较麻烦,不知道更好的解决方案是什么,而且我在用IO流的时候,直接用的是list对象,因为忘了怎么把list重新转回Person对象了,不知道这样是否合理,麻烦老师给看一看,