OC实现中等难度的通讯录

14 篇文章 0 订阅
13 篇文章 0 订阅


main.m

<span style="font-size:14px;">#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Person *p1 = [Person personWithName:@"路西" age:21 sex:@"nv" number:@"123"];
        Person *p2 = [Person personWithName:@"Joe " age:17 sex:@"nan" number:@"456"];
        Person *p3 = [Person personWithName:@"Baby" age:27 sex:@"nv" number:@"789"];
        Person *p4 = [Person personWithName:@"Lind" age:21 sex:@"nv" number:@"000"];
        
        AddressBook *manager = [[AddressBook alloc] init];
        
        [manager addPerson:p1];
        [manager addPerson:p2];
        [manager addPerson:p3];
        [manager addPerson:p4];
        
//        [manager findPersonWithPhoneNum:@"456"];
      
//        NSArray *sexArray = [manager findPersonsWithSex:@"nv"];
//        for (Person *p in sexArray) {
//            NSLog(@"%@",p);
//        }
        
        
//        [manager changePersonWithName:@"Lind" phoneNum:@"012" sex:@"nv" age:25];
        
        [manager deletePersonWithName:@"Baby"];
        [manager showAll];
        
        
//        [manager deleteGroup:@"L"];
//        [manager showAll];
        
        [manager release];
        
        }
    return 0;
}</span><span style="font-size:18px;">
</span>


创建了person类

Person.h

#import <Foundation/Foundation.h>
#import "NSString+Characters.h"
@interface Person : NSObject
@property(nonatomic, retain)NSString *name;
@property(nonatomic, assign)int age;
@property(nonatomic, retain)NSString *sex;
@property(nonatomic, retain)NSString *number;
@property(nonatomic, retain)NSString *groupName;

// 自定义初始化
- (instancetype)initWithName:(NSString *)name
                         age:(int)age
                         sex:(NSString *)sex
                      number:(NSString *)number;


// 便利构造器
+ (instancetype)personWithName:(NSString *)name
                           age:(int)age
                           sex:(NSString *)sex
                        number:(NSString *)number;

// 获得英文分组名
- (NSString *)getGroupName:(Person *)p;

// 重写description
- (NSString *)description;


@end

Person.m

#import "Person.h"



@implementation Person
- (void)dealloc
{
    [_name release];
    [_groupName release];
    [_sex release];
    [_number release];
    [super dealloc];
}

// 自定义初始化
- (instancetype)initWithName:(NSString *)name
                         age:(int)age
                         sex:(NSString *)sex
                      number:(NSString *)number
                   {
    self = [super init];
    if (self) {
        self.name = name;
        self.age = age;
        self.sex = sex;
        self.number = number;
            }
    return self;
}

// 便利构造器
+ (instancetype)personWithName:(NSString *)name
                           age:(int)age
                           sex:(NSString *)sex
                        number:(NSString *)number

{
    Person *p = [[Person alloc] initWithName:name age:age sex:sex number:number];
    return [p autorelease];
}





// 获得英文分组名
- (NSString *)getGroupName:(Person *)p
{
    
    p.name = [p.name pinyinOfName];
    p.groupName = [p.name uppercasePinYinFirstLetter];
    return p.groupName;

}


// 重写description
- (NSString *)description
{
    NSString *str = [NSString stringWithFormat:@"name:%@ age:%d sex:%@ number:%@",self.name,self.age,self.sex,self.number];
    return str;
}





@end


创建AddressBook类 来管理联系人

AddressBook.h

#import <Foundation/Foundation.h>
#import "Person.h"
@interface AddressBook : NSObject
@property(nonatomic, retain)NSMutableDictionary *allPersonDic;

- (instancetype)init;

- (BOOL)addPerson:(Person *)aPerson;


// 根据电话查找联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;

// 根据性别查找联系人
-(NSArray *)findPersonsWithSex:(NSString *)aSex;

// 根据姓名更改联系人信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:
(NSString *)aNum sex:(NSString *)aSex age:(int) aAge;

//按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName;

// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName;

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

@end

AddressBook.m

#import "AddressBook.h"

@implementation AddressBook
- (void)dealloc
{
    [_allPersonDic release];
    [super dealloc];
}


- (instancetype)init
{
    self = [super init];
    if (self) {
        self.allPersonDic = [NSMutableDictionary dictionary];
    }
    return self;
}

// 添加联系人
- (BOOL)addPerson:(Person *)aPerson
{
    if (aPerson.name == nil || aPerson.number == nil) {
        NSLog(@"号码和姓名不能为空");
        return NO;
    }
    
    NSString *groupName = [aPerson getGroupName:aPerson];
    NSMutableArray *groupPerson = [self.allPersonDic objectForKey:groupName];
    if (groupPerson == nil) {
        groupPerson = [NSMutableArray array];
        [groupPerson addObject:aPerson];
        [self.allPersonDic setObject:groupPerson forKey:groupName];
    }else{
        [groupPerson addObject:aPerson];
    }
    
    return YES;
}

