[TwistedFate]中等通讯录

AddressPerson.h

{
    NSString *_name;
    NSString *_gender;
    NSString *_phoneNumber;
    NSString *_address;
    NSString *_groupName;
    NSInteger _age;
}

- (instancetype)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber;

- (void)setGroupName:(NSString *)groupName;
- (NSString *)getGroupName;

- (void)setGender:(NSString *)gender;
- (NSString *)getGender;

- (NSString *)getName;
- (NSString *)getPhoneNumber;

- (void)setAge:(NSInteger)age;
- (NSInteger)getAge;

- (void)introduce;
- (NSString *)description;

AddressPerson.m

- (instancetype)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber
{
    self = [super init];
    if (self) {

        _name = name;
        _phoneNumber = phoneNumber;

    }

    return self;
}

- (void)setGroupName:(NSString *)groupName
{
    _groupName = groupName;
}

- (NSString *)getGroupName
{
    return _groupName;
}

- (void)setGender:(NSString *)gender
{
    _gender = gender;
}


- (NSString *)getGender
{
    return _gender;
}

- (NSString *)getName
{
    return _name;
}

- (NSString *)getPhoneNumber
{
    return _phoneNumber;
}

- (void)setAge:(NSInteger)age
{
    _age = age;
}

- (NSInteger)getAge
{
    return _age;
}

- (void)introduce
{
    NSLog(@"name:%@ - nubmer:%@",_name,_phoneNumber);
}


- (NSString *)description
{

    return [NSString stringWithFormat:@"name:%@ - number:%@ - sex:%@ - age:%ld",_name,_phoneNumber,_gender,_age];

}

AddressBook.h

{

    NSMutableDictionary *_allPersonDic;//字典,管理所有联系人,分组管理
}

//添加新联系人
- (void)addNewAddressPerson:(AddressPerson *)person;

//根据组名,选择某组联系人
- (NSMutableArray *)selectGroupWithGroupName:(NSString *)groupName;

//根据联系方式搜索联系人
- (AddressPerson *)selectAddressPersonWithPhoneNumber:(NSString *)phoneNumber;

//获取所有女性联系人
- (NSMutableArray *)selectFemaleAddressPerson;
- 
//根据姓名删除某个联系人
- (void)deleteAddressPersonWithName:(NSString *)name;

//根据组名,删除某个分组
- (void)deleteGroupWithGroupName:(NSString *)groupName;

//展示通讯录中所有联系人
- (void)showAllAddressPerson;

AddressBook.h

- (instancetype)init
{
    self = [super init];
    if (self) {

        //该对象初始化时,创建数据对象
        _allPersonDic = [[NSMutableDictionary alloc] initWithCapacity:30];
    }
    return self;
}

//添加新联系人
- (void)addNewAddressPerson:(AddressPerson *)person
{
    //先验证新添加的联系人是否符合标准
    if (nil == [person getName] || nil == [person getPhoneNumber]) {

        NSLog(@"姓名或联系方式为空");
        return;
    }

    //添加联系人
    //如果这个数组 取出不为空 也就是有联系人
    //有联系人 说明啥?
    //这个键值对 已经存在了 直接把联系人 存进去就行了
    //没联系人 数组是空的
    //先创建可变数组 把人放进去 然后 和key一起添加到字典里
    NSMutableArray * oneGroup = [_allPersonDic objectForKey:[person getGroupName]];

    if (nil == oneGroup) {
        //没有这个分组

        //创建新的分组并添加联系人
        oneGroup = [NSMutableArray arrayWithCapacity:30];
        [oneGroup addObject:person];
        //将新的分组添加到字典中
        [_allPersonDic setObject:oneGroup forKey:[person getGroupName]];

    }else{
        //有这个分组
        [oneGroup addObject:person];
    }

    NSLog(@"add person = %@",_allPersonDic);
}

//根据组名,选择某组联系人
- (NSMutableArray *)selectGroupWithGroupName:(NSString *)groupName
{

    //通过组名从字典中取出分组
    NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];

    if (nil != oneGroup) {
        //搜索的分组存在
        [oneGroup sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            AddressPerson * p1 = (AddressPerson *)obj1;
            AddressPerson * p2 = (AddressPerson *)obj2;

            return [[p1 getName] compare:[p2 getName]];

        }];

        return oneGroup;
    }

    return nil;

}
//根据联系方式搜索联系人
- (AddressPerson *)selectAddressPersonWithPhoneNumber:(NSString *)phoneNumber
{

    //快速枚举,获取所有分组
    for (NSString * groupName in _allPersonDic) {

        //根据枚举得到的分组名,从字典中获取对应的分组
        NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];

        //枚举数组,获取数组中的所有联系人
        for (AddressPerson * p in oneGroup) {

//        数组中 有3个元素 首元素删了
            // 快速遍历 一般 只用来打印


            //验证联系人是否符合条件
            if (YES == [[p getPhoneNumber] isEqualToString:phoneNumber]) {

                //因为电话号码不重复,因此找到符合条件的联系人后,直接返回
                return p;
            }

        }

    }


    return nil;
}


