用OC语言完成简易通讯录(实现增删改查)功能.
(注:使用MRC)
一、功能描述:
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
#import<Foundation/Foundation.h>@interfacePerson:NSObject//声明属性@property(nonatomic,retain)NSString*name;@property(nonatomic,retain)NSString*gender;@property(nonatomic,assign)intage;@property(nonatomic,retain)NSString*phoneNumber;@property(nonatomic,retain)NSString*groupName;//声明初始化方法-(id)initWithPersonName:(NSString*)nameage:(int)agegender:(NSString*)genderphoneNumber:(NSString*)phoneNumbergroupName:(NSString*)groupName;//便利构造器+(id)personWithName:(NSString*)nameage:(int)agegender:(NSString*)genderphoneNumber:(NSString*)phoneNumbergroupName:(NSString*)groupName;@end
Person.m
#import"Person.h"@implementationPerson-(id)initWithPersonName:(NSString*)nameage:(int)agegender:(NSString*)genderphoneNumber:(NSString*)phoneNumbergroupName:(NSString*)groupName{if(self=[superinit]){self.name=name;self.age=age;self.phoneNumber=phoneNumber;self.gender=gender;self.groupName=groupName;}returnself;}+(id)personWithName:(NSString*)nameage:(int)agegender:(NSString*)genderphoneNumber:(NSString*)phoneNumbergroupName:(NSString*)groupName{Person*person=[[[Personalloc]initWithPersonName:nameage:agegender:genderphoneNumber:phoneNumbergroupName:groupName]autorelease];returnperson;}//重写父类的方法,默认情况是打印对象的地址。-(NSString*)description{return[NSStringstringWithFormat:@"姓名:%@,性别:%@,年龄:%d,电话:%@,分组名:%@",_name,_gender,_age,_phoneNumber,_groupName];}-(void)dealloc{NSLog(@"%s",__FUNCTION__);[_namerelease];[_genderrelease];[_phoneNumberrelease];[_groupNamerelease];[superdealloc];}@end
AddressBook.h
#import<Foundation/Foundation.h>#import"Person.h"@interfaceAddressBook:NSObject//声明一个字典,用来存储联系人@property(nonatomic,retain)NSMutableDictionary*allPersonDic;//初始化方法-(id)initWithMutableDic:(NSMutableDictionary*)dic;//声明方法,添加联系人-(BOOL)addPerson:(Person*)aPerson;//按照电话查找某个联系人-(Person*)findPersonWithPhoneNumber:(NSString*)aPhoneNumber;//按性别查找,并且排序-(NSArray*)findPersonWithSex:(NSString*)sex;//根据姓名,来修改联系人的信息-(BOOL)changePersonWithName:(NSString*)namephoneNumber:(NSString*)phoneNumbersex:(NSString*)sexage:(int)age;//删除联系人-(BOOL)deletePersonWithName:(NSString*)name;//删除分组-(BOOL)deleteGroupName:(NSString*)aGroupname;//打印所有的人-(void)showAll;@end
AddressBook.m
#import"AddressBook.h"#import"NSString+Character.h"@implementationAddressBook-(id)initWithMutableDic:(NSMutableDictionary*)dic{if(self=[superinit]){_allPersonDic=dic;}returnself;}-(void)dealloc{[_allPersonDicrelease];[superdealloc];}//实现添加联系人的方法-(BOOL)addPerson:(Person*)aPerson{//第一步,先判断名字和电话if((aPerson.name==nil||aPerson.phoneNumber==nil)||([aPerson.nameisEqualToString:@""]||[aPerson.phoneNumberisEqualToString:@""])){NSLog(@"信息不完整,添加失败");returnNO;}//获取名字的首字母,并且大写。当作字典的key(键)NSString*keyStr=[aPerson.nameuppercaseFirstLetter];//通过键来查找数组NSMutableArray*tempArray=[_allPersonDicobjectForKey:keyStr];if(!tempArray){//给数组分配空间tempArray=[[NSMutableArrayalloc]init];//创建键值对[_allPersonDicsetObject:tempArrayforKey:keyStr];}//检查一下是否有重名的for(inti=0;i<[tempArraycount];i++){if([aPerson.nameisEqualToString:[tempArray[i]name]]){NSLog(@"有重名的,添加失败");returnNO;}}//把联系人加进创建好的数组里面[tempArrayaddObject:aPerson];returnYES;}//实现按照号码找人的方法-(Person*)findPersonWithPhoneNumber:(NSString*)aPhoneNumber{//第一步,把字典里面的键拿出来,通过键来取值for(NSString*keyStrin_allPersonDic){//通过objectForKey:这个方法,把字典里面的数组拿出来NSMutableArray*tempArray=[_allPersonDicobjectForKey:keyStr];//遍历拿出来的数组,让数组里面每一个人的号码,和形参的值进行比较。for(Person*pintempArray){if([p.phoneNumberisEqualToString:aPhoneNumber]){NSLog(@"人找到了");returnp;}}}NSLog(@"没有找到该联系人");returnnil;}//实现方法-(NSArray*)findPersonWithSex:(NSString*)sex{//声明数组,用来储存性别相同的人NSMutableArray*mutableArray=[[NSMutableArrayalloc]init];//然后再开始,遍历字典,拿到键值,遍历数组for(NSString*keyStrin_allPersonDic){NSMutableArray*array=[_allPersonDicobjectForKey:keyStr];for(Person*personinarray){//跟上一方法不同的地方if([person.genderisEqualToString:sex]){[mutableArrayaddObject:person];}}}[mutableArraysortUsingComparator:^NSComparisonResult(idobj1,idobj2){Person*per1=(Person*)obj1;Person*per2=(Person*)obj2;if(per1.age>per2.age){returnNSOrderedDescending;}elseif(per1.age<per2.age){returnNSOrderedAscending;}returnNSOrderedSame;}];//[mutableArraysortUsingSelector:@selector(compare:)];returnmutableArray;}//实现修改方法-(BOOL)changePersonWithName:(NSString*)namephoneNumber:(NSString*)phoneNumbersex:(NSString*)sexage:(int)age{//第一步,先遍历for(NSString*keyStrin_allPersonDic){//通过key来取值NSMutableArray*tempArray=[_allPersonDicobjectForKey:keyStr];//开始遍历数组for(Person*personintempArray){if([person.nameisEqualToString:name]){//找到人后,开始修改,把传进来的新的信息赋值给这个人person.phoneNumber=phoneNumber;person.gender=sex;person.age=age;NSLog(@"赋值成功");returnYES;}}}returnNO;}-(BOOL)deletePersonWithName:(NSString*)name{for(NSString*keyStrin_allPersonDic){NSMutableArray*tempArray=[_allPersonDicobjectForKey:keyStr];//遍历数组for(Person*personintempArray){if([person.nameisEqualToString:name]){[tempArrayremoveObject:person];NSLog(@"找到要删除的人了");//如果这个人,是分组里面最后一个,就把分组也删除if([tempArraycount]==0){//在字典里面删除键值对[_allPersonDicremoveObjectForKey:keyStr];NSLog(@"数组已经被删除");}returnYES;}}}NSLog(@"没有找到");returnNO;}//实现删除分组的方法-(BOOL)deleteGroupName:(NSString*)aGroupname{//先判断,有么有这个分组for(NSString*keyStrin_allPersonDic){if([keyStrisEqualToString:aGroupname]){//先通过传进来的键,来获取字典里面的值(数组)NSMutableArray*tempArray=[_allPersonDicobjectForKey:aGroupname];//删完这个数组里面的所有元素[tempArrayremoveAllObjects];//删除字典里面的键值对,通过键来删除[_allPersonDicremoveObjectForKey:aGroupname];NSLog(@"找到分组,删除成功");returnYES;}}NSLog(@"没有这个分组");returnNO;}//打印所有人-(void)showAll{for(NSString*keyin_allPersonDic){NSMutableArray*array=[_allPersonDicobjectForKey:key];for(Person*personinarray){NSLog(@"%@",person);}}}@end
NSString+Character.h
#import<Foundation/Foundation.h>@interfaceNSString(Character)-(NSString*)uppercaseFirstLetter;@end
NSString+Character.m
@implementationNSString(Character)-(NSString*)uppercaseFirstLetter{return[[selfuppercaseString]substringToIndex:1];}@end
main.m
#import<Foundation/Foundation.h>#import"Person.h"#import"AddressBook.h"intmain(intargc,constchar*argv[]){//创建三个对象,就是三个人啊Person*person=[[Personalloc]initWithPersonName:@"Auroua"age:21gender:@"girl"phoneNumber:@"1352345678"groupName:@"friend"];NSLog(@"%@",person);Person*person1=[[Personalloc]initWithPersonName:@"Lily"age:18gender:@"girl"phoneNumber:@"18638520107"groupName:@"firend"];Person*person4=[[Personalloc]initWithPersonName:@"DaShi"age:18gender:@"boy"phoneNumber:@"110"groupName:@"fff"];//声明完容器类之后,一定给它开辟空间。AddressBook*addressBook=[[AddressBookalloc]initWithMutableDic:[NSMutableDictionarydictionary]];//判断person对象是否加进字典里面BOOLresult=[addressBookaddPerson:person];NSLog(@"result=%@",result?@"YES":@"NO");//判断person1对象是否加进字典里面BOOLresult1=[addressBookaddPerson:person1];NSLog(@"result1=%@",result1?@"YES":@"NO");//判断person11对象是否加进字典里面BOOLresult11=[addressBookaddPerson:person4];NSLog(@"result11=%@",result11?@"YES":@"NO");//查找联系人Person*tempPerson=[addressBookfindPersonWithPhoneNumber:@"18638520107"];NSLog(@"%@",tempPerson);//接收排序结束后的数组NSArray*array=[addressBookfindPersonWithSex:@"girl"];NSLog(@"排序后的结果");for(Person*perinarray){NSLog(@"%@",per);}//改变联系人信息,判断是否改变成功BOOLresult2=[addressBookchangePersonWithName:@"Lily"phoneNumber:@"123"sex:@"boy"age:40];NSLog(@"%@",result2?@"YES":@"NO");//按名字删除一个联系人,删除了LilyBOOLresult3=[addressBookdeletePersonWithName:@"Lily"];NSLog(@"%@",result3?@"YES":@"NO");//刚刚删除了Lily,现在把Lily加进来[addressBookaddPerson:person1];//删除某一个分组BOOLresult5=[addressBookdeleteGroupName:@"D"];NSLog(@"%@",result5?@"YES":@"NO");//展示分组里面的所有的信息[addressBookshowAll];return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。