java开发一个简单的通讯录

java开发一个简单的通讯录java开发一个简单的通讯录ArrayList的综合应用importjava.util.*;publicclassContactNote{staticScannersc=newScanner(

java开发一个简单的通讯录

ArrayList的综合应用

import java.util.*;
public class ContactNote{ 
   
  static Scanner sc=new Scanner(System.in);
 static  ArrayList<Contact> list = new ArrayList<>();
	public static void main(String[] args){ 
   

		Friends x1 = new Friends('Z',"张三",22,'男',15555555555L,"0531-6661760");
		Friends x2 = new Friends('X',"小明",18,'男',18756789000L);
		Families x3 = new Families('W',"李四",28,'女',18322009876L);
		Colleagues x4 = new Colleagues('A',"王二麻",24,'男',15559504279L,"0564-6021117");
		Families x5 = new Families('Z',"小红",38,'男',18765432189L);
		Friends x6 = new Friends('Z',"小丽",99,'男',17499990427L);
		Friends x7 = new Friends('Z',"张三",22,'男',15555445555L);
	   Collections.addAll(list,x1,x2,x3,x4,x5,x6,x7,x8);//语句应该写在方法体里面
	   showAll();

	   while(true){ 
   
		   System.out.println("[A:显示所有联系人]");
		   System.out.println("[B:查找某一位联系人]");
		   System.out.println("[C:添加联系人]");
		   System.out.println("[D:删除联系人]");
		   System.out.println("[E:修改联系人]");
		   System.out.println("[F:结束当前所有操作]");
		   String option=sc.next();
		   switch(option){ 
   
			   case "A": chooseA();break;
			   case "B": chooseB();break;
			   case "C": add();break;
			   case "D": delete();break;
			   case "E": update();break;
			   case "F":break;
			   }
		   }//while
	}//main

	public static void chooseA(){ 
   
		System.out.println("按照首字母/类别进行显示:a/b");
		String ab=sc.next();
		ab=checkAB(ab);
		if(ab.equalsIgnoreCase("A")){ 
   
		   sortBySzm();
			}else{ 
   
                 	sortByType();
					}
		}

public static void chooseB(){ 
   
	System.out.println("你可以通过联系人名字进行精确查找/手机号码模糊查询 ");
	String nameOrphone=sc.next();

	int count=0;
	for(Contact c:list){ 
   
		if(c.getName().equals(nameOrphone)||(c.getPhone()+"").contains(nameOrphone)){ 
   
			count++;
			System.out.println("联系人姓名\t"+c.getName()+"\n联系人电话\t"+c.getPhone()+ "\n联系人座机号码\t"+c.getZuoji()+"\n座机所在城市\t"+city(c.getZuoji()));
			}
		}
		if(count==0){ 
   System.out.println("此联系人不存在,查找失败!");}
		}

public static void add(){ 
   
	System.out.println("请输入联系人的分类:[A:亲人 B:朋友 C:同事 D:其他]");
	String group=sc.next();
	if(!group.equals("A")&&!group.equals("B")&&!group.equals("C")){ 
   
		group="D";
		}
		System.out.println("请输入联系人名字大写首字母:");
		String Szm=sc.next();
		char szm= checkSzm(Szm);
	   System.out.println("请输入联系人的姓名:");
	   String name=sc.next();
	   name=checkName(name);
	    System.out.println("请输入联系人的年龄:");
	    String   ageStr=sc.next();
	    while(ageStr.replaceAll("[0-9]","").length()!=0){ 
   
			System.out.println("请重新输入联系人的年龄:");
			ageStr=sc.next();
			}
			int age=Integer.parseInt(ageStr);
	   System.out.println("请选择联系人性别:A:男 B:女");
	   String AB=sc.next();
	   while(!AB.equals("A")&&!AB.equals("B")){ 
   
		   System.out.println("请重新选择联系人性别:A:男 B:女");
		   AB=sc.next();
		   }
		   char  gender =AB.equals("A")?'男':'女';
		  System.out.println("请输入联系人的电话:");
		  String number=sc.next();
		 long phone=checkPhone(number);
	    System.out.println("请输入联系人的座机号码:N:没有");
	    String Zuoji=sc.next();
        String  zuoji=checkZuoji(Zuoji);
        zuoji=zuoji.equalsIgnoreCase("n")?"无座机号码":zuoji;
         Contact p=null;
			if(group.equals("A")){ 
   
			   p=new Families(szm,name,age,gender,phone,zuoji);
				}else if(group.equals("B")){ 
       p=new Friends(szm,name,age,gender,phone,zuoji);
				}else if(group.equals("C")){ 
      p=new Colleagues(szm,name,age,gender,phone,zuoji);
				}else { 
     p=new Anothers(szm,name,age,gender,phone,zuoji);	}
				if(check(p.getPhone())){ 
   
						list.add(p);
						showAll();
						System.out.println("添加成功!");
				}else{ 
   
				 System.out.println("此联系人已存在,添加失败!");}
				}

public static void delete(){ 
   
	showAll();
	System.out.println("请输入你要删除的联系人的编号");
	String  id=sc.next();
	while(!checkNum(id)){ 
   
		System.out.println("您输入的不是编号,请重新输入");
		id=sc.next();
		}
	if(Integer.parseInt(id)>=0&&Integer.parseInt(id)<list.size()){ 
   
			list.remove(Integer.parseInt(id));
			System.out.println("删除成功!");
			showAll();
			}else{ 
   
					System.out.println("无此编号,删除失败!");
				}
		}

public static void update(){ 
   
	System.out.println("请输入你要修改联系人的姓名大写首字母 姓名 联系电话(中间-隔开):Z-张三-15555555555");
	String connect=sc.next();
	connect=checkFormat(connect);
	int count=0;
	for(Contact p:list){ 
   
		String str=p.getSzm()+"-"+p.getName()+"-"+p.getPhone();
		if(connect.equals(str)){ 
   
			count++;
			System.out.println("请输入修改后的联系人的姓名大写首字母 姓名 联系电话(中间-隔开):L-李四-18900000000");
			String  xiugai=sc.next();
			xiugai=checkFormat(xiugai);
			String[] data=xiugai.split("-");
			char szm=checkSzm(data[0]);
			String name=checkName(data[1]);
			long phone=checkPhone(data[2]);
			if(check(phone)){ 
   
				p.setSzm(szm);
				p.setName(name);
				p.setPhone(phone);
				System.out.println("修改成功!");
				}else{ 
   
					System.out.println("此联系人已存在,修改失败!");
					}
			}
			if(count==0){ 
   System.out.println("无此联系人,修改失败!");
				}
				showAll();
		}
		}//update

	public static String checkFormat(String str){ 
   
		while(!(str.length()-str.replace("-","").length()==2&&str.indexOf("-")==1&&str.lastIndexOf("-")==str.length()-12)){ 
   
			System.out.println("请输入正确的格式");
			str=sc.next();
			}
			return str;
		}

public  static void showAll(){ 
   
	System.out.println("编号 姓名 年龄 电话");
	for(int i=0;i<list.size();i++){ 
   
		Contact p=list.get(i);
		System.out.println(i+" "+p);
		}
	}
public static String  checkName(String name){ 
   
	ArrayList<String> temp=new ArrayList<>();
	Collections.addAll(temp,".",",","!","~","@","#","$","%","^","&","*","(",")","-","+","=");
	while(temp.contains(name)){ 
   
		System.out.println("请输入合法的姓名");
		name=sc.next();
		}
	return name;
	}

public static long  checkPhone(String str){ 
   
	ArrayList<String> temp=new ArrayList<>();
	Collections.addAll(temp,"130","132","134","135","136","137","138","139","150","151","152","155","156","158","159","177","178","170","180","182","183","185","187","189","198");
	while(!(str.length()==11&&checkNum(str)&&temp.contains(str.substring(0,3)))){ 
   
		System.out.println("请重新输入电话号码");
		str=sc.next();
		}
		return  Long.parseLong(str);
	}

public static  String checkZuoji(String str){ 
   
	ArrayList<String> temp=new ArrayList<>();
	Collections.addAll(temp,"0564-","0521-","0538-","020-","0520","0527-");
	while(!str.equalsIgnoreCase("N")&&!(str.replaceAll("[0-9]","").length()==1&&temp.contains(str.substring(0,str.indexOf("-")+1))&&str.split("-")[1].length()==7)){ 
   
		System.out.println("请重新输入正确的座机号码");
		str=sc.next();
		}
		return str;
	}

public static char  checkSzm(String str){ 
   
	while(!(str.length()==1&&str.replaceAll("[A-Z]","").length()==0)){ 
   
		System.out.println("请输入合法的字母");
		str=sc.next();
		}
		return str.charAt(0);
	}

	public static void  sortBySzm(){ 
   
		for(char x='A';x<='Z';x++){ 
   
						int count=0;
						for(Contact  c:list){ 
   
							if(c.getSzm()==x){ 
   
									count++;
									if(count==1) { 
   System.out.println(x);}
							System.out.println(c.getName()+"\t"+c.getPhone());
							}
						}
			}
		}

	public static  void sortByType(){ 
   
		String[] data={ 
   "Families","Friends","Colleagues","Anothers"};
		for(String type:data){ 
   
			int count=0;
			for(Contact  c:list){ 
   
				if(c.getClass().getName().equals(type)){ 
   
					count++;
					if(count==1)System.out.println(" "+type);
				   System.out.println(c.getName()+"\t"+c.getPhone());
					}
				}
			}
		}

	public static String  checkAB(String str){ 
   
	while(!str.equalsIgnoreCase("a")&&!str.equalsIgnoreCase("b")){ 
   
		System.out.println("请重新选择a/b");
		str=sc.next();
		}
		return  str;
	}

public static String city(String zuoji){ 
   
	String city="";

		if(zuoji.equals("无座机号码")){ 
   
			city=  "未知城市";
		}else{ 
   
			if(zuoji.substring(0,zuoji.indexOf("-")).equals("0564")){ 
   
					city= "六安";}
			if(zuoji.substring(0,zuoji.indexOf("-")).equals("0531")){ 
   
					city= "济南";}
			if(zuoji.substring(0,zuoji.indexOf("-")).equals("0532")){ 
   
					city= "青岛";}
			if(zuoji.substring(0,zuoji.indexOf("-")).equals("020")){ 
   
					city= "广州";
			}
		}
		return city;
	}

public static boolean  checkNum(String  str){ 
   
		char[] data=str.toCharArray();
			for(char x:data){ 
   
				if(x<'0' || x>'9') { 
   
					return false;
					}
				}
	return	true;
	}

	public static boolean  check(long number){ 
   
		for(Contact  x:list){ 
   
			if(number==x.getPhone()){ 
   
				return  false;
				}
			}
			return true;
		}
}//ContactNote

class Contact{ 
   
	private char szm;
	private String name;
	private int age;
	private char gender;
	private long phone;
	private String zuoji;
	public Contact(char szm,String name,int age,char gender,long phone,String zuoji){ 
   
		this(szm,name,age,gender,phone);
		this.zuoji=zuoji;
		}
	public Contact(char szm,String name,int age,char gender,long phone){ 
   
			this.szm=szm;
			this.name=name;
			this.age=age;
			this.gender=gender;
			this.phone=phone;
			this.zuoji="无座机号码";
		}
	public void setSzm(char szm){ 
   
		this.szm=szm;
		}
	public char getSzm(){ 
   
		return szm;
		}
	public void setName(String name){ 
   
		this.name=name;
		}
	public String getName(){ 
   
		return name;
		}
	public void setAge(int age){ 
   
		this.age=age;
		}
	public int getAge(){ 
   
		return age;
		}
	public void setGender(char gender){ 
   
		this.gender=gender;
		}
	public char getGender(){ 
   
		return gender;
		}
	public void  setPhone(long phone){ 
   
		this.phone=phone;
		}
	public long getPhone(){ 
   
		return phone;
	}
	public void setZuoji(String zuoji){ 
   
		this.zuoji=zuoji;
		}
		public String getZuoji(){ 
   
			return zuoji;}

	@Override
	public String toString(){ 
   
		return name+" "+age+" "+ (phone+"").substring(0,3)+"****"+(phone+"").substring(7);}
	}

	class Families extends  Contact { 
   
		public Families(char szm,String name,int age,char gender,long phone,String zuoji){ 
   
			super( szm, name, age,gender, phone,zuoji);
			}
			public Families(char szm,String name,int age,char gender,long phone){ 
   
				super(szm, name, age,gender, phone);
				}
		}
	class Friends extends  Contact { 
   
		public Friends(char szm,String name,int age,char gender,long phone,String zuoji){ 
   
					super(szm, name, age,gender, phone,zuoji);
			}
		public Friends(char szm,String name,int age,char gender,long phone){ 
   
					super(szm, name, age,gender, phone);
			}
		}
	class Colleagues extends  Contact { 
   
		public Colleagues(char szm,String name,int age,char gender,long phone,String zuoji){ 
   
						super(szm, name, age,gender, phone,zuoji);
			}
		public Colleagues(char szm,String name,int age,char gender,long phone){ 
   
						super(szm, name, age,gender, phone);
			}
		}
	class Anothers extends  Contact { 
   
		public Anothers(char szm,String name,int age,char gender,long phone,String zuoji){ 
   
						super(szm, name, age,gender, phone,zuoji);
			}
		public Anothers(char szm,String name,int age,char gender,long phone){ 
   
						super(szm, name, age,gender, phone);
			}
		}

需求

测试案例:

朋友 x1 = new 朋友('Z',"张三",22,'男',15555555555L,"0531-6661760");
朋友 x2 = new 朋友('X',"小明",18,'男',18756789000L);
亲人 x3 = new 亲人('W',"李四",28,'女',18322009876L);
同事 x4 = new 同事('A',"王二麻",24,'男',15559501427L,"0564-6021117");
亲人 x5 = new 亲人('Z',"小红",38,'男',18765432189L);
朋友 x6 = new 朋友('Z',"小丽",99,'男',17499990427L);
朋友 x7 = new 朋友('Z',"张三",22,'男',15555445555L);	

*:手机通讯录联系人分类:亲人 同事 朋友 其他
*:手机通讯录里面所有的联系人底层都装进一个集合对象里面 -》 ArrayList

*:亲人 同事 朋友 其他类型里面共有的属性:
char szm;->首字母
String name->联系人名字
int age->联系人年龄
char gender->联系人性别
long phone->手机号码
String zuoJi->座机号码 -》类似: 0531-6661760

*:创建联系人对象的时候:
szm name age gender phone是必填内容
zuoJi可填可不填

*:如果创建联系人对象的时候 用户如果没有提供zuoJi属性值
那么将zuoJi变量直接赋值为”无座机号码”
*:如果创建联系人对象的时候 用户如果提供zuoJi属性值了
那么直接将zuoJi变量赋值为用户输入的值

*:所有类里面的属性要求封装

//一个模块一个模块写 写完测试 测试通过写下一个模块

刚进入cmd里面的主界面 -》 6个小模块
A:显示所有联系人
B:查找某一位联系人
C:添加联系人
D:删除联系人
E:修改联系人
F:结束当前所有操作

A显示所有联系人
如果用户选择是A 那么有两种选择:

输入校验:
用户可能输进去的不是a/b 要求重新输入
再次输入的内容也需要校验
直到用户输入一个正确的内容

a:按照首字母进行显示分类:
[效果如下:]

A
小丽 1555950427
W
李四 18322009876
X
小明 18756789000

b:按照类别进行分类显示:
[效果如下:]

        朋友
张三	15555555555
小明	18756789000
小红	17499990427
张三	15555445555
        亲人
小丽	18322009876
王二麻		18765432189
        同事
小丽	1555950427
...

B查找某一位联系人
如果用户选择的是B:
cmd面板显示下面这句话:
请问你是通过联系人名字进行精确查找/手机号码模糊查询
用户可以直接的输入要查找联系人的名字
如果集合里面没有该用户 直接显示:不好意思 当前用户不存在

0564: 六安
0531:济南
0532:青岛
020:广州

如果集合里面有该用户 需要将用户的基本信息进行展示:
[效果如下:]
[输入]张三
[显示]
用户的基本信息:
联系人姓名:张三
联系人电话:15555555555
联系人座机号码:0531-6661760
座机显示城市:济南

​ 用户的基本信息:
​ 联系人姓名:张三
​ 联系人电话:15555445555
​ 联系人座机号码:无座机号码
​ 座机显示城市:未知城市

用户还可以直接输入一段电话号码-》出现几个数字就可以
如果集合里面没有用户的号码出现这几个数字的 直接显示:
​ 不好意思 当前用户不存在

如果查找到有这个用户存在 显示下面:
[效果如下:]
[输入]555555
[显示]
用户的基本信息:
联系人姓名:张三
联系人电话:15555555555
联系人座机号码:0531-6661760
座机显示城市:济南

C添加联系人
如果用户选择的是C:
需要进行输入校验:
1:选择的分类可能不是亲人 朋友 同事 默认其他
2:输入的大写首字母可能不是大写首字母 是数字 是其他的汉字
3:注册用户名字的时候,不应该包含非法字符(不能含有,.?!@#¥%^&*()-=+)
4:输入的年龄非数字
5:性别选择的不是a/b
6: 输入电话号码的时候 非11为数字 不是数字 不是以138 130 137 158 155 188. .开头
7:座机可能不是按照 区号-号码的形式传进去的
座机号码的区号只能出现0564 0531 0532 020
座机号码只能出现7位数

cmd里面直接出现下面的内容:
请选择联系人的分类 A:亲人 B:同事 C:朋友 D:其他
请输入联系人名字大写首字母:
请输入联系人的姓名:
请输入联系人的年龄:
请选择联系人性别:a:男 b:女
请输入联系人的电话:
请输入联系人座机号码(没有请回复N):N/区号-座机号 000-475674 0564-666666

当用户依次输入所有的信息之后 产生一个联系人
但是需要判断集合里面是否已经存在该用户
如果存在(只要手机号码相同就认为是同一个联系人)
那么就不能继续添加进通讯录里面
cmd里面显示:对不起 当前用户已经存在 同一个用户不能添加多次

如果不存在 将当前联系人添加进集合里面
cmd里面显示:添加成功

D删除联系人
如果用户选择的是D:
直接在cmd里面先以表的形式将所有联系人的信息显示出来:
编号+姓名+年龄+电话号码
cmd里面显示:请问你要删除联系人的编号:

输入校验:
需要对当前输入的编码进行判断 是不是数字
如果不是 需要重新输入(从新输进去的内容还是需要进行输入校验)
直到用户输入一个合法的数字

如果集合里面有该编码对应的元素
从集合里面将当前编号的联系人删除 并在cmd里面显示删除成功
如果集合里面没有该编号对应的联系人
cmd里面显示:对不起 没有该编码对应的联系人

E修改联系人
如果用户选择的是E:
输入校验:
修改之后的姓名还是不能出现关键字
修改之后的电话号码还是只能以155 159…开头
修改后的大写首字母还是要判断是否合法
可能用户不是按照格式正确输入 szm-name-phone(无论是修改前的输入还是修改后的输入格式需要正确)

​ 修改之后的信息判断在集合里面是否存在[电话号码一样就要存在]
​ 如果存在 显示:修改失败 当前电话号码已经存在
​ 如果不存在 显示:修改成功

[效果如下]
请输入你要修改联系人的姓名大写首字母 姓名 联系电话(中间-隔开):Z-张三-15555555555

​ 找到集合里面对应的联系人 如果集合里面没有该对象显示:不好意思 当前联系人不存在
​ 如果找到要修改的联系人 显示一下提示语:

请输入修改后的联系人的姓名大写首字母 姓名 联系电话(中间-隔开):L-李四-18900000000

修改结束显示修改成功

F结束当前所有操作
如果用户选择的是F:
直接结束当前所有的操作 -》 break

今天的文章java开发一个简单的通讯录分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/63076.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注