import java.io.*;importjava.text.Collator;import java.util.*;public classAddressBook {public static voidmain(String[] args) {newAddressBook().start();
}private voidstart(){
Scanner input= newScanner(System.in);
Menu menu= newMenu();
menu.mainMenu();
Operate operate= newOperate();
operate.read();
flag:while(input.hasNext()) {
String s=input.nextLine();if (!Util.isNumeric(s)){
System.out.println("请输入数字");
menu.mainMenu();continue;
}if (!s.matches("[1-5]")){
System.out.println("不能超出输入范围1-5");
menu.mainMenu();continue;
}switch(Integer.parseInt(s)) {case 1:
operate.add();
menu.mainMenu();break;case 2:
operate.show();
menu.mainMenu();break;case 3:
operate.edit();
menu.mainMenu();break;case 4:
operate.delete();
menu.mainMenu();break;case 5:
System.out.println("是否确定退出?y/n");if ("y".equals(input.nextLine())){breakflag;
}else{
menu.mainMenu();
}break;
}
}
input.close();
}
}//菜单类
classMenu {public voidmainMenu() {
System.out.println("*************");
System.out.println("welcome 手机通讯录");
System.out.println("请输入你想执行的操作序号:");
System.out.println("1.增加联系人名片");
System.out.println("2.查看联系人列表");
System.out.println("3.修改联系人名片");
System.out.println("4.删除联系人名片");
System.out.println("5.退出");
System.out.println("*************");
}
}//操作类
classOperate {private String filePath = "D:\\AddressBook.txt";private ArrayList list = new ArrayList<>();private Scanner input = newScanner(System.in);public voidadd() {
System.out.println("--------------");
System.out.println("---名片添加---");
System.out.println("提示信息:");
System.out.println("1.姓名为必填项 必须唯一");
System.out.println("2.多个电话号码用英文逗号分隔 不能超过10个");
System.out.println("是否继续添加?y/n");if ("n".equals(input.nextLine())){return;
}
System.out.println("*请输入姓名:");
String name=input.nextLine();
System.out.println("请输入电话号码:");
String numbers=input.nextLine();
String[] arr= numbers.split(",");
List numberList = new ArrayList<>();for(String s : arr) {
numberList.add(s);
}
System.out.println("请输入工作单位:");
String workplace=input.nextLine();
System.out.println("请输入通讯地址:");
String postaladdress=input.nextLine();
System.out.println("请输入电子邮箱:");
String mail=input.nextLine();
System.out.println("请输入生日:");
String birthday=input.nextLine();
System.out.println("请输入备注:");
String remark=input.nextLine();
Card card= newCard(name,numberList,workplace,postaladdress,mail,birthday,remark);
list.add(card);
System.out.println("名片保存成功");
System.out.println("--------------");
write();
}public voidshow() {if(list.isEmpty()){
System.out.println("通讯录为空");return;
}
System.out.println("通讯录内容如下:");for (int i = 0; i < list.size(); i++) {
Card card=list.get(i);
detail(card, i);
}
}public voidedit(){
System.out.println("--------------");
System.out.println("---名片修改---");
System.out.println("请输入要修改名片姓名:");
String name=input.nextLine();
Card card=find(name);if (card == null) {
System.out.println("找不到名片");return;
}
detail(card,0);
System.out.println("请输入要修改的选项:");
System.out.println("1.姓名");
System.out.println("2.电话号码");
System.out.println("3.工作单位");
System.out.println("4.通讯地址");
System.out.println("5.电子邮箱");
System.out.println("6.生日");
System.out.println("7.备注");
String s=input.nextLine();if (!Util.isNumeric(s)){
System.out.println("请输入数字");return;
}if (!s.matches("[1-7]")){
System.out.println("不能超出输入范围1-7");return;
}switch(Integer.parseInt(s)){case 1:
System.out.println("*请输入新的姓名:");
card.setName(input.nextLine());
System.out.println("姓名修改成功");break;case 2:
System.out.println("请输入新的电话号码:");
String[] arr= input.nextLine().split(",");
List number = new ArrayList<>();for(String n : arr) {
number.add(n);
}
card.setNumber(number);break;case 3:
System.out.println("请输入新的工作单位:");
card.setWorkplace(input.nextLine());
System.out.println("工作单位修改成功");break;case 4:
System.out.println("请输入新的通讯地址:");
card.setPostaladdress(input.nextLine());
System.out.println("通讯地址修改成功");break;case 5:
System.out.println("请输入新的电子邮箱:");
card.setMail(input.nextLine());
System.out.println("电子邮箱修改成功");break;case 6:
System.out.println("请输入新的生日:");
card.setBirthday(input.nextLine());
System.out.println("生日修改成功");break;case 7:
System.out.println("请输入新的备注:");
card.setRemark(input.nextLine());
System.out.println("备注修改成功");break;
}
System.out.println("--------------");
write();
}public voiddelete(){
System.out.println("--------------");
System.out.println("---名片删除---");
System.out.println("请输入删除名片姓名:");
String name=input.nextLine();
Card card=find(name);if (card == null){
System.out.println("找不到名片");return;
}
detail(card,0);
System.out.println("确认删除此名片?y/n");if ("y".equals(input.nextLine())){
list.remove(card);
System.out.println("名片删除成功");
}else{return;
}
System.out.println("--------------");
write();
}privateCard find(String name){for(Card card : list) {if(name.equals(card.getName())){returncard;
}
}return null;
}private void detail(Card card,inti){
System.out.println("-------------------");
System.out.println("-----名片"+(i==0?"":(i+1))+"-----");
System.out.println("姓名:"+card.getName());for (int j = 0; j < card.getNumber().size(); j++) {
System.out.println("电话号码:"+card.getNumber().get(j));
}
System.out.println("工作单位:"+card.getWorkplace());
System.out.println("通讯地址:"+card.getPostaladdress());
System.out.println("电子邮箱:"+card.getMail());
System.out.println("生日:"+card.getBirthday());
System.out.println("备注:"+card.getRemark());
System.out.println("-------------------");
}public voidread() {
File file= newFile(filePath);if (!file.exists()){return;
}try{
BufferedReader reader= new BufferedReader(newFileReader(filePath));
String s= "";
List number = new ArrayList<>();while ((s = reader.readLine()) != null){
number.clear();
Card card= newCard();
card.setName(s.split(" ")[0]);for(String n:s.split(" ")[1].split(",")){
number.add(n);
}
card.setNumber(number);
card.setWorkplace(s.split(" ")[2]);
card.setPostaladdress(s.split(" ")[3]);
card.setMail(s.split(" ")[4]);
card.setBirthday(s.split(" ")[5]);
card.setRemark(s.split(" ")[6]);
list.add(card);
}
reader.close();
}catch(IOException e) {
e.printStackTrace();
}
}public voidwrite(){
Comparator comparator=Collator.getInstance(Locale.CHINA);
Collections.sort(list,new Comparator() {
@Overridepublic intcompare(Card o1, Card o2) {return((Collator) comparator).compare(o1.getName(),o2.getName());
}
});try{
BufferedWriter writer= new BufferedWriter(newFileWriter(filePath));for(Card card : list) {
StringJoiner line= new StringJoiner(" ");
line.add(card.getName());
line.add(String.join(",",card.getNumber()));
line.add(card.getWorkplace());
line.add(card.getPostaladdress());
line.add(card.getMail());
line.add(card.getBirthday());
line.add(card.getRemark());
writer.write(line.toString());
writer.newLine();
}
writer.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}//名片类
classCard {privateString name;private Listnumber;privateString workplace;privateString postaladdress;privateString mail;privateString birthday;privateString remark;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public ListgetNumber() {returnnumber;
}public void setNumber(Listnumber) {this.number =number;
}publicString getWorkplace() {returnworkplace;
}public voidsetWorkplace(String workplace) {this.workplace =workplace;
}publicString getPostaladdress() {returnpostaladdress;
}public voidsetPostaladdress(String postaladdress) {this.postaladdress =postaladdress;
}publicString getMail() {returnmail;
}public voidsetMail(String mail) {this.mail =mail;
}publicString getBirthday() {returnbirthday;
}public voidsetBirthday(String birthday) {this.birthday =birthday;
}publicString getRemark() {returnremark;
}public voidsetRemark(String remark) {this.remark =remark;
}publicCard(){
}public Card(String name, Listnumber, String workplace, String postaladdress, String mail, String birthday, String remark) {this.name =name;this.number =number;this.workplace =workplace;this.postaladdress =postaladdress;this.mail =mail;this.birthday =birthday;this.remark =remark;
}
}//工具类
classUtil {public static booleanisNumeric(String s){boolean flag = true;for(Character c: s.toCharArray()){if (!Character.isDigit(c)){
flag= false;break;
}
}returnflag;
}
}