一、需求分析:
通讯录主要用于储存联系人的信息,这里我们主要记录了联系人的姓名以及号码
在角色上我们只设计了用户。
二、概要设计:
想清楚程序应该分为几个模块,每个模块都是干啥的,模块之间是如何交互的?
由于当前的系统相对比较简单,暂且设为一个模块。
三、详细设计:
每个模块具体的一些细节再考虑清楚
四、开始编码:
将系统分为了三大部分: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;
}
}
效果展示:
项目源码:https://github.com/YTCfight/Address-book/tree/master/out/production/Test2