//获取所有女性联系人
- (NSMutableArray *)selectFemaleAddressPerson
{
    //定义空的,可变的数组,存储查询到的女性联系人
    NSMutableArray * femaleArray = [NSMutableArray arrayWithCapacity:30];

    for (NSString * groupName in _allPersonDic) {

        //根据枚举得到的分组名,从字典中获取对应的分组
        NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];

        //枚举数组,获取数组中的所有联系人
        for (AddressPerson * p in oneGroup) {

            //验证联系人是否符合条件
            if (YES == [[p getGender] isEqualToString:@"女"]) {

                //如果符合条件,添加到数组中存储
                [femaleArray addObject:p];
            }
        }
    }

    if ([femaleArray count] > 0) {
        //如果找到人了

        [femaleArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            AddressPerson * p1 = (AddressPerson *)obj1;
            AddressPerson * p2 = (AddressPerson *)obj2;

            if ([p1 getAge] < [p2 getAge]) {
                return NSOrderedDescending;
            }else if ([p1 getAge] > [p2 getAge]){
                return NSOrderedAscending;
            }
            return NSOrderedSame;
        }];

        return femaleArray;
    }

    return nil;

}









//根据姓名删除某个联系人
- (void)deleteAddressPersonWithName:(NSString *)name
{
    //定义AddressPerson类型的变量,记录查找到的联系人
    AddressPerson * deletePerson = nil;

    for (NSString * groupName in _allPersonDic) {

        NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];

        for (AddressPerson * p in oneGroup) {

            if (YES == [[p getName] isEqualToString:name]) {

                //找到要删除的联系人
                deletePerson = p;
            }
        }


    }

    NSMutableArray * group = [self selectGroupWithGroupName:[deletePerson getGroupName]];

    //删除之前,先判断组里还剩几个人
    //如果剩下一个人,直接把组删除。否则,只删除某个人
    if ([group count] > 1) {
        //组里不止一个人
        [group removeObject:deletePerson];

    }else{
        //组里只剩一个人了,把组删掉
        [_allPersonDic removeObjectForKey:[deletePerson getGroupName]];
    }

    NSLog(@"delete result = %@",_allPersonDic);




}






/*

//根据组名,删除某个分组
- (void)deleteGroupWithGroupName:(NSString *)groupName
{

}

//展示通讯录中所有联系人
- (void)showAllAddressPerson
{


}
*/

main.m

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




    //创建联系人并添加
    AddressPerson * p1 = [[AddressPerson alloc] initWithName:@"guomingmiao" phoneNumber:@"123"];
    [p1 setGroupName:@"G"];
    [p1 setGender:@"男"];
    [p1 setAge:23];



    AddressPerson * p2 = [[AddressPerson alloc] initWithName:@"yumingyue" phoneNumber:@"456"];
    [p2 setGroupName:@"Y"];
    [p2 setGender:@"女"];
    [p2 setAge:21];

    AddressPerson * p3 = [[AddressPerson alloc] initWithName:@"ranshirong" phoneNumber:@"789"];
    [p3 setGroupName:@"R"];
    [p3 setGender:@"男"];
    [p3 setAge:25];

    AddressPerson * p4 = [[AddressPerson alloc] initWithName:@"lusai" phoneNumber:@"135"];
    [p4 setGroupName:@"L"];
    [p4 setGender:@"女"];
    [p4 setAge:19];

    AddressPerson * p5 = [[AddressPerson alloc] initWithName:@"liupeiyuan" phoneNumber:@"333"];
    [p5 setGroupName:@"L"];
    [p5 setGender:@"男"];
    [p5 setAge:30];

    //创建通讯录
    AddressBook * list = [[AddressBook alloc] init];


    //添加联系人
    [list addNewAddressPerson:p1];
    [list addNewAddressPerson:p2];
    [list addNewAddressPerson:p3];
    [list addNewAddressPerson:p4];
    [list addNewAddressPerson:p5];

    //获取L组的联系人,按姓名升序排列
    NSMutableArray * group = [list selectGroupWithGroupName:@"L"];
    NSLog(@"group = %@",group);


    AddressPerson * p = [list selectAddressPersonWithPhoneNumber:@"135"];
    NSLog(@"p = %@",p);


    NSMutableArray * femaleArray = [list selectFemaleAddressPerson];
    NSLog(@"female = %@",femaleArray);


    [list deleteAddressPersonWithName:@"guomingmiao"];



    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值