Java编程题:实现一个简易版的控制台手机通讯录

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;
    }
}

 

posted @ 2020-11-08 10:02  liw66  阅读(555)  评论(0)    收藏  举报