OC通讯录

Contact.h

//
//  Contact.h
//  AddressBook
//
//

#import <Foundation/Foundation.h>

@interface Contact : NSObject
{
    // 姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄
    NSString *_name;
    NSString *_gender;
    NSString *_phoneNum;
    NSString *_address;
    NSString *_groupName;
    NSInteger _age;
    
}

// 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
                    phoneNum:(NSString *)phoneNum;

- (instancetype)initWithName:(NSString *)name phoneNum:(NSString *)phoneNum
                         age:(NSInteger)age
                      gender:(NSString *)gender;



// 显示联系人信息
- (void)displayContact;

#pragma mark getter
- (NSString *)getName;
- (NSString *)getPhone;
- (NSString *)getGender;
- (NSInteger)getAge;
- (NSString *)getGroupName;


// 按照姓名升序排列
- (NSComparisonResult)compareWithName:(Contact *)contact;

//联系人按年龄比较
- (NSComparisonResult)compareByAge:(Contact *)contact;

@end

Contact.m

//
//  Contact.m
//  AddressBook
//
//

#import "Contact.h"

@implementation Contact

- (instancetype)initWithName:(NSString *)name
                    phoneNum:(NSString *)phoneNum {
    
    self = [super init];
    if (self) {
        _name = name;
        _phoneNum = phoneNum;
    }
    
    return self;
    
}

- (instancetype)initWithName:(NSString *)name
                    phoneNum:(NSString *)phoneNum
                         age:(NSInteger)age
                      gender:(NSString *)gender {
    
    self = [self initWithName:name phoneNum:phoneNum];
    if (self) {
    
        _age = age;
        _gender = gender;
        _groupName = [_name.capitalizedString substringToIndex:1];
        
    }
    return self;
}


// 显示联系人信息
- (void)displayContact {
    
    NSLog(@"name = %@, age = %ld, gender = %@, phoneNum = %@, address = %@", _name, _age, _gender, _phoneNum, _address);
    
}


#pragma mark getter
- (NSString *)getName {
    return _name;
}
- (NSString *)getPhone {
    return _phoneNum;
    
}
- (NSString *)getGender {
    return _gender;
}
- (NSInteger)getAge {
    return _age;
}
- (NSString *)getGroupName {
    return _groupName;
}

// 按照姓名升序排列
- (NSComparisonResult)compareWithName:(Contact *)contact {
    
    return [[self getName] compare:[contact getName]];
    
}

//联系人按年龄比较
- (NSComparisonResult)compareByAge:(Contact *)contact {
    
    NSInteger myAge = [self getAge];
    NSInteger otherAge  = [contact getAge];
    if (myAge > otherAge) {
        return NSOrderedAscending;
    }else if (myAge < otherAge){
        return NSOrderedDescending;
    }else {
        return NSOrderedSame;
    }
    
}




@end

AddressBook.h

//
//  AddressBook.h
//  AddressBook
//
//

#import <Foundation/Foundation.h>
#import "Contact.h"


@interface AddressBook : NSObject
{
    // 管理所有的联系人
    NSMutableDictionary *_allContactsDict;
}

// 添加联系人
- (void)addContact:(Contact *)contact;


// 显示所有联系人
- (void)displayAllContact;


// 根据分组名获取一组的联系人
- (NSArray *)contactsByGroupName:(NSString *)groupName;

//根据性别,获取联系人
- (NSArray *)contactsForSex:(NSString *)sex;


// 根据电话号码搜索联系人
- (Contact *)contactByPhoneNum:(NSString *)phoneNum;

// 根据姓名删除某个联系人
- (void)removeContact:(NSString *)name;

// 删除某个分组的联系人
- (void)removeContactByGroupName:(NSString *)groupName;

@end

AddressBook.m

//
//  AddressBook.m
//  AddressBook
//
//

#import "AddressBook.h"

@implementation AddressBook

- (instancetype)init {
    
    self = [super init];
    
    if (self) {
        
        // 初始化字典
        _allContactsDict = [NSMutableDictionary dictionary];
        
        for (int i = 65; i < 91; i++) {
            
            char c = i;
            
            NSString *key = [NSString stringWithFormat:@"%c", c];
            [_allContactsDict setObject:[NSMutableArray array] forKey:key];
            
        }
        
        
        
    }
    return self;
    
}

