天天看点

OC习题 通讯录 (知识点: 字典 封装 字符串 数组 枚举)

main.m

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Contact *Yang = [[Contact alloc]initWithName:@"yangyang" tel:@158 age:16 sex:@"m"];

        Contact *Na = [[Contact alloc]initWithName:@"nana" tel:@139 age:16 sex:@"w"];

        Contact *Li = [[Contact alloc]initWithName:@"LiYang" tel:@145 age:23 sex:@"m"];

        Contact *Han = [[Contact alloc]initWithName:@"HanLiang" tel:@128 age:12 sex:@"w"];

        Contact *Zhao = [[Contact alloc]initWithName:@"ZhaoMing" tel:@178 age:24 sex:@"m"];

        Contact *Sun = [[Contact alloc]initWithName:@"SunYang" tel:@189 age:19 sex:@"m"];

        Contact *YangLi = [[Contact alloc]initWithName:@"YangLi" tel:@197 age:17 sex:@"w"];

        Contact *HanHong = [[Contact alloc]initWithName:@"HanHong" tel:@146 age:34 sex:@"w"];

        Contact *LiHua = [[Contact alloc]initWithName:@"LiHua" tel:@176 age:28 sex:@"m"];

    //创建通讯录对象

        ContactBook *contactbook = [[ContactBook alloc]init];

        //然后往通讯录添加联系人

        [contactbook addPerson:Yang];

        [contactbook addPerson:YangLi];

        [contactbook addPerson:Na];

        [contactbook addPerson:Li];

        [contactbook addPerson:Zhao];

        [contactbook addPerson:Sun];

        [contactbook addPerson:HanHong];

        [contactbook addPerson:Han];

        [contactbook addPerson:LiHua];

        //查找

        NSLog(@"1 查找某个分组下的所有联系人(Y)");

        [contactbook FindGroupName:@"Y"];

        //通过Tel查找

        NSLog(@"2 通过tel查找联系人(158)");

        Contact *contact = [contactbook FindPersonByTel:@158];

        NSLog(@"%@",contact);

        //获取所有的女性联系人

        NSLog(@"All female");

        NSArray *female = [contactbook AllFemale];

        //将已经排好序的女性联系人枚举遍历输出

        for (Contact *contact in female) {

            NSLog(@"name: %@ age: %ld",contact.name,contact.age);

        }

        NSLog(@"删除某个联系人(HanHong)");

        [contactbook deleteByName:@"HanHong"];

        NSLog(@"删除对应分组(L)");

        [contactbook deleteGroup:@"L"];

    }

    return 0;

}

Contact.m

#import "Contact.h"

@implementation Contact

//初始化

-(id)initWithName:(NSString *)name

              tel:(NSNumber *)tel

              age:(NSInteger )age

              sex:(NSString *)sex

{

    if (self = [super init]) {

        _name = name ;

        _age = age ;

        _tel = tel;

        _sex = sex;

        NSString *FirstName = [[name substringToIndex:1]uppercaseString];

        _Group = FirstName;

    }

    return self;

}

//显示所有人信息

-(void)ShowAllPerson

{

    NSLog(@"name:%@ age:%ld tel:%@ sex:%@",_name,_age,_tel,_sex);

}

//重写description方法

-(NSString *)description

{

  return [NSString stringWithFormat:@"name: %@ age: %ld tel: %@ sex: %@",_name,_age,_tel,_sex];

}

//通过姓名进行升序排序

-(NSComparisonResult)CompareByName:(Contact *)anotherContact

{

    return [self.name compare:anotherContact.name];

}

//通过年龄进行降序排序

-(NSComparisonResult)CompareByAge:(Contact *)anotherContact

{

    if (self.age > anotherContact.age) {

        return NSOrderedAscending;

    }else if(self.age < anotherContact.age)

    {

        return NSOrderedDescending;

    }

    return NSOrderedSame;

}

@end

"ContactBook.m"

#import "ContactBook.h"

#import "Contact.h"

@implementation ContactBook

//初始化

-(id)init

{

    if (self = [super init]) {

        //当通讯录创建的时候就需一个容器

        _ContDic = [[NSMutableDictionary alloc]init];

    }

    return self;

}

//添加联系人

-(void)addPerson:(Contact *)contact

{

    if (contact.name == nil || contact.tel == nil) {

        NSLog(@"add person error");

    }else

    {

      //添加

        //先获取对应的分组

        NSMutableArray *group = [_ContDic valueForKey:contact.Group];

        if (group == nil) {

            //如果分组名是空的 那就新创建一个分组

            group = [NSMutableArray array];

            //然后 将创建的分组添加到通讯录字典

            [_ContDic setValue:group forKey:contact.Group];

        }

        //若分组名不是空的 则将其添加到对应的分组

        [group addObject:contact];

    }

}

//查找 给定的分组联系人

-(void)FindGroupName:(NSString *)Group

{

    NSMutableArray *group = [_ContDic valueForKey:Group];

    //通过 姓名 升序

    [group sortUsingSelector:@selector(CompareByName:)];

    //枚举输出

    for (Contact *contact in group) {

        [contact ShowAllPerson];

    }

}

//搜索

-(Contact *)FindPersonByTel:(NSNumber *)tel

{

//遍历通讯录字典

    for (NSString *groupName in _ContDic) {

        //通过分组名 获取对应的分组

        NSMutableArray *group = [_ContDic valueForKey:groupName];

        //遍历分组 获取联系人

        for (Contact *contact in group) {

            if ([contact.tel isEqualToNumber:tel]) {

                return contact;

            }

        }

    }

    NSLog(@"Find error! No people");

    return nil;

}

//获取所有女性联系人

-(NSArray *)AllFemale

{

    NSMutableArray *female = [[NSMutableArray alloc]init];

    for (NSString *groupname in _ContDic) {

        NSMutableArray *group = [_ContDic valueForKey:groupname];

        for (Contact *contact in group) {

            //通过性别进行筛选

            if ([contact.sex isEqualToString:@"m"]) {

                //将符合条件的联系人 放入数组

                [female addObject:contact];

            }

        }

    }

    //按照年龄进行排序

    [female sortUsingSelector:@selector(CompareByAge:)];

    return female;

}

-(void)deleteByName:(NSString *)name

{

    //遍历通讯录字典

    for (NSString *groupName in _ContDic) {

        //通过分组名 获取对应的分组

        NSMutableArray *group = [_ContDic valueForKey:groupName];

        //遍历分组 获取联系人

        for (int i=0; i<group.count; i++) {

            if ([[group[i] name] isEqualToString:name]) {

                [group removeObject:group[i]];

                NSLog(@"delete %@ success",name);

                NSLog(@"%@",_ContDic);

            }

        }

    }

}

-(BOOL)deleteGroup:(NSString *)Group

{

    [_ContDic removeObjectForKey:Group];

    NSLog(@"剩下的联系人:%@",_ContDic);

    return YES;

}

@end