简单实现通讯录

网上看到OC通讯录,就写了一下

功能描述:

main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能:

1).使用便利构造器创建四个Person类的实例(联系人).

姓名:Lucy性别:女电话:123年龄:21

姓名:Joe性别:男电话:456年龄:17

姓名:Baby性别:女电话:789年龄:27

姓名:Linda性别:女电话:000年龄:21

2).创建一个AddressBook类的实例对象(通讯录).

3).使用AddressBook类中定义的方法实现:添加联系人,将四个联系人添加到通讯录中.

4).使用AddressBook类中定义的方法实现:根据电话查找联系人,并打印(查找电话:456);

5).使用AddressBook类中定义的方法实现:根据性别查找联系人,并将查到的联系人按照年龄升序排序,并打印(查找性别:女)

6).使用AddressBook类中定义的方法实现:根据姓名,更改联系人信息.(修改Linda的信息:性别:女电话:012年龄:25);

7).使用AddressBook类中定义的方法实现:按照姓名删除联系人,并展示通信录中所有人信息.(删除联系人:Baby)

8).使用AddressBook类中定义的方法实现:删除一个分组,并展示通信录中所有人信息.(删除L组)

9).使用AddressBook类中定义的方法实现:实现3~8之间每个功能后,输出通讯录中所有联系人信息。

二、功能实现提示:

1、功能一

定义Person类

1)声明属性:姓名,年龄,性别,电话,分组。注:年龄是int类型,其余属性时NSString类型;分组是姓名首字母(大写),使用提供的类目:NSString+Characters中的方法获取。(3分)

2)重写description方法,输出Person对象的信息。例如:“姓名:张三性别:男年龄:22电话:123456789”.(2分)

3)定义Person类的便利构造器方法,方法包含参数:姓名、年龄、性别、电话.(5分)

2、功能二

定义AddressBook类.

1)声明属性:allPersonDic(字典类型)。使用声明的字典作为容器,分组管理通讯录中所有联系人;字典的Key值为分组名(姓名首字母,大写),value值为数组,数组中存放联系人(Person实例).(5分)

2)在AddressBook的初始化方法中,初始化allPersonDic。(5分)

3)重写dealloc方法,在dealloc方法中实现AddressBook类的内存管理。(5分)

3、功能三

添加联系人.要求(15分)

a.在AddressBook类中定义方法:

-(BOOL)addPerson:(Person*)aPerson;

b.判断姓名和电话不能为空否则添加失败.

c.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人不能有重名).

d.添加成功返回YES,姓名为空或者有重名的添加失败返回NO.

e.数据使用Person存储.

4、功能四

根据电话查找某个联系人.(10分)

a:在AddressBook类中定义方法:

-(Person*)findPersonWithPhoneNum:(NSString*)aPhoneNum;

b:如果找到返回该联系人,否则返回nil.

c.忽略电话重复问题,只返回第一个查找到的联系人。

5、功能五

根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)

a:在AddressBook类中定义方法:

-(NSArray*)findPersonsWithSex:(NSString*)aSex;

b:查找到联系人放入数组,排序的时候使用block.

6、功能六

根据姓名,更改联系人信息.(10分)

a:在AddressBook类中定义方法:

-(BOOL)changePersonWithName:(NSString*)name phoneNum:(NSString*)aNum sex:(NSString*)aSex age:(NSUInteger) aAge;

b:找到该联系人并修改该成功返回YES,否则返回NO

c.修改电话、性别、年龄,参数不能为空。

7、功能七

按照姓名删除联系人.(15分)

a.在AddressBook类中定义方法:

-(BOOL)deletePersonWithName:(NSString*)aPersonName;

b.删除成功返回YES,否则返回NO;

c.当删除联系人后分组为空时,需要删除该分组。

8、功能八

删除一个分组.(5分)

a.在AddressBook类中定义方法:

-(BOOL)deleteGroup:(NSString*)aGroupName;

b.删除成功返回YES,否则返回NO;

9、功能九

展示通讯录中的所有联系人信息(5分)

a:在AddressBook类中定义方法:

-(void)showAll;

b.通过重写description方法展示联系人信息。

Person.h文件如下

@interfacePerson :NSObject

{

NSString*_groupName;

}

@property(nonatomic,retain)NSString*name,*gender,*num;

@property(nonatomic,assign)NSIntegerage;

-(void)setGroupName;

-(NSString*)groupName;

-(instancetype)initWithName:(NSString*)name

age:(NSInteger)age

gender:(NSString*)gender

num:(NSString*)num;

+(instancetype)personWithName:(NSString*)name

age:(NSInteger)age

gender:(NSString*)gender

num:(NSString*)num;

@end

Person.m文件如下

@implementationPerson

//分组名的setter方法

-(void)setGroupName

{

if(_name&& ![_nameisEqualToString:@""])

{

_groupName= [[self.namesubstringToIndex:1]uppercaseString];

}else

{

_groupName=nil;

}

}

