OC通讯录(字典)

        ContactPerson * p = [[ContactPerson alloc] initWithName:@"liuyongze" sex:@"男" age:23 phoneNumber:12300 address:@"xuefuxinyuan"];
        ContactPerson * p1 = [[ContactPerson alloc] initWithName:@"zhangkaifang" sex:@"男" age:24 phoneNumber:12301 address:@"shiqu"];
        ContactPerson * p2 = [[ContactPerson alloc] initWithName:@"zhaotiebang" sex:@"女" age:23 phoneNumber:12302 address:@"wenzhou"];
        ContactPerson * p3 = [[ContactPerson alloc] initWithName:@"douxinfeng" sex:@"男" age:23 phoneNumber:12303 address:@"wanda"];
        ContactPerson * p4 = [[ContactPerson alloc] initWithName:@"zhangmingen" sex:@"男" age:23 phoneNumber:12304 address:@"dongqu"];
        ContactPerson * p5 = [[ContactPerson alloc] initWithName:@"niuhongxiang" sex:@"男" age:23 phoneNumber:12305 address:@"xushui"];
        ContactPerson * p6 = [[ContactPerson alloc] initWithName:@"liuzhichao" sex:@"男" age:21 phoneNumber:12306 address:@"kaifeng"];
        ContactPerson * p7 = [[ContactPerson alloc] initWithName:@"caoyanlin" sex:@"女" age:22 phoneNumber:12307 address:@"yunnanqujing"];
//        NSMutableArray * Array = [NSMutableArray arrayWithCapacity:1];
        AddressBook * book = [[AddressBook alloc] init];
        [book addContactPersonDic:p];
        [book addContactPersonDic:p1];
        [book addContactPersonDic:p2];
        [book addContactPersonDic:p3];
        [book addContactPersonDic:p4];
        [book addContactPersonDic:p5];
        [book addContactPersonDic:p6];
        [book addContactPersonDic:p7];
        //添加联系人至分组
        /*
        NSLog(@"%@", [book contactPersonDic]);
        */
        
        //获取某个分组下所有联系人
        /*
        NSArray * getGroup = [book searchContactPersonByGroupName:@"L"];
        NSLog(@"%@", getGroup);
        */
        
        //按号码搜索联系人
        /*
        ContactPerson * person = [book searchContactPersonByPhoneNumber:12306];
        NSLog(@"%@", person);
        */
        
        //获取某性别的所有联系人
        /*
        NSLog(@"%@", [book searchContactPersonBySex:@"女"]);
        */
        
        //根据姓名删除联系人
        /*
        BOOL result = [book deleteContactPersonByName:@"zhangkaifang"];
        NSLog(@"result = %@", result ? @"YES" : @"NO");
        */
        
        //删除某个分组所有联系人
        /*
        BOOL result = [book deleteContactPersonByGroupName:@"L"];
        NSLog(@"result = %@", result ? @"YES" : @"NO");
        */

 

ContactPerson.h

@interface ContactPerson : NSObject
{
    //姓名
    NSString * _name;
    //性别
    NSString * _sex;
    //年龄
    NSInteger  _age;
    //地址
    NSString * _address;
    //电话号码
    NSString * _phoneNumber;
    //分组名称
    NSString * _groupName;
}

- (id)initWithName:(NSString *)name
               sex:(NSString *)sex
               age:(NSInteger)age
       phoneNumber:(NSString *)phoneNumber address:(NSString *)address;


- (NSString *)name;
- (NSString *)phoneNumber;
- (NSString *)groupName;
- (NSString *)sex;


@end

ContactPerson.m

#import "ContactPerson.h"

