OC语言,逻辑性的模拟通讯录,大家可以作参考

新建person类,设定属性,并写协议和实现协议的时机

person.h

#import <Foundation/Foundation.h>


@interface Person : NSObject

@property(nonatomic, copy)NSString *name;

@property(nonatomic, copy)NSString *gender;

@property(nonatomic, copy)NSString *phoneNumber;

@property(nonatomic)NSInteger age;


//初始化方法

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

//便利构造器

+ (Person *)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(NSInteger)age;

@end



person.m

#import "Person.h"


@implementation Person

//初始化方法

- (instancetype)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(NSInteger)age{

    self = [super init];

    if (self) {

        self.name = name;

        self.gender = gender;

        self.phoneNumber = phoneNumber;

        self.age = age;

    }

    return self;

}

//便利构造器

+ (Person *)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(NSInteger)age{

    return [[[Person alloc] initWithName:name gender:gender phoneNumber:phoneNumber age:age] autorelease];

}


//MRC下释放

- (void)dealloc{

    [_name release];

    [_gender release];

    [_phoneNumber release];

    [super dealloc];

}

//重写description

- (NSString *)description

{

    return [NSString stringWithFormat:@"%@ %@ %@ %lu", self.name, self.gender, self.phoneNumber, self.age];

}

@end


设置一个管理员类,设定属性,签订协议,并执行方法
AddressBook.h

#import <Foundation/Foundation.h>

@class Person;



@interface AddressBook : NSObject


//添加联系人,添加成功返回YES,否则返回NO

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

//输出所有联系人信息

- (void)outPutAllContactInfo;

//根据电话查找联系人,并打印

- (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;

@end



AddressBook.m

#import "AddressBook.h"

#import "Person.h"



//延展

@interface AddressBook ()

//容器,用来存放所有联系人

@property(nonatomic , retain)NSMutableDictionary *allPersonDic;


//获取名字的首字母

- (NSString *)getFirstCharByName:(Person *)person;




@end







/

@implementation AddressBook

//重写init,addressbook创建时,就将allPersonDic创建出来

- (instancetype)init{

    if (self = [super init]) {

        self.allPersonDic = [NSMutableDictionary dictionary];

    }

    return self;

}


//MRC下手动释放

- (void)dealloc{

    [_allPersonDic release];

    [super dealloc];

}


//获取名字的首字母

- (NSString *)getFirstCharByName:(Person *)person{

    return [person.name substringToIndex:1];

}


//

//输出所有联系人信息

- (void)outPutAllContactInfo{

    NSLog(@"%@", self.allPersonDic);

}


//

//添加联系人,添加成功返回YES,否则返回NO

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

    //判断姓名和电话不能为空否则添加失败

    if (aPerson.name.length ==0 || aPerson.phoneNumber.length == 0) {

        NSLog(@"添加失败");

        return NO;

    }

    //获取联系人首字母

    NSString *keyStr = [self getFirstCharByName:aPerson];

    //判断是否已存在分组,没有创建后添加联系人,有了直接添加联系人

    NSMutableArray *groupArr = self.allPersonDic[keyStr];

    if (groupArr == nil) {

        //新建一个分组

        NSMutableArray *newGroup = [@[] mutableCopy];

        //将联系人放到分组内

        [newGroup addObject:aPerson];

        //将分组放到通讯录中

        [self.allPersonDic setObject:newGroup forKey:keyStr];

    }else{

        //如果已经存在分组,直接添加联系人

        [groupArr addObject:aPerson];

    }

    return YES;

}


//根据电话查找联系人,并打印

- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum{

    for (NSString *key in self.allPersonDic) {

        for (Person *p in self.allPersonDic[key]) {

            if ([p.phoneNumber isEqualToString:aPhoneNum]) {

                return p;

            }

        }

    }

    return nil;

}

//查找所有女性联系人并按年龄降序排序