-(NSString*)groupName

{

return_groupName;

}

//重新描述方法

-(NSString*)description

{

return[NSStringstringWithFormat:@"姓名:%@年龄:%ld性别:%@电话:%@",self.name,self.age,self.gender,self.num];

}

//初始化方法同时建组名方法调用一下 初始化name有值groupName就有值

-(instancetype)initWithName:(NSString*)name

age:(NSInteger)age

gender:(NSString*)gender

num:(NSString*)num

{

if(self=[superinit])

{

_name=name;

_age=age;

_gender=gender;

_num=num;

[selfsetGroupName];

}

returnself;

}

//便利构造方法

+(instancetype)personWithName:(NSString*)name

age:(NSInteger)age

gender:(NSString*)gender

num:(NSString*)num

{

return[[Personalloc]initWithName:nameage:agegender:gendernum:num];

}

@end

AddressBook.h文件如下

#import"Person.h"

@interfaceAddressBook :NSObject

@property(nonatomic,retain)NSMutableDictionary*TongXunLu;

//初始化方法

-(instancetype)initWithTongXunLu;

//3)添加联系人

-(BOOL)addPerson:(Person*)aPerson;

//4)根据电话查找联系人

-(Person*)findPersonByNumber:(NSString*)number;

//5)根据性别查找联系人 并按年龄升序排序

-(NSArray*)findPersonsBySex:(NSString*)aSex;

//6)根据姓名,更改联系人信息

-(BOOL)changePersonWithName:(NSString*)name

phoneNum:(NSString*)aNum sex:(NSString*)aSex

age:(NSInteger)aAge;

//7)姓名删除联系人

-(BOOL)deletePersonWithName:(NSString*)aPersonName;

//8)删除一个分组

-(BOOL)deleteGroup:(NSString*)aGroupName;

//9)显示所有联系人

-(void)showAll;

@end

AddressBook.m文件如下

//初始化方法

-(instancetype)initWithTongXunLu

{

self=[superinit];

if(self)

{

_TongXunLu= [NSMutableDictionarydictionaryWithCapacity:0];

}

returnself;

}

//功能三:添加联系人

-(BOOL)addPerson:(Person*)aPerson

{

if((aPerson.name==nil)||(aPerson.num==nil))

{

NSLog(@"姓名或电话为空添加失败!!!");

return0;

}else

{

NSString*newKey

=nil;//判断是在已有分组添加和还是创建新组

for(NSString*keyTempin[_TongXunLuallKeys])

{

if((aPerson.groupName== keyTemp)||[aPerson.groupNameisEqualToString:keyTemp])

{

for(Person*nameTempin[_TongXunLuobjectForKey:keyTemp])

{//是否重名

if([aPerson.nameisEqualToString:nameTemp.name])

{

NSLog(@"已经存在了这个姓名,添加联系人失败!!!");

return0;

}

}

newKey=keyTemp;

break;

}

}

if(newKey==nil)

{

NSMutableArray*newArray=[NSMutableArrayarrayWithCapacity:0];

[newArrayaddObject:aPerson];

[_TongXunLusetObject:newArrayforKey:[aPersongroupName]];

NSLog(@"添加成功!!");

return1;

}else

{

[[_TongXunLuvalueForKey:aPerson.groupName]addObject:aPerson];

NSLog(@"添加成功到已存在分组!!");

return1;

}

}

}

//功能四:根据电话查找联系人

-(Person*)findPersonByNumber:(NSString*)number

{

Person*perTemp=nil;

for(NSString*keyin[_TongXunLuallKeys])

{

for(Person*perTin[_TongXunLuobjectForKey:key])

{

if([perT.numisEqualToString:number])

{

perTemp = perT;

break;

}

}

}

if(perTemp==nil)

{

NSLog(@"没有这个号码哦!!");

return0;

}else

{

NSLog(@"根据号码你找的联系人是%@",perTemp);

returnperTemp;

}

}

//功能五:根据性别查找联系人并按年龄升序排序

-(NSArray*)findPersonsBySex:(NSString*)aSex

{

BOOLresult=0;

NSMutableArray*arrayT=[NSMutableArrayarrayWithCapacity:0];

for(NSString*keyin[_TongXunLuallKeys])

{

for(Person*perTin[_TongXunLuobjectForKey:key])

{

if([perT.genderisEqualToString:aSex])

{

[arrayTaddObject:perT];

result=1;

}

}

}

if((result=0))

{

NSLog(@"联系人里面没有性别为%@",aSex);

returnnil;

}else

{

NSSortDescriptor*sortAge

=[[NSSortDescriptoralloc]initWithKey:@"age"ascending:1];

[arrayTsortedArrayUsingDescriptors:[NSArrayarrayWithObjects:sortAge,nil]];

returnarrayT;

}

}

//功能六:根据姓名,更改联系人信息

-(BOOL)changePersonWithName:(NSString*)name

