java简单通讯录实现

java简单通讯录实现

功能点:

  1. 添加联系人(联系人:编号,姓名,手机号,QQ,邮箱地址)添加时需要检查手机号和邮箱地址格式是否正确,若不正确,不允许添加。
  2. 联系人查询(输入姓名或电话查询)
  3. 显示联系人列表
  4. 根据编号删除指定编号的联系人

代码实现:
联系人实体类:

public class Contact {

	private int num;
	private String name;
	private String phoneNum;
	private String qq;
	private String email;

	public Contact() {
		super();
	}

	public Contact(int num, String name, String phoneNum, String qq, String email) {
		super();
		this.num = num;
		this.name = name;
		this.phoneNum = phoneNum;
		this.qq = qq;
		this.email = email;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPhoneNum() {
		return phoneNum;
	}

	public void setPhoneNum(String phoneNum) {
		this.phoneNum = phoneNum;
	}

	public String getQq() {
		return qq;
	}

	public void setQq(String qq) {
		this.qq = qq;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Override
	public String toString() {
		return "Contact [num=" + num + ", name=" + name + ", phoneNum=" + phoneNum + ", qq=" + qq + ", email=" + email
				+ "]";
	}

}

联系人管理类:

public class ContachManager {

	/**
	 * 存储所有联系人信息
	 */
	private static ArrayList<Contact> list = new ArrayList<Contact>();

	/**
	 * 添加联系人
	 * 
	 * @param c
	 * @return
	 */
	public boolean add(Contact c) {
		String phoneNum = c.getPhoneNum();
		String qq = c.getQq();
		String email = c.getEmail();

		if (!phoneNum.matches("^1\\d{10}$")) {
			System.out.println("手机号格式不正确!");
			return false;
		}
		if (!qq.matches("^[1-9]\\d{4,11}")) {
			System.out.println("qq格式不对!");
			return false;
		}
		if (!email.matches("^\\w+?@.+?\\.\\w+$")) {
			System.out.println("邮箱格式不匹配!");
			return false;
		}
		list.add(c);
		return true;
	}

	/**
	 * 根据条件查询(模糊查询)
	 * 
	 * @param flag 查询方式:1-按姓名 2-按手机号
	 * @param key  关键字
	 * @return
	 */
	public List<Contact> findByCondition(int flag, String key) {
		// 声明一个临时变量存储查询到的符合条件的数据
		ArrayList<Contact> temp = new ArrayList<Contact>();
		// 对联系人遍历
		for (Contact c : list) {
			if (flag == 1) {
				// 按姓名
				if (c.getName().contains(key)) {
					// 判断联系人姓名中是否包含指定的查询关键字
					temp.add(c);
				}
			} else if (flag == 2) {
				// 按手机号
				if (c.getPhoneNum().contains(key)) {
					temp.add(c);
				}
			} else {
				temp = list;
				break;
			}
		}

		return temp;
	}

	/**
	 * 查询所有(分页)
	 * 
	 * @param pageNow  当前数据的页码数
	 * @param pageSize 每页数据的最大条目
	 * @return 放回当前页的数据集
	 */
	public List<Contact> findAll(int pageNow, int pageSize) {
		int from = (pageNow - 1) * pageSize;
		int to = pageNow * pageSize;

		// 如果集合中没数据时返回null
		if (list.size() < 1) {
			return null;
		}
		//开始位置不能等于总数据条数(越界)
		if(from >= list.size()) {
			return null;
		}
		// 结尾的位置不能超过数据总条数
		if (to > list.size()) {
			to = list.size();
		}
		return list.subList(from, to);
	}

	/**
	 * 根据编号删除联系人
	 * @param num
	 * @return
	 */
	public boolean del(int num) {
		Contact target = null;
		for (Contact c : list) {
			if(c.getNum() == num) {
				target = c;
				break;
			}
		}
		if(Objects.isNull(target)) {
			System.out.println("未找到目标联系人");
			return false;
		}
		return list.remove(target);
	}
}

客户端:

public class Client {

	Scanner input = new Scanner(System.in);
	ContachManager cm = new ContachManager();

	public void mainMenu() {
		p("=============欢迎使用SOFTEEM-SMART通信录==============");
		p("*\t\t[1]添加联系人\t\t\t*");
		p("*\t\t[2]联系人列表\t\t\t*");
		p("*\t\t[3]根据姓名查询联系人\t\t*");
		p("*\t\t[4]根据手机号查询联系人\t\t*");
		p("*\t\t[5]删除联系人\t\t\t*");
		p("*\t\t[0]退出\t\t\t\t*");
		p("请输入正确的操作指令:");
		start();
	}

	public void start() {
		String s = input.next();
		if (!s.matches("[0-5]")) {
			p("请输入正确指令:");
			start();
		}
		switch (s) {
		case "1":
			addContact();
			break;
		case "2":
			listContact();
			break;
		case "3":
			queryByCondition(1);
			break;
		case "4":
			queryByCondition(2);
			break;
		case "5":
			deleByNum();
			break;
		case "0":
			p("谢谢使用,再见!");
			System.exit(0);
			break;
		}
	}

	/**
	 * 删除联系人
	 */
	private void deleByNum() {
		p("请输入联系人编号:");
		String num = input.next();
		if(!num.matches("^\\d+$")) {
			p("请输入正确的编号");
			deleByNum();
		}else {
			boolean f = cm.del(Integer.parseInt(num));
			if(f) {
				p("删除成功");
			}
			mainMenu();
		}
	}

	/**
	 * 条件查询
	 * @param flag
	 */
	private void queryByCondition(int flag) {
		p("请输入查询关键字");
		String key = input.next();
		List<Contact> list = cm.findByCondition(flag, key);
		//判断集合是否为空
		if(list.isEmpty()) {
			p("为查询到匹配的联系人!");
		}else {
			for (Contact c : list) {
				p(c);
			}
		}
		mainMenu();
	}

	/**
	 * 添加
	 */
	private void addContact() {
		p("请输入联系人信息:编号/姓名/手机号/QQ号/邮箱");
		String s = input.next();
		if(!s.matches("\\d+/.+/1\\d{10}/[1-9]\\d{4,11}/\\w+?@.+?\\.\\w+")) {
			p("输入信息有误,请重新输入:");
			addContact();
		}else {
			String[] info = s.split("/");
			Contact c = new Contact(Integer.parseInt(info[0]),info[1],info[2],info[3],info[4]);
			if(cm.add(c)) {
				p("添加成功!");
				mainMenu();
			}else {
				addContact();
			}
		}
	}
	
	public void listContact() {
		p("请输入需要显示的联系人页码数和每页条数(按:页码/数据条数):");
		String s = input.next();
		if(!s.matches("\\d{1,3}/\\d{1,3}")) {
			p("输入的页码或每页条数格式不对");
			listContact();
		}else {
			String[] nums = s.split("/");
			List<Contact> list = cm.findAll(Integer.parseInt(nums[0]), Integer.parseInt(nums[1]));
			if(Objects.isNull(list)) {
				p("没有更多数据可显示!");
				mainMenu();
			}else {
				for (Contact c : list) {
					p(c);
				}
				listContact();
			}
		}
	}
	

	public void p(Object msg) {
		System.out.println(msg);
	}

	//测试
	public static void main(String[] args) {
		Client c = new Client();
		c.mainMenu();
	}
}
  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值