OC 第六讲 通讯录作业

/* 实现中等难度通讯录。需求:

        1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息

        2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。

        3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。

        4、获取某个分组名称下所有联系人,并且按照姓名升序排列。

        5、从通讯录中根据电话号码搜索联系人。

        6、获取所有女性的联系人,并且按照年龄的降序排列。

        7、根据姓名删除某个联系人。

        8、删除某个分组的全部联系人。*/


AddressContact.h


#import <Foundation/Foundation.h>


@interface AddressContact : NSObject{

    NSString * _name;

    NSString * _sex;

    NSString * _telNum;

    NSString * _address;

    NSString * _group;

    int _age;

}

//初始化

- (id)initWithName:(NSString *)name telNum:(NSString *)telNum;

+ (id)initWithName:(NSString *)name telNum:(NSString *)telNUm;

//显示该联系人信息

- (void)showInfo;

//显示所有联系人信息

- (void)showAllInfo:(NSMutableDictionary *)addressBook;

//添加联系人到通讯录

- (void)addToAddressBook:(NSMutableDictionary *)adressBook;

//显示某个分组下的所有联系人的姓名

- (void)getAllByKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook;

//获得某个分组下的所有联系人

- (NSMutableArray *)getAllAddressContectByGroup:(NSString *)groupName ofAddressBook:(NSMutableDictionary *)addressBook;

//根据电话号码搜索,显示目标联系人所有信息

- (void)getAllInfoByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook;

//根据电话号码搜索,获取所有联系人的数组

- (NSMutableArray *)getAllAddressContectsByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook;

//删除某个分组所有联系人

- (void)deleteAllWithKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook;

//按姓名删除某个联系人

- (void)deleteWithName:(NSString *)name ofAddressBook:(NSMutableDictionary *)addressBook;


- (NSString *)getName;

- (NSString *)getSex;

- (NSString *)getTelNum;

- (NSString *)getAddress;

- (NSString *)getGroup;

- (int)getAge;

- (void)setAge:(int)age;

@end



AddressContact.m


#import "AddressContact.h"


@implementation AddressContact

//初始化

- (id)initWithName:(NSString *)name telNum:(NSString *)telNum{

    self = [super init];

    if(self){

        _name = name;

        _telNum = telNum;

    }

    return self;

}

+ (id)initWithName:(NSString *)name telNum:(NSString *)telNUm{

    AddressContact * a = [[AddressContact alloc]initWithName:name telNum:telNUm];

    return a;

}

- (NSString *)getName{

    return _name;

}

- (NSString *)getSex{

    return _sex;

}

- (NSString *)getTelNum{

    return _telNum;

}

- (NSString *)getAddress{

    return _address;

}

- (NSString *)getGroup{

    return _group;

}

- (int)getAge{

    return _age;

}

- (void)setAge:(int)age{

    _age = age;

}

//显示该联系人信息

- (void)showInfo{

    NSLog(@"姓名:%@,性别:%@,联系方式:%@,地址:%@,分组:%@,年龄:%d"

          ,[self getName],[self getSex],[self getTelNum],[self getAddress],[self getGroup],[self getAge]);


}

//显示所有联系人信息

- (void)showAllInfo:(NSMutableDictionary *)addressBook{

    for(NSString * a in addressBook){

        for(AddressContact * ac in [addressBook valueForKey:a]){

            [ac showInfo];

        }

    }

}

//添加联系人到通讯录

- (void)addToAddressBook:(NSMutableDictionary *)adressBook{

    if(!_name || !_telNum){

        NSLog(@"添加失败!");

    }else{

        //根据名字首字母获得分组名称

        NSString * key = [_name substringToIndex:1];

        //补充分组信息

        _group = key;

        //根据分组名称获取对应的联系人数组

        NSMutableArray * array = [adressBook valueForKey:key];

        //将联系人添加到对应数组中

        [array addObject:self];

    }

}

//显示某个分组下得所有联系人的姓名

- (void)getAllByKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook{

    for(AddressContact * a in [addressBook valueForKey:key]){

        NSLog(@"%@",[a getName]);

    }

}

//获得某个分组下的所有联系人对象,并按姓名升序排序

- (NSMutableArray *)getAllAddressContectByGroup:(NSString *)groupName ofAddressBook:(NSMutableDictionary *)addressBook{

    

    NSMutableArray * names = [addressBook valueForKey:groupName];

    

    //不可变数组的排序方法

    //names = (NSMutableArray *)[names sortedArrayUsingSelector:@selector(compareWithName:)];

    //可变数组的排序方法

    [names sortUsingSelector:@selector(compareWithAge:)];

    

    return names;

}

