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

一、功能描述:

main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能:

1).使用便利构造器创建四个Person类的实例(联系人).

姓名:Lucy 性别:女 电话:123 年龄:21
姓名:Joe 性别:男 电话:456 年龄:17
姓名:Baby 性别:女 电话:789 年龄:27
姓名:Linda 性别:女 电话:000 年龄:21

2).创建一个AddressBook类的实例对象(通讯录).

3).使用AddressBook类中定义的方法实现:添加联系人,将四个联系人添加到通讯录中.

4).使用AddressBook类中定义的方法实现:根据电话查找联系人,并打印(查找电话:456);

    5).使用AddressBook类中定义的方法实现:根据性别查找联系人,并将查到的联系人按照年龄升序排序,并打印(查找性别:女)

    6).使用AddressBook类中定义的方法实现:根据姓名,更改联系人信息.(修改Linda的信息: 性别:女 电话:012 年龄:25);

    7).使用AddressBook类中定义的方法实现:按照姓名删除联系人,并展示通信录中所有人信息.(删除联系人:Baby)

    8).使用AddressBook类中定义的方法实现:删除一个分组,并展示通信录中所有人信息.(删除L组)

    9).使用AddressBook类中定义的方法实现:实现3~8之间每个功能后,输出通讯录中所有联系人信息

实现程序

这里写代码片
Person.h
#import <Foundation/Foundation.h>
#import "NSString+Characters.h"
@interface Person : NSObject
{
    NSString *_name;
    NSString *_gender;
    NSString *_groupName;
    NSString *_phoneNumber;
    int      _age;

}
@property(nonatomic ,retain)NSString *name;
@property (nonatomic ,retain)NSString *gender;
@property(nonatomic , retain)NSString *groupName;
@property (nonatomic,assign)int age;
@property (nonatomic,retain)NSString *phoneNumber;
- (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age;
+ (id)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age;
- (NSString *)description;
//Person.m
#import "Person.h"

@implementation Person
- (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age{

    self = [super init ];

    if (self) {
        _name =[name retain];
        _gender = [gender retain];
        _phoneNumber = [phoneNumber retain];
        _age = age;
        _groupName = [[name firstCharacterOfString]retain ];
    }

    return self;
}
+ (id)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age{

    Person * p= [[Person alloc]initWithName:name  gender:gender phoneNumber:phoneNumber age:age];

    return [p autorelease];
}
- (NSString *)description{
    return [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄:%d 电话:%@",_name,_gender,_age,_phoneNumber];
}

- (void)dealloc
{
    [_name release];
    [_gender release];
    [_phoneNumber release];
    [super dealloc];
    NSLog(@"内存已释放");
}
@end
//AddressBook
#import <Foundation/Foundation.h>
@class Person ;
@interface AddressBook : NSObject
{
    NSMutableDictionary *_allPersonDic;
}

@property(nonatomic,retain)NSMutableDictionary * allPersonDic;
- (BOOL)addPerson:(Person *)aPerson;
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
- (NSArray *)findPersonsWithSex:(NSString *)aSex;
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
- (BOOL)deleteGroup:(NSString *)aGroupName;
-(void)showAll;
@end
#import "AddressBook.h"
#import "Person.h"
@implementation AddressBook
- (id)init
{ self = [super init];
    if (self) {
        _allPersonDic = [[NSMutableDictionary alloc]init ];
    }
    return self ;
}

//添加联系人
- (BOOL)addPerson:(Person *)aPerson{
  //如果姓名或电话为空返回NO
    if ([aPerson name] == nil || [aPerson phoneNumber] == nil ) {
        return NO;
    }
    NSMutableArray * oneGroup = [_allPersonDic  objectForKey:[aPerson groupName] ];
    //如果姓名重复返回NO
    for (Person * p  in oneGroup) {
        if ([[p name] isEqualToString: [aPerson name]]) {
            NSLog(@"请不要添加同姓名之人");
        return NO;
        }

    }
    //不存在创建分组后再存储
    if (oneGroup  == nil) {
        oneGroup = [NSMutableArray array ];
        [oneGroup addObject:aPerson];
        [_allPersonDic setObject:oneGroup forKey: [aPerson groupName]];

       //判断是否已经存在分组,存在直接存储
    }else{
            [oneGroup  addObject:aPerson];
    }

    return YES;
}
//根据电话查找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{

    for (NSString *groupName in _allPersonDic) {

        NSMutableArray  * oneGroup = [_allPersonDic objectForKey:groupName];

        for (Person * p in oneGroup) {
            if ([[p phoneNumber] isEqualToString:aPhoneNum]) {

                return p;
            }

    }


}
    return nil;
}

//根据姓名,更改联系人信息
- (NSArray *)findPersonsWithSex:(NSString *)aSex{
        NSMutableArray * searchArray =[NSMutableArray array ];

        for (NSString *groupName in _allPersonDic) {
            NSMutableArray *oneGroup = [_allPersonDic  objectForKey:groupName ];

                        for (Person * p  in oneGroup) {

                if ([[p gender] isEqualToString:aSex]) {

                    [ searchArray addObject:p  ];

                }
            }

        }
    [searchArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

                Person * p1 =(Person *)obj1;

                Person * p2 =(Person *)obj2;

                return [p1  age] >[p2  age];

            }];


        return searchArray;
    }


//根据姓名,更改联系人
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge{

    for (NSString *groupName in _allPersonDic) {
        NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];
        for (Person * p  in oneGroup) {
            if ([[p name] isEqualToString:name]) {

                p.phoneNumber   = aNum;
                p.gender = aSex;
                p.age =(int) aAge;

                return YES;
            }
        }
    }

    return NO;

}

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

    for (NSString * groupName in _allPersonDic) {
    NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];
        NSMutableArray * deleteArray =[NSMutableArray array ];
        for (Person * p  in oneGroup) {

            if ([[p  name ] isEqualToString :aPersonName ]) {

                [deleteArray addObject:p];
            }
        }

        [ oneGroup removeObjectsInArray:deleteArray];

        if ( oneGroup.count == 0) {

            //[oneGroup removeAllObjects];

            [_allPersonDic removeObjectForKey: aPersonName];
            return YES;
        }


    }
    return NO;


}

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

    for (NSString * groupName in _allPersonDic) {

        if ( [ groupName isEqualToString:aGroupName ]) {


            [_allPersonDic removeObjectForKey:aGroupName ];

            return YES;

        }

    }
    return NO;


}

