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开发一个简单的通讯录分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/63076.html