利用Map实现通讯录管理
编程语言及功能
编程语言:Java
实现功能:
1-添加联系人
2-删除联系人
3-根据联系人姓名修改电话号码
4-查看所有联系人
5-查看某个分组下的联系人
0-退出系统
类
AddressList.java
- 通讯录主体功能
addContact 添加联系人
delContect 删除联系人(根据姓名)
reviseContect 根据姓名修改联系人电话号码
lookAllContect 查看所有联系人
lookContectForGroup 查看某个分组下的联系人
ConsoleInput.java
扫描二维码关注公众号,回复: 3423772 查看本文章
- 控制台输入类,封装输入联系人信息,联系人姓名,联系人电话,联系人性别,分组
- 每个输入方法内加入了正则判断
Contact.java
- 联系人类
- 使用默认无参构造法
- 通过联系人姓名获取Map分组,即key值
- 添加set方法用于设置Contact属性
Regex.java
- 写入了该项目实现需要用到的正则判断
- 返回判断结果boolean值供其他模块使用
Test.java
- 在控制台测试AddressList中的方法
- 在控制台实现通讯录管理
源码
AddressList.java
package com.niclas.address;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class AddressList {
private HashMap<String, ArrayList<Contact>> map = new HashMap<>();
private ArrayList<Contact> list;
/**
*1.添加联系人
*/
public void addContact(Contact contact) {
//判断是否存在该联系人分组,如果存在,直接添加,如果不存在,则添加分组
list = map.get(contact.getKey());
if (list == null) {
list = new ArrayList<>();
list.add(contact);
map.put(contact.getKey(), list);
} else {
list.add(contact);
}
System.out.println("添加联系人成功!");
}
/**
* 2.删除联系人(根据姓名)
*/
public void delContect(String name) {
//遍历所有联系人,取出map所有的key
Set<String> keySet = map.keySet();
//遍历key
for (String string : keySet) {
//根据key取出value值
ArrayList<Contact> arrayList = map.get(string);
//从集合找到联系人并删除(删除所有该姓名的联系人)
boolean isRemove = false;
for (int i = 0; i < arrayList.size(); i++) {
Contact contact = arrayList.get(i);
if (contact.getName().equals(name)) {
isRemove = arrayList.remove(contact);
i--;
System.out.println("删除" + name + "成功");
}
}
if (isRemove == false) {
System.out.println("未找到" + name);
}
}
}
/**
*3.修改联系人name 修改 phoneNumber
*/
public void reviseContect(String name) {
//遍历所有联系人,取出map所有的key
Set<String> keySet = map.keySet();
//遍历key
for (String string : keySet) {
//根据key取出value值
ArrayList<Contact> arrayList = map.get(string);
//从集合找到联系人并修改,修改完成后退出
boolean isRevise = false;
for (int i = 0; i < arrayList.size(); i++) {
Contact contact = arrayList.get(i);
if (contact.getName().equals(name)) {
String phoneNumber = new ConsoleInput().inputPhoneNumber();
contact.setPhoneNumber(phoneNumber);
System.out.println("-----------------------");
System.out.println(contact);
System.out.println("修改" + name + "手机号成功");
break;
}
}
if (isRevise == false) {
System.out.println("未找到" + name);
}
}
}
/**
*4.查看所有联系人
*/
public void lookAllContect(){
//取出map所有的key
Set<String> keySet = map.keySet();
//遍历key
for (String string : keySet) {
//根据key取出value值
ArrayList<Contact> arrayList = map.get(string);
//遍历集合并打印联系人
for (Contact contact : arrayList) {
System.out.println("-----------" + string + "-----------");
System.out.println(contact);
}
}
}
/**
* 5.查看某个分组下的联系人
* 给定分组
*/
public void lookContectForGroup(String group) {
//根据key取出value值
ArrayList<Contact> arrayList = map.get(group);
//集合非空判断
if (arrayList == null) {
System.out.println("未找到该分组");
}else {
//集合非空遍历打印
for (Contact contact : arrayList) {
System.out.println("-----------" + group + "-----------");
System.out.println(contact);
}
}
}
}
ConsoleInput.java
package com.niclas.address;
import java.util.Scanner;
public class ConsoleInput {
private Scanner scanner = new Scanner(System.in);
/**
* 控制台输入联系人信息
*/
public Contact inputInformation() {
Contact contact = new Contact();
System.out.println("请根据以下提示输入学生信息");
//输入姓名
String name = inputName();
//输入电话号码
String phoneNumber = inputPhoneNumber();
//输入性别
String gender = inputGender();
//设置contact值
contact.set(name, phoneNumber, gender);
return contact;
}
/**
* 控制台输入联系人姓名
*/
public String inputName(){
System.out.println("请输入姓名:");
String name = scanner.next();
if (!Regex.nameRegex(name)) {
System.out.println("输入格式错误!请重新输入!");
inputName();
}
return name;
}
/**
* 控制台输入联系人电话
*/
public String inputPhoneNumber() {
System.out.println("请输入电话号码:");
String phoneNumber = scanner.next();
if (!Regex.phoneNumberRegex(phoneNumber)) {
System.out.println("输入格式错误!请重新输入!");
inputPhoneNumber();
}
return phoneNumber;
}
/**
* 控制台输入联系人性别
*/
public String inputGender() {
System.out.println("请输入性别:");
String gender = scanner.next();
if (!Regex.genderRegex(gender)) {
System.out.println("输入格式错误!请重新输入!");
inputGender();
}
return gender;
}
/**
* 控制台输入联系人分组
*/
public String inputGroup() {
System.out.println("请输入联系人分组:");
String group = scanner.next();
if (!Regex.groupRegex(group)) {
System.out.println("输入格式错误!请重新输入!");
inputGroup();
}
return group;
}
}
Contact.java
package com.niclas.address;
/**
* @author
* 定义一个联系人类Contact
* 姓名, 电话号码, 性别
*/
public class Contact {
private String name;//姓名
private String phoneNumber;//电话号码
private String gender;//性别
//设置对象属性的方法
public void set(String name, String phoneNumber, String gender) {
this.name = name;
this.phoneNumber = phoneNumber;
this.gender = gender;
}
//获取key值的方法
public String getKey() {
String key = this.name.substring(0, 1);
//判断输入的姓名首位,根据不同的首位返回相应的key
String regex = "^[a-zA-Z]";
if (key.matches(regex)) {
return key.toUpperCase();
} else {
return key;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "姓名:" + name + "\n电话号码:" + phoneNumber + "\n性别:" + gender + "\n-----------------------";
}
}
Regex.java
package com.niclas.address;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
//正则比较器,比较对象,正则表达式
private static boolean RegexUtil(String input, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
boolean isTrue = matcher.matches();
return isTrue;
}
//正则判断姓名
public static boolean nameRegex(String name) {
String regex = "[a-zA-Z0-9]{1,}";
return RegexUtil(name, regex);
}
//正则判断电话号码
public static boolean phoneNumberRegex(String phoneNumber) {
String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
return RegexUtil(phoneNumber, regex);
}
//正则判断输入的性别
public static boolean genderRegex(String gender) {
String regex = "[男女]";
return RegexUtil(gender, regex);
}
//正则判断分组
public static boolean groupRegex(String group) {
String regex = "[A-Z0-1]";
return RegexUtil(group, regex);
}
}
Test.java
package com.niclas.address;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
AddressList addressList = new AddressList();
Scanner scanner = new Scanner(System.in);
//创建控制台输入对象
ConsoleInput consoleInput = new ConsoleInput();
System.out.println("-----欢迎使用Map通讯录-----");
count:
while (true) {
System.out.println("请根据提示选择[0-5]:");
System.out.println("1-添加联系人");
System.out.println("2-删除联系人");
System.out.println("3-根据联系人姓名修改电话号码");
System.out.println("4-查看所有联系人");
System.out.println("5-查看某个分组下的联系人");
System.out.println("0-退出系统");
int tab = scanner.nextInt();
switch (tab) {
case 0:
System.out.println("欢迎再次使用");
break count;//跳出外部while循环
case 1:
//接收控制台输入的联系人信息
Contact contact = consoleInput.inputInformation();
//调用添加联系人的方法
addressList.addContact(contact);
break;
case 2:
//接收控制台输入的联系人姓名
String name = consoleInput.inputName();
addressList.delContect(name);
break;
case 3:
//接收控制台输入的联系人姓名
String name2 = consoleInput.inputName();
addressList.reviseContect(name2);
break;
case 4:
addressList.lookAllContect();
break;
case 5:
String group = consoleInput.inputGroup();
addressList.lookContectForGroup(group);
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
}
版权声明
本文是作者原创文章,转载本文时请注明本文地址:https://blog.csdn.net/u010993514/article/details/82901640
若对上述代码有好的修改意见或建议,欢迎大家在评论区指出!