先建立AddressContact类,在AddressContact类的.h文件中,写如下代码:
@interface AddressContact : NSObject
{
NSString *_name;//姓名
NSString *_gender;//性别
NSInteger _age;//年龄
NSString * _number;//电话号码
NSString *_address;//地址
NSString *_namePacket;//分组名称
}
//自定义初始化方法
- (id) initWithName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age number:(NSString *)number address:(NSString *)address namePacket:(NSString *)namePacket;
//setter
- (void)setName:(NSString *)name;
- (void)setGender:(NSString *)gender;
- (void)setAge:(NSInteger)age;
- (void)setNumber:(NSString *)number;
- (void)setAddress:(NSString *)address;
- (void)setNamePacket:(NSString *)namePacket;
//getter
- (NSString *)name;
- (NSString *)gender;
- (NSInteger)age;
- (NSString *)number;
- (NSString *)address;
- (NSString *)namePacket;
//重写从父类继承过来的description方法(显示联系人信息)
- (NSString *)description;
//按姓名升序排序
- (NSComparisonResult)sortName:(AddressContact *)aName;
//按年龄降序排序
- (NSComparisonResult)sortAge:(AddressContact *)aAge;
@end
在AddressContact类的.m文件中写如下代码:
@implementation AddressContact
//自定义初始化方法
- (id) initWithName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age number:(NSString *)number address:(NSString *)address namePacket:(NSString *)namePacket
{
self = [super init];
if (self != nil) {
_name = name;
_gender = gender;
_age = age;
_number = number;
_address = address;
_namePacket = namePacket;
}
return self;
}
//setter
- (void)setName:(NSString *)name
{
_name = name;
}
- (void)setGender:(NSString *)gender
{
_gender = gender;
}
- (void)setAge:(NSInteger)age
{
_age = age;
}
- (void)setNumber:(NSString *)number
{
_number = number;
}
- (void)setAddress:(NSString *)address
{
_address = address;
}
- (void)setNamePacket:(NSString *)namePacket
{
_namePacket = namePacket;
}
//getter
- (NSString *)name
{
return _name;
}
- (NSString *)gender
{
return _gender;
}
- (NSInteger)age
{
return _age;
}
- (NSString *)number
{
return _number;
}
- (NSString *)address
{
return _address;
}
- (NSString *)namePacket
{
return _namePacket;
}
//重写从父类继承过来的description方法(显示联系人信息)
- (NSString *)description
{
return [NSString stringWithFormat:@"%@ %@ %ld %@ %@ %@ ",_name,_gender,_age,_number,_address,_namePacket];
}
//按姓名升序排序
- (NSComparisonResult)sortName:(AddressContact *)aName
{
return [[self name] compare:[aName name]];
}
//按年龄降序排序
- (NSComparisonResult)sortAge:(AddressContact *)aAge
{
if ([self age] > [aAge age]) {
return NSOrderedAscending;
}else if ([self age] == [aAge age]){
return NSOrderedSame;
}else{
return NSOrderedDescending;
}
}
@end
在main.m的文件中创建对象,并写如下代码:
//创建对象
AddressContact *person1 = [[AddressContact alloc] initWithName:@"Xiaoxiao" gender:@"m" age:21 number:@"18536968954" address:@"河南郑州" namePacket:@"X"];
AddressContact *person2 = [[AddressContact alloc] initWithName:@"Daxiao" gender:@"m" age:29 number:@"18536969954" address:@"河南郑州" namePacket:@"D"];
AddressContact *person3 = [[AddressContact alloc] initWithName:@"Wangda" gender:@"f" age:23 number:@"18536964554" address:@"北京市" namePacket:@"W"];
AddressContact *person4 = [[AddressContact alloc] initWithName:@"Xiaoyu" gender:@"f" age:12 number:@"18126968954" address:@"河南郑州" namePacket:@"X"];
AddressContact *person5 = [[AddressContact alloc] initWithName:@"Wanyu" gender:@"m" age:32 number:@"18536961234" address:@"上海市" namePacket:@"W"];
AddressContact *person6 = [[AddressContact alloc] initWithName:@"Dangho" gender:@"f" age:16 number:@"18536968954" address:@"河南郑州" namePacket:@"D"];
AddressContact *person7 = [[AddressContact alloc] initWithName:@"Aunho" gender:@"f" age:24 number:@"18512968954" address:@"河南" namePacket:@"A"];
AddressContact *person8 = [[AddressContact alloc] initWithName:@"Wangxiao" gender:@"m" age:36 number:@"18536965436" address:@"郑州" namePacket:@"W"];
AddressContact *person9 = [[AddressContact alloc] initWithName:@"Aoxiao" gender:@"m" age:23 number:@"23536968954" address:@"河南郑州" namePacket:@"A"];
AddressContact *person10 = [[AddressContact alloc] initWithName:@"Aanda" gender:@"f" age:25 number:@"18565768954" address:@"河南郑州" namePacket:@"A"];
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:person1,person4, nil];
NSMutableArray *arr2 = [NSMutableArray arrayWithObjects:person2,person6, nil];
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:person3,person5,person8, nil];
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:person7,person9,person10, nil];
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:arr1,@"X",arr2,@"D",arr3,@"W",arr4,@"A", nil];
//添加联系人
AddressContact *person11 = [[AddressContact alloc] initWithName:@"Bada" gender:@"f" age:39 number:@"18565766544" address:@"河南郑州" namePacket:@"A"];
NSMutableArray *Arr = [[NSMutableArray alloc] init];
if ([[person11 name] isEqualToString:@"" ]||[[person11 number] isEqualToString:@""] ) {
NSLog(@"添加失败");
}else{
NSString *str = [[person11 name] substringWithRange:NSMakeRange(0, 1)];//获取联系人姓名首字母
for (NSString *key in dic) {
if ([key isEqualToString:str]) {
[[dic objectForKey:key] addObject:person11];
}else{
[Arr addObject:person11];
}
}
for (int i = 0; i < [Arr count] + 1; i++) {
[Arr removeObjectAtIndex:0];
}
[dic setObject:Arr forKey:str];
NSLog(@"添加成功");
}
// NSLog(@"%@ ",dic);
//获取某个分组名称下的所有联系人,并按姓名升序排序
char str1[20] = {0};
NSLog(@"请输入分组的名称:");
scanf("%s",str1);
NSString *str2 = [NSString stringWithUTF8String:str1];//将字符串转换为OC中字符串
for ( NSString *key1 in dic) {
if ([key1 isEqualToString:str2]) {
NSMutableArray * arr = [dic objectForKey:key1];
[arr sortUsingSelector:@selector(sortName:)];//按姓名升序排序
NSLog(@"%@",arr);
}
}
// NSLog(@"%@ ",dic);
//从通讯录中根据电话号码搜索联系人
char str3[20] = {0};
NSLog(@"请输入电话号码:");
scanf("%s",str3);
NSString *str4 = [NSString stringWithUTF8String:str3];//将字符串转换为OC中字符串
for ( NSString *key2 in dic) {
for ( AddressContact *str5 in [dic objectForKey:key2]) {
if ([[str5 number] isEqualToString:str4]) {//两层forin,判断电话号码是否相等
NSLog(@"%@ ",str5 );
}
}
}
//NSLog(@"%@ ",dic);
//获取所有女性的联系人,并按年龄降序排序
char str6[20] = {0};
NSLog(@"请输入获取联系人的性别(男m,女f):");
scanf("%s",str6);
NSString *str7 = [NSString stringWithUTF8String:str6];//将字符串转换为OC中字符串
NSMutableArray *arr = [[NSMutableArray alloc] init];
for ( NSString *key3 in dic) {
for ( AddressContact *str8 in [dic objectForKey:key3]) {
if ([[str8 gender] isEqualToString:str7]) {
[arr addObject:str8];//将取出的信息存入一个数组中
}
}
}
[arr sortUsingSelector:@selector(sortAge:)];//按年龄降序排序
NSLog(@"%@",arr);
//NSLog(@"%@ ",dic);
//根据姓名删除联系人
char str9[20] = {0};
NSLog(@"请输入要删除的联系人的姓名:");
scanf("%s",str9);
NSString *str10 = [NSString stringWithUTF8String:str9];//将字符串转换为OC中字符串
NSString *str11 =[str10 substringWithRange:NSMakeRange(0,1)];
NSMutableArray *arr6 = [dic objectForKey:str11];//获取数组
for (int j = 0; j <[arr6 count] ;) {
AddressContact *a =[arr6 objectAtIndex:j];//获取所得数组中的对象
if ([[a name] isEqualToString:str10]) {
[arr6 removeObject:a];
<span style="font-family: Arial, Helvetica, sans-serif;"> NSLog(@"删除成功"); </span>
}else{
j ++;
}
}
//NSLog(@"%@ ",dic);
//删除某个分组的全部联系人
char str12[20] = {0};
NSLog(@"请输入要删除的分组:");
scanf("%s",str12);
NSString *str13 = [NSString stringWithUTF8String:str12];//将字符串转换为OC中字符串
[dic removeObjectForKey:str13]; //删除分组
NSLog(@"删除成功");
NSLog(@"所有联系人信息为: ");
for (NSString *b in dic) {
for (AddressContact *c in [dic objectForKey:b]) {//输出所有人信息
NSLog(@"%@ ",c);
}
}