// 添加联系人
- (void)addContact:(Contact *)contact {
    
    if ([[contact getName] isEqualToString:@""] || [[contact getPhone] isEqualToString:@""]) {
        
        NSLog(@"添加失败");
        return;
        
    }
    
    NSString *groupName = [contact getGroupName];
    
    // 把联系人添加到对应的数组中
    [[_allContactsDict objectForKey:groupName] addObject:contact];
    
}

// 显示所有的联系人
- (void)displayAllContact {
    
    NSArray *keyArray = [_allContactsDict allKeys];
    keyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)];
    
    
    for (NSString *key in keyArray) {
        
        NSMutableArray *groupArray = [_allContactsDict objectForKey:key];
        
        NSLog(@"----%@----", key);
        for (Contact *contact in groupArray) {
            // 显示联系人信息
            [contact displayContact];
        }
        
        
    }
    
    
}

//根据性别,获取联系人
- (NSArray *)contactsForSex:(NSString *)sex {
    
    NSMutableArray *result = [NSMutableArray array];
    for (NSString *key in _allContactsDict) {
        
        NSMutableArray *group = [_allContactsDict objectForKey:key];
        for (Contact *contact in group) {
            if ([[contact getGender] isEqualToString:sex]) {
                [result addObject:contact];
            }
        }
        
    }
    
    [result sortUsingSelector:@selector(compareByAge:)];
    return result;
    
}


// 根据分组名获取一组的联系人
- (NSArray *)contactsByGroupName:(NSString *)groupName {
    
    NSMutableArray *groupArray = [_allContactsDict objectForKey:groupName];
    [groupArray sortUsingSelector:@selector(compareWithName:)];
    return groupArray;
    
}

// 根据电话号码搜索联系人
- (Contact *)contactByPhoneNum:(NSString *)phoneNum {
    
    for (NSString *key in _allContactsDict) {
        NSMutableArray *groupArray = [_allContactsDict objectForKey:key];
        
        for (Contact *contact in groupArray) {
            
            if ([[contact getPhone] isEqualToString:phoneNum]) {
                return contact;
            }
            
        }
        
    }
    return nil;
    
}

- (void)removeContact:(NSString *)name {
    
    NSString *groupName = [name.capitalizedString substringToIndex:1];
    NSMutableArray *groupArray = [_allContactsDict objectForKey:groupName];
    
    
    for (Contact *contact in groupArray) {
        
        if ([[contact getName] isEqualToString:name]) {
            [groupArray removeObject:contact];
            [_allContactsDict setObject:groupArray forKey:groupName];
            return;
            
        }
        
    }
    
}

// 删除某个分组的联系人
- (void)removeContactByGroupName:(NSString *)groupName {
    
    [_allContactsDict removeObjectForKey:groupName];
    
}

@end

main.m

//
//  main.m
//  AddressBook
//
//

#import <Foundation/Foundation.h>
#import "AddressBook.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 创建联系人
        Contact *contact1 = [[Contact alloc] initWithName:@"cuicui" phoneNum:@"182****6188" age:18 gender:@"女"];
        Contact *contact2 = [[Contact alloc] initWithName:@"yizhang" phoneNum:@"188****8888" age:16 gender:@"男"];
        Contact *contact3 = [[Contact alloc] initWithName:@"junjun" phoneNum:@"157****8872" age:20 gender:@"男"];
        Contact *contact4 = [[Contact alloc] initWithName:@"xiaojie" phoneNum:@"183****3553" age:17 gender:@"女"];
        Contact *contact5 = [[Contact alloc] initWithName:@"haifeng" phoneNum:@"159****8525" age:24 gender:@"男"];
        Contact *contact6 = [[Contact alloc] initWithName:@"shengsheng" phoneNum:@"18248112264" age:38 gender:@"男"];
        
        // 创建通讯录对象
        AddressBook *addressBook = [[AddressBook alloc] init];
        // 添加联系人
        [addressBook addContact:contact1];
        [addressBook addContact:contact2];
        [addressBook addContact:contact3];
        [addressBook addContact:contact4];
        [addressBook addContact:contact5];
        [addressBook addContact:contact6];
        
        // 显示所有的联系人
        [addressBook displayAllContact];
        
        NSLog(@"%@", [addressBook contactsByGroupName:@"Y"]);
        
        Contact *contact = [addressBook contactByPhoneNum:@"18248112264"];
        [contact displayContact];
        
        
        [addressBook removeContact:@"shengsheng"];
        [addressBook displayAllContact];
        
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值