Java项目——Map实现通讯录基本功能

 利用Map实现通讯录管理

编程语言及功能

编程语言:Java

 实现功能:

1-添加联系人
2-删除联系人
3-根据联系人姓名修改电话号码
4-查看所有联系人
5-查看某个分组下的联系人
0-退出系统    


类 

 AddressList.java

  • 通讯录主体功能
  • addContact    添加联系人

  • delContect    删除联系人(根据姓名)

  • reviseContect    根据姓名修改联系人电话号码

  • lookAllContect    查看所有联系人

  • lookContectForGroup    查看某个分组下的联系人

ConsoleInput.java

  • 控制台输入类,封装输入联系人信息,联系人姓名,联系人电话,联系人性别,分组
  • 每个输入方法内加入了正则判断

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

若对上述代码有好的修改意见或建议,欢迎大家在评论区指出!

猜你喜欢

转载自blog.csdn.net/u010993514/article/details/82901640