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}//mainpublic 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();}}//updatepublic 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;}
}//ContactNoteclass 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;}@Overridepublic 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开发一个简单的通讯录相关推荐

  1. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  2. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

  6. 用java编写一个简单计算器

    java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...

  7. 如何用java开发一个网站?

    问题:如何用java开发一个网站? 下载了最新的JDK软件.最新的Eclipse.数据库mysql以及tomcat.struts但是不知道怎么连接起来,在数据库连接的时候mysql-connector ...

  8. 一个html写的app首页,如何快速开发一个简单好看的APP控制页面

    原标题:如何快速开发一个简单好看的APP控制页面 导读 机智云开源框架为了让开发者快速开发APP,已将用户登录,设备发现,设备配网等功能做成了各个标准模块,仅保留控制页面让开发者自行开发设计,节省了开 ...

  9. 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

最新文章

  1. 2018.10.22-dtoi1443奶牛逃亡(cowrun)
  2. swing中怎么在原来图片的基础上切换第二张图片_狂戳痛点!毕业论文图片和公式排版!...
  3. Vue——prop双向绑定解决方案
  4. strtol() 字符串转长整型函数
  5. 零碎的小知识点 ----------C# ToString()函数注意事项
  6. 【转】细说.NET中的多线程 (六 使用MemoryBarrier,Volatile进行同步)
  7. 出发a标签_以用户标签为例,复盘B端产品的需求挖掘方法论
  8. Linux看硬盘同步,从磁盘同步看linux的机制和策略
  9. qt 无框dockwidget_QT解决通过菜单方式无法让QDockWidget 显示和隐藏
  10. win10商店下载位置_教你win10设置应用商店中应用默认安装位置教程
  11. H264中一些很有用的解释
  12. amd的服务器cpu型号大全,AMD CPU型号大全
  13. 手把手教你电脑图片转文字怎么操作,助你提高工作效率
  14. 关于keep,dont touch和max_fanout的用法建议
  15. 2016年中考计算机考试模拟试题,2016年计算机三级考试模拟试题(含答案)
  16. 联想拯救者Y9000P 2022 配置
  17. 【Linux杂篇】Windows远程登陆Linux、Linux静态IP配置
  18. Android逆向之Frida
  19. Python基础五十四题19~36题
  20. 漂亮的仿大婶娱乐网模板 娱乐资源网整站源码 laysns内核

热门文章

  1. 深度推荐模型 -NFM
  2. 1+X Web前端等级考证 | 2020 12月Web前端开发中级理论 (模拟试题第三套) 附答案
  3. ms-sql数据类型和access数据类型大全
  4. 五险一金有哪些「知识普及」
  5. 一文聊透Netty核心引擎Reactor的运转架构
  6. 商务协同办公市场有「后浪」
  7. 关于如何使用python下载各大网站的视频
  8. 私域流量社群公司团队管理KPI考核运营方案制度
  9. itunes将m4a转mp3
  10. 企业招聘普遍年龄35岁以下,那全国人过40岁都干什么去了?