// 根据电话查找联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
   // Person *person = [[Person alloc] init];
    for (NSString *allkeys in self.allPersonDic) {
        NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
        for (Person *p in allPerson) {
            if ([p.number isEqualToString:aPhoneNum]) {
                NSLog(@"%@",p);
                return p;
            }
        }
    }
    return nil;
}

// 根据性别查找联系人
-(NSArray *)findPersonsWithSex:(NSString *)aSex
{
    NSMutableArray *sexArray = [NSMutableArray array];
    for (NSString *allkeys in self.allPersonDic) {
        NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
        for (Person *p in allPerson) {
            if ([p.sex isEqualToString:aSex]) {
                [sexArray addObject:p];
            }
        }
    }
    
    NSComparisonResult (^block)(id obj1,id obj2) = ^NSComparisonResult(id obj1, id obj2){
        
        Person *p1 = obj1;
        Person *p2 = obj2;
        if (p1.age > p2.age) {
            return NSOrderedAscending;
        }else if (p1.age == p2.age){
            return NSOrderedSame;
        }else{
            return NSOrderedDescending;
        }
    };
    
    [sexArray sortUsingComparator:block];
    return sexArray;
}


// 根据姓名更改联系人信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:
(NSString *)aNum sex:(NSString *)aSex age:(int) aAge
{
    for (NSString *allkeys in self.allPersonDic) {
        NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
        for (Person *p in allPerson) {
            if ([p.name isEqualToString:name]) {
                p.number =aNum;
                p.sex  = aSex;
                p.age = aAge;
                NSLog(@"%@",p);
                return YES;
            }
        }
    }

    
    return NO;
}

//按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
    for (NSString *allkeys in self.allPersonDic) {
        NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
        for (Person *p in allPerson) {
            if ([p.name isEqualToString:aPersonName] && [allPerson count] == 1) {
                [self.allPersonDic removeObjectForKey:allkeys];
                return YES;
            }
             if ([p.name isEqualToString:aPersonName] && [allPerson count] > 1)
            {
                [allPerson removeObject:p];
                return YES;
            }
        }
    }
    
    return NO;
}

// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
    for (NSString *allkeys in self.allPersonDic) {
        NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
        for (Person *p in allPerson) {
            if ([p.groupName isEqualToString:aGroupName]) {
                [self.allPersonDic removeObjectForKey:allkeys];
                return YES;
            }
        }
    }
     return NO;
}

 // 显示所有联系人
-(void)showAll
{
    for (NSString *allkey in self.allPersonDic) {
        NSLog(@"%@ = %@",allkey, [self.allPersonDic objectForKey:allkey]);
    }
}

    


@end

创建一个NSString的类目,如果输入的姓名是汉字 自动转换为拼音, 并且能截取首字母作为分组名

 NSString+Characters.h

#import <Foundation/Foundation.h>

@interface NSString (Characters)

//讲汉字转换为拼音
- (NSString *)pinyinOfName;

//汉字转换为拼音后,返回大写的首字母
- (NSString *)uppercasePinYinFirstLetter;

@end

NSString+Characters.m

#import "NSString+Characters.h"

@implementation NSString (Characters)

//讲汉字转换为拼音
- (NSString *)pinyinOfName
{
    NSMutableString * name = [[[NSMutableString alloc] initWithString:self ] autorelease];
    
    CFRange range = CFRangeMake(0, 2);
    
    // 汉字转换为拼音,并去除音调
    if ( ! CFStringTransform((__bridge CFMutableStringRef) name, &range, kCFStringTransformMandarinLatin, NO) ||
        ! CFStringTransform((__bridge CFMutableStringRef) name, &range, kCFStringTransformStripDiacritics, NO)) {
        return @"";
    }
    
    return name;
}

//汉字转换为拼音后,返回大写的首字母
- (NSString *)uppercasePinYinFirstLetter
{
    
    NSMutableString * first = [[[NSMutableString alloc] initWithString:[self substringWithRange:NSMakeRange(0, 1)]] autorelease];
    
    CFRange range = CFRangeMake(0, 1);
    
    // 汉字转换为拼音,并去除音调
    if ( ! CFStringTransform((__bridge CFMutableStringRef) first, &range, kCFStringTransformMandarinLatin, NO) ||
        ! CFStringTransform((__bridge CFMutableStringRef) first, &range, kCFStringTransformStripDiacritics, NO)) {
        return @"";
    }
    
    NSString * result;
    result = [first substringWithRange:NSMakeRange(0, 1)];
    
    return result.uppercaseString;
}
@end

这样一个中等难度的通讯录就实现了.....

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值