phoneNum:(NSString*)aNum sex:(NSString*)aSex

age:(NSInteger)aAge

{

Person*perTemp=nil;

for(NSString*keyin[_TongXunLuallKeys])

{

//

NSMutableDictionary *dicT =[_TongXunLu mutableCopy];

for(Person*perTin[_TongXunLuobjectForKey:key])

{

if([perT.nameisEqualToString:name])

{

perTemp=perT;

break;

}

}

}

if(perTemp==nil)

{

NSLog(@"联系人里面没有这个( %@ )名字",name);

return0;

}else

{

perTemp.gender=aSex;

perTemp.age=aAge;

perTemp.num=aNum;

NSLog(@"修改成功!!!!!");

return1;

}

}

//功能七:姓名删除联系人

-(BOOL)deletePersonWithName:(NSString*)aPersonName

{

Person*perTemp=nil;

NSString*keyTemp=nil;

for(NSString*keyin_TongXunLu)

{

for(Person*perTin[_TongXunLuobjectForKey:key])

{

if([aPersonNameisEqualToString:perT.name])

{

keyTemp =key;

perTemp=perT;

break;

}

}

}

if(perTemp==nil)

{

NSLog(@"没有找到你要删除的姓名");

return0;

}else

{

[[_TongXunLuobjectForKey:keyTemp]removeObject:perTemp];

NSLog(@"成功删除%@",perTemp);

return1;

}

}

//功能八:删除一个分组

-(BOOL)deleteGroup:(NSString*)aGroupName

{

NSString*keyTemp=nil;

for(NSString*keyin_TongXunLu)

{

if([aGroupNameisEqualToString:key])

{

keyTemp=key;

break;

}

}

if(keyTemp==nil)

{

NSLog(@"没有找到该分组");

}else

{

[_TongXunLuremoveObjectForKey:keyTemp];

NSLog(@"成功删除%@",keyTemp);

}

return1;

}

//功能九:显示所有联系人

-(void)showAll

{

for(NSString*keyin[_TongXunLuallKeys])

{

NSLog(@"\n************联系人通讯录************\n");

for(Person*perTin[_TongXunLuobjectForKey:key])

{

NSLog(@"联系人信息:%@",perT);

}

NSLog(@"上面是%@组",key);

}

}

@end

主函数如下:

#import"Person.h"

#import"AddressBook.h"

intmain(intargc,constchar*argv[]) {

@autoreleasepool{

// insert code

here...

NSLog(@"Hello,

World!");

}

//便利构造器创建四个Person类的实例

NSLog(@"*****使用便利构造器创建四个Person类的实例(联系人)*****\n\n");

Person*per1 =[PersonpersonWithName:@"Lucy"age:21gender:@"女"num:@"123"];

Person*per2 =[PersonpersonWithName:@"Joe"age:17gender:@"男"num:@"456"];

Person*per3 =[PersonpersonWithName:@"Baby"age:27gender:@"女"num:@"789"];

Person*per4 =[PersonpersonWithName:@"Linda"age:21gender:@"女"num:@"000"];

Person*ChongMingPer5=[PersonpersonWithName:@"Linda"age:22gender:@"男"num:@"1000"];

Person*KongHaoPer6=[PersonpersonWithName:@"Linda"age:21gender:@"女"num:nil];

//创建一个通讯录

AddressBook*tongXunLu1 =[[AddressBookalloc]initWithTongXunLu];

//添加联系人

NSLog(@"*********下面添加联系人 展示********\n\n");

[tongXunLu1addPerson:per1];

[tongXunLu1addPerson:per2];

[tongXunLu1addPerson:per3];

[tongXunLu1addPerson:per4];

[tongXunLu1addPerson:ChongMingPer5];

[tongXunLu1addPerson:KongHaoPer6];

//展示所有人

[tongXunLu1showAll];

//查找电话456

NSLog(@"***下面查找电话456的联系人***\n\n");

[tongXunLu1findPersonByNumber:@"456"];

//查找性别 女 年龄升序 打印

NSLog(@"*******下面通讯录里面的女性按照年龄排序*****\n\n");

for(Person*perTempin[tongXunLu1findPersonsBySex:@"女"])

{

NSLog(@"\n**%@**\n",perTemp);

}

//更改联系人信息 根据名字

NSLog(@"***更改联系人信息 根据名字***\n\n");

[tongXunLu1changePersonWithName:@"Linda"phoneNum:@"012"sex:@"女"age:25];

NSLog(@"**检查更改效果,展示所有联系人**");

[tongXunLu1showAll];

//删除Baby

NSLog(@"***下面删除baby**并展示结果**\n\n");

[tongXunLu1deletePersonWithName:@"Baby"];

[tongXunLu1showAll];

//删除L组联系人信息

NSLog(@"***删除L组联系人信息***分组联系人全部没有了***\n\n");

[tongXunLu1deleteGroup:@"L"];

return0;

}

完毕打印!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容