面向对象的通讯录代码

@implementation AddressBook

// 系统预设好的init方法

- (instancetype)init

{

    self = [super init];

    if (self) {

        // 容器类在使用之前 必须先进行初始化

        self.contactDic = [NSMutableDictionary dictionary];

        // 创建字典套数组结构 联系人分组信息

        [self group];

    }

    return self;

}

 

// 获取分组信息

// 私有方法 写在.m文件的实现中 没有在.h汇总声明 只能在本类中(.m中)使用

- (void)group

{

    // 创建分组名数组

    NSArray *groupNameArr = [NSArray arrayWithObjects:@"O", @"X", @"Y", nil];

    // for-in遍历出联系人字典的key值

    for (NSString *groupName in groupNameArr) {

        // 创建联系人分组数组

        NSMutableArray *groupArr = [NSMutableArray array];

        // 将key-value添加在联系人字典中

        [self.contactDic setObject:groupArr forKey:groupName];

    }

}

 

// 在字典中添加联系人

- (void)addContact:(Contact *)contact

{

    // 姓名或电话号码为空时 不能添加

    // contact.name.length == 0

    // contact.name == nil

    // @"" 空字符串 nil空指针 二者不相同

    if (contact.name.length == 0 || contact.phone.length == 0) {

        NSLog(@"姓名或电话号码不能为空");

    } else {

        // 通过联系人的groupName确定联系人所属的数组

        NSMutableArray *arr = [self.contactDic objectForKey:contact.groupName];

        // 把联系人对象添加进数组

        [arr addObject:contact];

    }

}

 

// 获取某个分组的联系人

- (NSMutableArray *)searchContactWithGroupName:(NSString *)groupName

{

    // 通过groupName作为key值 找到对应的联系人数组

    NSMutableArray *arr = [self.contactDic objectForKey:groupName];

    // 对可变数组调用排序算法 以名字升序排列

    [arr sortUsingSelector:@selector(compareNameWithContact:)];

    return arr;

}

// 根据电话号搜索联系人

- (NSMutableArray *)searchContactWithPhone:(NSString *)phone

{

    // 空数组用于存储搜索到的联系人对象

    NSMutableArray *arr = [NSMutableArray array];

    // 首先遍历的通讯录字典

    for (NSString *key in self.contactDic) {

        // 通过遍历到的key获取对应的联系人数组

        NSMutableArray *contactArr = [self.contactDic objectForKey:key];

        // 遍历联系人数组 获得联系人对象

        for (Contact *c in contactArr) {

            // 判断phone是否和对象的phone相同

            if ([phone isEqualToString:c.phone]) {

                // 将符合条件的对象加入空数组中

                [arr addObject:c];

            }

        }

    }

    return arr;

}

 

// 获取女性联系人 按年龄倒序排列

- (NSMutableArray *)searchWomenContacts

{

    // 用于存放搜索结果的空数组

    NSMutableArray *arr = [NSMutableArray array];

    // 遍历通讯录字典

    for (NSString *key in self.contactDic) {

        // 通过遍历到的key获取对应的联系人数组

        NSMutableArray *contactArr = [self.contactDic objectForKey:key];

        // 遍历联系人数组 获得联系人对象

        for (Contact *c in contactArr) {

            // 判断是否为女性

            if ([c.sex isEqualToString:@"female"]) {

                // 将符合条件的对象加入空数组中

                [arr addObject:c];

            }

        }

    }

    // 按照名字倒序排列

    [arr sortUsingSelector:@selector(compareAgeWithContact:)];

    

    return arr;

}

 

// 根据名字删除某个联系人

- (void)deleteContactWithName:(NSString *)name

{

    // 遍历通讯录字典

    for (NSString *key in self.contactDic) {

        // 定义一个临时联系人对象 用于保存要删除的联系人对象地址 (多个要删除的对象可以使用数组)

        Contact *temp = [[Contact alloc] init];

        // 通过遍历到的key获取对应的联系人数组

        NSMutableArray *contactArr = [self.contactDic objectForKey:key];

        // 遍历联系人数组 获得联系人对象

        for (Contact *c in contactArr) {

            // 判断名字是否相同

            if ([c.name isEqualToString:name]) {

                // 将符合条件的对象标记给 临时对象temp

                temp = c;

            }

        }

        // 删除对象

        [contactArr removeObject:temp];

    }

}

 

// 删除某个分组的全部联系人

- (void)deleteContactWithGroupName:(NSString *)groupName

{

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

    NSMutableArray *arr = [self.contactDic objectForKey:groupName];

    // 删除数组元素

    [arr removeAllObjects];

}

 

@end

 

 

 

 

 

 

 

 

 

 

 

 

@interface AddressBook : NSObject

 

@property (nonatomic, retain) NSMutableDictionary *contactDic;// 用来管理联系人的字典

// 添加联系人方法

- (void)addContact:(Contact *)contact;

// 获得某个分组的联系人

- (NSMutableArray *)searchContactWithGroupName:(NSString *)groupName;

// 根据号码搜索联系人

- (NSMutableArray *)searchContactWithPhone:(NSString *)phone;

// 获取所有女性联系人

- (NSMutableArray *)searchWomenContacts;

// 根据姓名删除某个联系人

- (void)deleteContactWithName:(NSString *)name;

// 删除某个分组的全部联系人

- (void)deleteContactWithGroupName:(NSString *)groupName;

@end

 

 

 

 

// 1.创建联系人对象

    Contact *xiaohuo = [Contact contactWithName:@"Xiaohuo" sex:@"male" phone:@"123456" address:@"on the earth" groupName:@"X" age:20];

    Contact *yonggang = [Contact contactWithName:@"Yonggang" sex:@"male" phone:@"654321" address:@"on the seat" groupName:@"Y" age:22];

    Contact *xx = [Contact contactWithName:@"Xx" sex:@"female" phone:@"110" address:@"in the class1" groupName:@"X" age:18];

    Contact *oo = [Contact contactWithName:@"Oo" sex:@"female" phone:@"120" address:@"the same to xx" groupName:@"O" age:30];

    NSLog(@"%@\n%@\n%@\n%@", xiaohuo, yonggang, xx, oo);

    

    // 2.创建通讯录对象

    AddressBook *book = [[AddressBook alloc] init];

    // 3.把联系人添加进通讯录

    [book addContact:xiaohuo];

    [book addContact:yonggang];

    [book addContact:xx];

    [book addContact:oo];

    NSLog(@"contactDic: %@", book.contactDic);

    

    // 4.获取某个分组下所有联系人

    NSMutableArray *groupArr = [book searchContactWithGroupName:@"X"];

    NSLog(@"groupArr %@", groupArr);

    

    // 5.通过电话号搜索联系人

    NSMutableArray *phoneArr = [book searchContactWithPhone:@"120"];

    NSLog(@"phoneArr %@", phoneArr);

    

    // 6.获取所有女性联系人 按照年龄倒序排列

    NSMutableArray *womenArr = [book searchWomenContacts];

    NSLog(@"womenArr %@", womenArr);

    

    // 7.根据名字删除对应的联系人信息

    [book deleteContactWithName:@"Xx"];

    NSLog(@"delete %@", book.contactDic);

    

    // 8.删除某个分组的全部联系人

    [book deleteContactWithGroupName:@"X"];

    NSLog(@"deleteGroup %@", book.contactDic);

    

    return 0;

}

 

posted @ 2015-02-06 15:55  被阳光素描  阅读(129)  评论(0编辑  收藏  举报