@implementation ContactPerson
- (id)initWithName:(NSString *)name
               sex:(NSString *)sex
               age:(NSInteger)age
       phoneNumber:(NSString *)phoneNumber address:(NSString *)address;
{
    self = [super init];
    if (self) {
        _name = name;
        _sex = sex;
        _age = age;
        _address = address;
        _phoneNumber = phoneNumber;
        //如果姓名的长度大于等于1
        if ([_name length] >= 1) {
            
            NSString * spellName = [self transformMandarinToLatin:_name];
            NSLog(@"spellName = %@", spellName);
            //取到姓名的首字母并转大写
            NSString * groupLetter = [[spellName substringToIndex:1] uppercaseString];
            //给实例变量赋值
            _groupName = groupLetter;
        }
        
    }
    return self;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"name:%@,  sex:%@, age:%ld, address:%@, phonenumber:%@, groupName:%@", _name, _sex, _age,_address, _phoneNumber, _groupName];
}


- (NSString *)name
{
    return _name;
}
- (NSString *)phoneNumber
{
    return _phoneNumber;
}

- (NSString *)groupName
{
    return _groupName;
}
- (NSString *)sex
{
    return _sex;
}

/*将汉字转换为不带音调的拼音
 *string是要转换的字符串*/
- (NSString *)transformMandarinToLatin:(NSString *)string
{
    /*复制出一个可变的对象*/
    NSMutableString *preString = [string mutableCopy];
    /*转换成成带音 调的拼音*/
    CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformMandarinLatin, NO);
    /*去掉音调*/
    CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformStripDiacritics, NO);
    
    /*多音字处理*/
    if ([[(NSString *)string substringToIndex:1] compare:@"长"] == NSOrderedSame)
    {
        [preString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"chang"];
    }
    if ([[(NSString *)string substringToIndex:1] compare:@"沈"] == NSOrderedSame)
    {
        [preString replaceCharactersInRange:NSMakeRange(0, 4) withString:@"shen"];
    }
    if ([[(NSString *)string substringToIndex:1] compare:@"厦"] == NSOrderedSame)
    {
        [preString replaceCharactersInRange:NSMakeRange(0, 3) withString:@"xia"];
    }
    if ([[(NSString *)string substringToIndex:1] compare:@"地"] == NSOrderedSame)
    {
        [preString replaceCharactersInRange:NSMakeRange(0, 3) withString:@"di"];
    }
    if ([[(NSString *)string substringToIndex:1] compare:@"重"] == NSOrderedSame)
    {
        [preString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"chong"];
    }
    return preString;
}

AddressBook.h

@class ContactPerson;
@interface AddressBook : NSObject
{
    //存储所有联系人的字典
    NSMutableDictionary * _contactDic;
}

//添加联系人到对应的分组
- (BOOL)addContactPersonInGroup:(ContactPerson *)person;

//根据分组名返回分组下所有的联系人
- (NSArray *)searchGroupByGroupName:(NSString *)groupName;

//根据电话号码搜索联系人
- (ContactPerson *)searchContactPersonByPhoneNumber:(NSString *)phoneNumber;

//获取同性别的联系人
- (NSArray *)searchSameSexContactByGender:(NSString *)sex;

//根据姓名删除联系人
- (BOOL)deleteContactPersonByName:(NSString *)name;

//删除某个分组全部的联系人
- (BOOL)deleteGroupContactByGroupName:(NSString *)groupName;

@end

AddressBook.m

#import "AddressBook.h"
#import "ContactPerson.h"

@implementation AddressBook

- (id)init
{
    self = [super init];
    if (self) {
        //给字典实例化
        _contactDic = [NSMutableDictionary dictionaryWithCapacity:1];
        //创建26个分组
        for (int i = 65; i <= 90; i++) {
            //生成每个分组名
            NSString * key = [NSString stringWithFormat:@"%c", i];
            //创建分组的数组
            NSMutableArray * groupArray = [NSMutableArray arrayWithCapacity:1];
            //把分组和分组名放入到字典中
            [_contactDic setObject:groupArray forKey:key];
        }
        NSLog(@"%@", _contactDic);
        
        
    }
    return self;
}
//添加联系人到对应的分组
- (BOOL)addContactPersonInGroup:(ContactPerson *)person
{
    if ([[person name] length] == 0 || [[person phoneNumber] length] == 0) {
        NSLog(@"姓名或电话为空, 添加失败!");
        return NO;
    }
    //根据联系人的分组名, 找到对应的分组
    NSMutableArray * groupArray = [_contactDic objectForKey:[person groupName]];
    [groupArray addObject:person];

    NSLog(@"%@", _contactDic);
    
    return YES;
}

