import java.io.*;
import java.text.Collator;
import java.util.*;
public class AddressBook {
public static void main(String[] args) {
new AddressBook().start();
}
private void start(){
Scanner input = new Scanner(System.in);
Menu menu = new Menu();
menu.mainMenu();
Operate operate = new Operate();
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())){
break flag;
}else {
menu.mainMenu();
}
break;
}
}
input.close();
}
}
//菜单类
class Menu {
public void mainMenu() {
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("*************");
}
}
//操作类
class Operate {
private String filePath = "D:\\AddressBook.txt";
private ArrayList<Card> list = new ArrayList<>();
private Scanner input = new Scanner(System.in);
public void add() {
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<String> 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 = new Card(name,numberList,workplace,postaladdress,mail,birthday,remark);
list.add(card);
System.out.println("名片保存成功");
System.out.println("--------------");
write();
}
public void show() {
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 void edit(){
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<String> 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 void delete(){
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();
}
private Card find(String name){
for (Card card : list) {
if (name.equals(card.getName())){
return card;
}
}
return null;
}
private void detail(Card card,int i){
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 void read() {
File file = new File(filePath);
if (!file.exists()){
return;
}
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String s = "";
List<String> number = new ArrayList<>();
while ((s = reader.readLine()) != null){
number.clear();
Card card = new Card();
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 void write(){
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(list, new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
return ((Collator) comparator).compare(o1.getName(),o2.getName());
}
});
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(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();
}
}
}
//名片类
class Card {
private String name;
private List<String> number;
private String workplace;
private String postaladdress;
private String mail;
private String birthday;
private String remark;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getNumber() {
return number;
}
public void setNumber(List<String> number) {
this.number = number;
}
public String getWorkplace() {
return workplace;
}
public void setWorkplace(String workplace) {
this.workplace = workplace;
}
public String getPostaladdress() {
return postaladdress;
}
public void setPostaladdress(String postaladdress) {
this.postaladdress = postaladdress;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Card(){
}
public Card(String name, List<String> number, 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;
}
}
//工具类
class Util {
public static boolean isNumeric(String s){
boolean flag = true;
for(Character c: s.toCharArray()){
if (!Character.isDigit(c)){
flag = false;
break;
}
}
return flag;
}
}