网上看到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;
}
完毕打印!!