//根据分组名返回分组下所有的联系人
- (NSArray *)searchGroupByGroupName:(NSString *)groupName
{
    //对传入个分组名做出处理
    NSString * key = [self handleKeyName:groupName];
    
    //通过分组名从字典中取出对应分组, 并转成不可变数组
    return [NSArray arrayWithArray:[_contactDic objectForKey:key]];
}

//根据电话号码搜索联系人
- (ContactPerson *)searchContactPersonByPhoneNumber:(NSString *)phoneNumber
{
    
    //外层循环遍历字典
    for (int i = 0; i < [_contactDic count]; i++) {
        //取到字典的每个key
        NSString * key = [[_contactDic allKeys] objectAtIndex:i];
        //通过key找到对应的分组
        NSMutableArray * groupArray = [_contactDic objectForKey:key];
        //内层循环遍历分组数组
        for (int j = 0; j < [groupArray count]; j++) {
            //取出每个联系人
            ContactPerson * person = [groupArray objectAtIndex:j];
            //比较联系人的电话和传入的电话是否相等
            if ([[person phoneNumber] isEqualToString:phoneNumber]) {
                //返回联系人
                return person;
            }
        }
    }
    //如果没找到, 返回nil
    return nil;
}

//获取同性别的联系人
- (NSArray *)searchSameSexContactByGender:(NSString *)sex
{
    //创建一个存放结果的数组
    NSMutableArray * resultArray = [NSMutableArray arrayWithCapacity:1];
    //外层循环遍历字典
    for (int i  = 0; i < [_contactDic count]; i++) {
        //根据key取出每个对应的分组数组
        NSMutableArray * groupArray = [_contactDic objectForKey:[[_contactDic allKeys] objectAtIndex:i]];
        //内层循环遍历数组
        for (int j = 0; j < [groupArray count]; j++) {
            //检查每个联系人的性别和传入的性别是否一样
            if ([[[groupArray objectAtIndex:j] sex] isEqualToString:sex]) {
                //存入结果数组
                [resultArray addObject:[groupArray objectAtIndex:j]];
            }
        }
    }
    //把数组转为不可变,并返回
    return [NSArray arrayWithArray:resultArray];
}

//根据姓名删除联系人
- (BOOL)deleteContactPersonByName:(NSString *)name
{
    //用于记录是否删除成功
    BOOL isSuccessed = NO;
    //外层遍历字典
    for (int i = 0; i < [_contactDic count]; i++) {
        //取出每个key
        NSString * key = [[_contactDic allKeys] objectAtIndex:i];
        //找到每个key对应的分组
        NSMutableArray * groupArray = [_contactDic objectForKey:key];
        //内层遍历分组
        for (int j = 0; j < [groupArray count]; j++) {
            //取出每个联系人
            ContactPerson * person = [groupArray objectAtIndex:j];
            //检查联系人的名字是否和传入的一样
            if ([[person name] isEqualToString:name]) {
                //从分组数组中删除,并把记录结果的bool值置为YES, 标记删除成功
                isSuccessed = YES;
                [groupArray removeObjectAtIndex:j];
                j--;
            }
        }
    }
    return isSuccessed;
}

//删除某个分组全部的联系人
- (BOOL)deleteGroupContactByGroupName:(NSString *)groupName
{
    //处理分组名
    NSString * key = [self handleKeyName:groupName];
    //找到对应的分组
    NSMutableArray * groupArray = [_contactDic objectForKey:key];
    //如果有该分组
    if (groupArray != nil) {
        [groupArray removeAllObjects];
        return YES;
    }
    return NO;
}

//处理key
- (NSString *)handleKeyName:(NSString *)groupName
{
    NSString * key = nil;
    if ([groupName length] >= 1) {
        key = [[groupName substringToIndex:1] uppercaseString];
    }
    return key;
}


@end

posted @ 2015-08-22 20:32  奎了个善  阅读(253)  评论(0编辑  收藏  举报