用OC语⾔言完成简易通讯录(实现增删改查)功 能. (注:使用MRC)

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString *phone;
@property (nonatomic, copy) NSString *group;
@property (nonatomic, assign) int age;

- (instancetype)initWithName:(NSString *)name gender:(NSString *)gender phone:(NSString *)phone age:(int)age;

+ (id)personWithName:(NSString *)name gender:(NSString *)gender phone:(NSString *)phone age:(int)age;


@end

#import "Person.h"

@implementation Person

- (NSString *)description
{
    return [NSString stringWithFormat:@"name:%@,age:%d,gender:%@,phone:%@", self.name,self.age,self.gender,self.phone];
}

- (instancetype)initWithName:(NSString *)name gender:(NSString *)gender phone:(NSString *)phone age:(int)age {
    self = [super init];
    if (self) {
        self.name = name;
        self.gender = gender;
        self.phone = phone;
        self.age = age;
    }
    return self;
}

+ (id)personWithName:(NSString *)name gender:(NSString *)gender phone:(NSString *)phone age:(int)age {
    Person *p = [[Person alloc] initWithName:name gender:gender phone:phone age:age] ;
    [p autorelease];
    return p;
}

- (void)dealloc
{
    [_name release];
    [_gender release];
    [_phone release];
    [_group release];
    NSLog(@"%@对象被销毁",self);
    [super dealloc];
}
@end

#import <Foundation/Foundation.h>

@interface NSString (Characters)

+ (NSString *)firstCharWithName:(NSString *)name;

@end

#import "NSString+Characters.h"

@implementation NSString (Characters)

+ (NSString *)firstCharWithName:(NSString *)name {
    return [[name substringToIndex:1] uppercaseString];
}

@end

#import <Foundation/Foundation.h>
#import "Person.h"
#import "NSString+Characters.h"
@interface AddressBook : NSObject

@property (nonatomic, retain) NSMutableDictionary *allPersonDic;

// 3.添加联系人
- (BOOL)addPerson:(Person *)aPerson;

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

// 5.根据性别查找联系人,并将查到的联系人按照年龄升序排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex;

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

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

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

// 9.展示通讯录中的所有联系人信息
-(void)showAll;

@end

#import "AddressBook.h"

@implementation AddressBook

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

- (void)dealloc
{
    [_allPersonDic release];
    NSLog(@"%@对象被销毁",self);
    [super dealloc];
}

// 3.添加联系人
- (BOOL)addPerson:(Person *)aPerson {
    BOOL isAdd = NO;
    if (aPerson.name == nil || aPerson.phone == nil) {
        NSLog(@"添加失败");
    }else {
        NSString *firstChar = [NSString firstCharWithName:aPerson.name];
        NSMutableArray *mArr = [self.allPersonDic valueForKey:firstChar];
        if (mArr == nil) {
            NSMutableArray *mArr = [NSMutableArray arrayWithCapacity:1];
            [self.allPersonDic setObject:mArr forKey:firstChar];
            [mArr addObject:aPerson];
        }else {
            [mArr addObject:aPerson];
        }
        isAdd = YES;
         NSLog(@"添加成功");
    }
    return isAdd;
}

// 4.根据电话查找某个联系人.
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum {
    for (id key in self.allPersonDic) {
        for (Person *person in [self.allPersonDic valueForKey:key]) {
            if ([aPhoneNum isEqualToString:person.phone]) {
                return person;
            }
        }
    }
    return nil;
}

// 5.根据性别查找联系人,并将查到的联系人按照年龄升序排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex {
    NSMutableArray *mArrSort = [NSMutableArray arrayWithCapacity:1];
    for (id key in self.allPersonDic) {
        NSMutableArray *mArr = [self.allPersonDic valueForKey:key];
        for (Person *person in mArr) {
            if ([aSex isEqualToString:person.gender]) {
                [mArrSort addObject:person];
            }
        }
    }
     [mArrSort sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 age] > [obj2 age];
     }];
    return mArrSort;
}

// 6.根据姓名,更改联系人信息.
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(int)aAge {
    BOOL isChange = NO;
    if (aNum == nil || aSex == nil || aAge == 0) {
        NSLog(@"更新失败");
    }else {
    for (id key in self.allPersonDic) {
        for (Person *person in [self.allPersonDic valueForKey:key]) {
            if ([name isEqualToString:person.name]) {
                [person initWithName:name gender:aSex phone:aNum age:aAge];
                isChange = YES;
            }
        }
    }
        NSLog(@"更新成功");
    }
    return isChange;
}

// 7.按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString *)aPersonName {
    BOOL isDeletePerson = NO;
    for (id key in self.allPersonDic) {
        NSMutableArray *mArr = [self.allPersonDic valueForKey:key];
        for (NSInteger i = [mArr count]; i > 0 ; i--) {
            if ([aPersonName isEqualToString:[[mArr objectAtIndex:i-1] name]]) {
                [mArr removeObjectAtIndex:i-1];
                // 当删除联系⼈后分组为空时,需要删除该分组
                if ([self.allPersonDic[key] count] == 0) {
                    [self.allPersonDic removeObjectForKey:key];
                }
                isDeletePerson = YES;
            }
        }
    }
    return isDeletePerson;
}

// 8.删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName {
    BOOL isDeleteGroup = NO;
    for (id key in self.allPersonDic) {
        if ([aGroupName isEqualToString:key]) {
            isDeleteGroup = YES;
        }
    }
    [self.allPersonDic removeObjectForKey:aGroupName];
    return isDeleteGroup;
}

// 9.展示通讯录中的所有联系人信息
-(void)showAll {
    NSLog(@"%@",self.allPersonDic);
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@", self.allPersonDic];
}
@end

#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p1 = [Person personWithName:@"Lucy" gender:@"woman" phone:@"123" age:21];
        Person *p2 = [Person personWithName:@"Joe" gender:@"man" phone:@"456" age:17];
        Person *p3 = [Person personWithName:@"Baby" gender:@"woman" phone:@"789" age:27];
        Person *p4 = [Person personWithName:@"Linda" gender:@"woman" phone:@"000" age:21];
        
        AddressBook *book = [[[AddressBook alloc] init] autorelease];
       
        // 3.添加联系人
        [book addPerson:p1];
        [book addPerson:p2];
        [book addPerson:p3];
        [book addPerson:p4];
        [book showAll];
        
        // 4.根据电话查找某个联系人.
        Person *findPerson = [book findPersonWithPhoneNum:@"456"];
        NSLog(@"%@",findPerson);
        
        // 5.根据性别查找联系人,并将查到的联系人按照年龄升序排序
        NSArray *arrSort = [book findPersonsWithSex:@"woman"];
        NSLog(@"%@",arrSort);
        
        // 6.根据姓名,更改联系人信息.
        BOOL isChange = [book changePersonWithName:@"Linda" phoneNum:@"012" sex:@"woman" age:25];
        if (isChange) {
            [book showAll];
        }
        
        // 7.按照姓名删除联系人
        BOOL isDeletePerson = [book deletePersonWithName:@"Baby"];
        if (isDeletePerson) {
            NSLog(@"删除成功");
            [book showAll];
        }
        
        // 8.删除一个分组
        BOOL isDeleteGroup = [book deleteGroup:@"L"];
        if (isDeleteGroup) {
            NSLog(@"删除成功");
            [book showAll];
        }
        
        // 9.展示通讯录中的所有联系人信息
        [book showAll];
    
        
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值