- (void)showAll{
    for (NSString * groupName in _allPersonDic) {
      NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];

        for ( Person * p  in oneGroup) {

            NSLog(@"%@",p);
        }


    }
}

- (void)dealloc
{  NSLog(@"内存释放");
    [_allPersonDic release];
    [super  dealloc ];
}
@end

//**NSString+Characters.m**
#import "NSString+Characters.h"

@implementation NSString (Characters)

//讲汉字转换为拼音
- (NSString *)pinyinOfString
{
    NSMutableString * string = [[[NSMutableString alloc] initWithString:self ] autorelease];

    CFRange range = CFRangeMake(0, [string length]);

    // 汉字转换为拼音,并去除音调
    if ( ! CFStringTransform((__bridge CFMutableStringRef) string, &range, kCFStringTransformMandarinLatin, NO) ||
        ! CFStringTransform((__bridge CFMutableStringRef) string, &range, kCFStringTransformStripDiacritics, NO)) {
        return @"";
    }

    return string;
}

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

    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

//main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

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


        Person * p1 = [Person personWithName:@"Lucy" gender:@"女" phoneNumber:@"123" age:21];
        Person * p2 = [Person personWithName:@"Joe" gender:@"男" phoneNumber:@"456" age:17];
        Person * p3 = [Person personWithName:@"Baby" gender:@"女" phoneNumber:@"789" age:27];
        Person * p4 = [Person personWithName:@"Linda" gender:@"女" phoneNumber:@"000" age:21];
        Person * p5 = [Person personWithName:@"Lucy" gender:@"女" phoneNumber:@"123" age:17];

        [book addPerson:p1];
        [book addPerson:p2];
        [book addPerson:p3];
        [book addPerson:p4];
        [book addPerson:p5];

        [book showAll];

        NSLog(@"========");

        //查找电话:456 的联系人
        Person *  p= [book findPersonWithPhoneNum:@"456"];
        NSLog(@"%@",p);

        NSLog(@"========");

        //查找女联系人
        NSArray *array2 = [book findPersonsWithSex:@"女"];
        for (Person * p in array2) {
            NSLog(@"%@",p);
        }

        NSLog(@"========");

        //更改联系人信息
        [book changePersonWithName:@"Linda" phoneNum:@"012" sex:@"女" age:25];

        [book showAll];


        NSLog(@"========");

        //删除联系人
        [book deletePersonWithName:@"Baby"];

        [book showAll];

        NSLog(@"========");

        //删除分组
        [book deleteGroup:@"L"];

        [book showAll];



        [book release];



    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值