一、需求分析:
通讯录主要用于储存联系人的信息,这里我们主要记录了联系人的姓名以及号码
在角色上我们只设计了用户。

二、概要设计:
想清楚程序应该分为几个模块,每个模块都是干啥的,模块之间是如何交互的?
由于当前的系统相对比较简单,暂且设为一个模块。

三、详细设计:
每个模块具体的一些细节再考虑清楚

四、开始编码:
将系统分为了三大部分:contact 包、operation 包、Main 类
(1)contact 包:包含了Contact 类(用于描述每个联系人的信息),ContactList 类(用于描述所有联系人的信息)
(2)operation 包: 包含了各种具体实现的操作
(3)Main 方法:程序的入口。

编码的整体结构:
contact 包:
Contact 类:描述每个联系人的信息
ContactList 类:描述所有联系人的信息,简单的顺序表

operation 包:
IOperation 接口:operation 包里面的每个类都需要重写IOperation 接口里面的 work 方法。
AddOperation 类:添加联系人以及进行通讯录的扩容
DelectOperation 类:删除联系人
SearchOperation 类:查找某个联系人
ShowOperation 类:打印所有联系人的信息
SortOperation 类:对联系人进行排序(按照首字母大小)
ClearOperation 类:清空联系人
ExitOperation 类:退出程序

Main 类:
整个程序的入口以及相关操作的菜单。

具体的代码实现:
1.contact 包:
(1)Contact 类:

public class Contact {
    private String name;
    private String id;

    public Contact(String name, String id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "Contact{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }
}

(2)ContactList 类:

public class ContactList {
    public Contact[] contacts = new Contact[1];
    private int size;



    public Contact getContact(int index) {
        return contacts[index];
    }

    public void setSize(int size) {
        this.size = size;
    }
    public int getSize() {
        return size;
    }

    public void setContact(int index, Contact contact) {
        contacts[index] = contact;
    }
}

2.operation 包:
(1)IOperation 接口:

import contact.ContactList;

public interface IOperation {
    void work(ContactList contactList);
}

(2)AddOperation 类:

public class AddOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("添加联系人");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入添加联系人的姓名:");
        String name = scanner.next();
        System.out.println("请输入添加联系人的号码:");
        String id = scanner.next();
        Contact contact = new Contact(name,id);
        contactList.setContact(contactList.getSize(),contact);
        contactList.setSize(contactList.getSize() + 1);
        System.out.println("添加成功!");
        if (contactList.getSize() == contactList.contacts.length) {
            //进行扩容
            Contact[] newContacts = new Contact[contactList.contacts.length * 2];
            for (int i = 0; i < contactList.getSize(); i++) {
                newContacts[i] = contactList.contacts[i];
            }
            contactList.contacts = newContacts;
            System.out.println("扩容成功 !");
        }
        return;
    }
}

(3)SearchOperation 类:

public class SearchOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("查找联系人信息");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查找联系人的姓名:");
        String name = scanner.next();
        for (int i = 0; i < contactList.getSize(); i++) {
            Contact contact = contactList.getContact(i);
            if (contact.getName().equals(name)) {
                System.out.println(contact);
                return;
            }
        }
        System.out.println("查无此人");
        return;
    }
}

(4)DelectOperation 类:

public class DelectOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("删除联系人");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入删除联系人的姓名:");
        String name = scanner.next();
        //先查找
        for (int i = 0; i < contactList.getSize(); i++) {
            Contact contact = contactList.getContact(i);
            if (contact.getName().equals(name)) {
                //找到了,进行具体的删除
                contactList.setContact(i,contactList.getContact(contactList.getSize() -1));
                contactList.setSize(contactList.getSize() - 1);
                System.out.println("删除成功!");
                return;
            }
        }
        System.out.println("查无此人");
        return;
    }
}

(5)ShowOperation 类:

public class ShowOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("展示所有联系人信息");
        for (int i = 0; i < contactList.getSize(); i++) {
            Contact contact = contactList.getContact(i);
            System.out.println(contact);
        }
        return;
    }
}

(6)SortOperation 类:

public class SortOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("进行联系人排序(首字母大小)");
        for (int i = 0; i < contactList.getSize() - 1; i++) {
            contactList.contacts[i] = contactList.getContact(i);
            contactList.contacts[i + 1] = contactList.getContact(i + 1);
            if (contactList.contacts[i + 1].getName().compareTo(contactList.contacts[i].getName()) < 0) {
                //进行交换
                Contact tmp = contactList.contacts[i];
                contactList.contacts[i] = contactList.contacts[i + 1];
                contactList.contacts[i + 1] = tmp;
            }
        }
        new ShowOperation().work(contactList);
        return;
    }
}

(7)ClearOperation 类:

public class ClearOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("清空链表");
        contactList.setSize(0);
        System.out.println("清空成功!");
        return;
    }
}

(8)ExitOperation 类:

public class ExitOperation implements IOperation {
    @Override
    public void work(ContactList contactList) {
        System.out.println("goodbye!");
        System.exit(0);
    }
}

3.Main 类:

public class Main {
    public static void main(String[] args) {
        ContactList contactList = new ContactList();
        IOperation[] operations = {
                new ExitOperation(),
                new AddOperation(),
                new SearchOperation(),
                new DelectOperation(),
                new ShowOperation(),
                new ClearOperation(),
                new SortOperation()
        };

        while (true) {
            int chioce = menu();
            operations[chioce].work(contactList);
        }
    }
    public static int menu() {
        System.out.println("-----------------------------");
        System.out.println("1.添加联系人     2.查找联系人");
        System.out.println("3.删除联系人     4.展示所有联系人信息");
        System.out.println("5.清空联系人     6.排序联系人");
        System.out.println("0.退出");
        System.out.println("-----------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的选择:");
        int choice = scanner.nextInt();
        return choice;
    }

}

效果展示:

Java导入通讯录 java手机通讯录_ide


项目源码:https://github.com/YTCfight/Address-book/tree/master/out/production/Test2