//根据电话号码搜索,显示联系人所有信息

- (void)getAllInfoByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook{

    for(NSString * a in [addressBook allKeys]){

        for(AddressContact * ac in [addressBook valueForKey:a]){

            if([[ac getTelNum]isEqualToString:telNum]){

                //调用已有方法,显示目标联系人的所有信息

                [ac showInfo];

            }

        }

    }

}

//根据电话号码搜索,获取所有联系人的数组

- (NSMutableArray *)getAllAddressContectsByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook{

    NSMutableArray * arr = [NSMutableArray array];

    for (NSString * a in addressBook) {

        for (AddressContact * ac in [addressBook valueForKey:a]) {

            if ([[ac getTelNum] isEqualToString:telNum]) {

                [arr addObject:ac];

            }

        }

    }

    arr = (NSMutableArray *)[arr sortedArrayUsingSelector:@selector(compareWithName:)];

    return arr; //返回联系人数组

}

//删除某个分组所有联系人

- (void)deleteAllWithKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook{

    [addressBook removeObjectForKey:key];

}

//按姓名删除某个联系人

- (void)deleteWithName:(NSString *)name ofAddressBook:(NSMutableDictionary *)addressBook{

    NSString * key = [name substringToIndex:1];

    for(AddressContact * a in [addressBook valueForKey:key]){

        if([[a getName]isEqualToString:name]){

            [[addressBook valueForKey:key] removeObject:a];

        }

    }

}

//按姓名比较联系人

- (NSComparisonResult)compareWithName:(AddressContact *)anotherAC{

    return [[self getName] compare:[anotherAC getName]];

}


- (NSComparisonResult)compareWithAge:(AddressContact *)anotherAC{

//    int result = 0;

//    if ([self getAge] < [anotherAC getAge]) {

//        result = -1;

//    } else if ([self getAge] == [anotherAC getAge]){

//        result = 0;

//    } else {

//        result = 1;

//    }

//    return result * -1;

    return [self getAge] > [anotherAC getAge]; //>:升序 <:降序

}

@end




main.m

@autoreleasepool {

        

        AddressContact * p1 = [AddressContact initWithName:@"Wang Yun Feng" telNum:@"18686886570"];

        [p1 setAge:23];

        AddressContact * p2 = [AddressContact initWithName:@"Zang Wang Wang" telNum:@"18686886570"];

        [p2 setAge:22];

        AddressContact * p3 = [AddressContact initWithName:@"Ha Ha Ha" telNum:@"13354288401"];

        [p3 setAge:24];

        AddressContact * p4 = [AddressContact initWithName:@"Wang Hui Jun" telNum:@"13354288401"];

        [p4 setAge:21];

        AddressContact * p5 = [AddressContact initWithName:@"Wang Jian Nan" telNum:@"13333333333"];

        [p5 setAge:22];

        

        NSMutableDictionary * addressBook = [NSMutableDictionary dictionary];

        for(int i = 'A'; i <= 'Z'; i++){

            NSMutableArray * value = [NSMutableArray array];

            NSString * key = [NSString stringWithFormat:@"%c",i];

            [addressBook setValue:value forKey:key];

        }

        //将信息添加进通讯录

        [p1 addToAddressBook:addressBook];

        [p2 addToAddressBook:addressBook];

        [p3 addToAddressBook:addressBook];

        [p4 addToAddressBook:addressBook];

        [p5 addToAddressBook:addressBook];

        

        //按首字母查找所有信息

//        [p1 getAllByKey:@"W" ofAddressBook:addressBook];

        NSMutableArray * acs = [p1 getAllAddressContectByGroup:@"W" ofAddressBook:addressBook];

        for (AddressContact * ac in acs) {

            [ac showInfo];

        }

        //显示通讯录中所有信息

        //[p1 showAllInfo:addressBook];

        //通过电话号码搜索联系人

        //[p1 getAllInfoByTelNum:@"18686886570" ofAddressBook:addressBook];

        //删除某个分组下得所有联系人

        //[p1 deleteAllWithKey:@"Z" ofAddressBook:addressBook];

        //[p1 showAllInfo:addressBook];

        //按姓名删除联系人

        //[p1 deleteWithName:@"Zang Wang Wang" ofAddressBook:addressBook];

        //[p1 showAllInfo:addressBook];

    }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值