-(NSArray *)findPersonsWithSex:(NSString *)aSex{

    //新建一个女性数组

    NSMutableArray *womanArr = [@[] mutableCopy];

    //遍历获得所有女性联系人

    for (NSString *key in self.allPersonDic) {

        for (Person *p in self.allPersonDic[key]) {

            if ([p.gender isEqualToString:@"w"]) {

                //如果是女性,放入女性数组内

                [womanArr addObject:p];

            }

        }

    }

    //升序排序

    NSSortDescriptor *des = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];

    [des release];

    return womanArr;

}

///

//根据姓名更改联系人信息

-(BOOL)changePersonWithName:(NSString *)name phoneNum:

(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge{

    //因为要修改,我们先拷贝字典

    NSMutableDictionary *copyDic = [self.allPersonDic mutableCopy];

    for (NSString *key in copyDic) {

        //拷贝数组

        for (Person *p in self.allPersonDic[key]) {

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

                //如果找到联系人就修改

                [self.allPersonDic[key] removeObject:p];

                Person *p1 = [Person personWithName:name gender:aSex phoneNumber:aNum age:aAge];

                [self.allPersonDic[key] addObject:p1];

                return YES;

            }

        }

    }

    return NO;

}

/

//按照姓名删除联系人

- (BOOL)deletePersonWithName:(NSString*)aPersonName{

    //因为要修改,我们先拷贝字典

    NSMutableDictionary *copyDic = [self.allPersonDic mutableCopy];

    for (NSString *key in copyDic) {

        //拷贝数组

        for (Person *p in self.allPersonDic[key]) {

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

                //如果找到联系人就删除

                [self.allPersonDic[key] removeObject:p];

                //每次删除完进行判断该分组内是否还有对象,如果没有,删除分组

                if ([self.allPersonDic[key] count] == 0) {

                    [self.allPersonDic removeObjectForKey:key];

                return YES;

             }

          }

       }

    }

    return NO;

}

/

//删除一个分组

- (BOOL)deleteGroup:(NSString *)aGroupName{

    //因为要修改,我们先拷贝字典

    NSMutableDictionary *copyDic = [self.allPersonDic mutableCopy];

    for (NSString *key in copyDic) {

        //如果找到就删除

        if ([key isEqualToString:aGroupName]) {

            [self.allPersonDic removeObjectForKey:key];

        }

        return YES;

    }

    return NO;

}

@end




协议写好之后,main函数中可以调用这些方法,形成模拟通讯录(OC)

#import <Foundation/Foundation.h>

#import "Person.h"

#import "AddressBook.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

//1.

        Person *p1 = [Person personWithName:@"Lucy" gender:@"w" phoneNumber:@"123" age:21];

        Person *p2 = [Person personWithName:@"Joe" gender:@"m" phoneNumber:@"456" age:17];

        Person *p3 = [Person personWithName:@"Baby" gender:@"w" phoneNumber:@"789" age:27];

        Person *p4 = [Person personWithName:@"Linda" gender:@"w" phoneNumber:@"000" age:21];

//2.

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

//3.

        [manager addPerson:p1];

        [manager addPerson:p2];

        [manager addPerson:p3];

        [manager addPerson:p4];

        [manager outPutAllContactInfo];

//4.根据电话查找联系人,并打印

        NSLog(@"%@", [manager findPersonWithPhoneNum:@"456"]);

        

//5.根据性别查找联系人,并按年龄升序排序,并打印

        NSLog(@"%@", [manager findPersonsWithSex:@"w"]);

        

//6.根据姓名更改联系人信息

        [manager changePersonWithName:@"Linda" phoneNum:@"012" sex:@"w" age:25];

        [manager outPutAllContactInfo];

//7.按照姓名删除联系人,并展示所有联系人

        [manager deletePersonWithName:@"Baby"];

        [manager outPutAllContactInfo];

//8.删除一个分组,并展示通讯录中所有联系人

        [manager deleteGroup:@"L"];

        [manager outPutAllContactInfo];

//9.展示所有联系人信息(outPutAllContactInfo方法代表的就是题目中要求的showAll方法)

        [manager outPutAllContactInfo];

        

        

        

        

        

        

        

        

        

    }

    return 0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值