OC通讯录(MRC手动管理内存)

来源:互联网 发布:螳螂虾攻击力知乎 编辑:程序博客网 时间:2024/06/05 06:19

//  ****** 获取姓名首字母 ********

//  ****** NSString+Characters.h文件

#import <Foundation/Foundation.h>

@interface NSString (Characters)

- (NSString *)charactersGroupName;

@end

//  ********NSString+Characters.m文件

#import "NSString+Characters.h"

@implementation NSString (Characters)

- (NSString *)charactersGroupName

{

    NSString *string = [selfuppercaseString];

    return [stringsubstringToIndex:1];

}

@end

//  ****** 创建一个Person类 ******

//  ****** Person.h文件

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property(nonatomic,retain)NSString *name;

@property(nonatomic,assign)int age;

@property(nonatomic,retain)NSString *sex;

@property(nonatomic,retain)NSString *num;

@property(nonatomic,retain)NSString *groupName;

- (instancetype)initWithName:(NSString *)name //  重写初始化

               Age:(int)age

               Sex:(NSString *)sex

               Num:(NSString *)num;

+ (instancetype)personWithName:(NSString *)name //  便利构造器

                 Age:(int)age

                 Sex:(NSString *)sex

                 Num:(NSString *)num;

- (void)description; //  重写description方法

@end


//  ****** Person.m文件

#import "Person.h"

#import "NSString+Characters.h"

@implementation Person

- (instancetype)initWithName:(NSString *)name

                         Age:(int)age

                         Sex:(NSString *)sex

                         Num:(NSString *)num

{

    _name = name;

    _age = age;

    _sex = sex;

    _num = num;

    _groupName = [namecharactersGroupName]; //通过姓名得到组名

    returnself;

}

+ (instancetype)personWithName:(NSString *)name

                           Age:(int)age

                           Sex:(NSString *)sex

                           Num:(NSString *)num

{

    Person *p = [[[Personalloc] initWithName:nameAge:age Sex:sexNum:num] autorelease];

    return p;

}

- (void)description

{

    NSLog(@"姓名:%@年龄:%d 性别:%@号码:%@ 分组:%@",self.name,self.age,self.sex,self.num,self.groupName);

}

- (void)dealloc //  重写dealloc方法

{

    [_namerelease];

    [_sexrelease];

    [_numrelease];

    [_groupNamerelease];

    [superdealloc];

}

@end

//  ****** 通讯录功能实现 ******

//  ****** AddressBook.h文件

#import <Foundation/Foundation.h>

@class Person;

@interface AddressBook : NSObject

@property(nonatomic,retain)NSMutableDictionary *allPersonDic;

- (instancetype)init;

+ (instancetype)addressBook;

// 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

//  ****** AddressBook.m文件

#import "AddressBook.h"

#import "Person.h"

#import "NSString+Characters.h"

@implementation AddressBook

- (instancetype)init

{

    self = [superinit];

    if (self) {

        self.allPersonDic = [NSMutableDictionarydictionary];

    }

    returnself;

}

+ (instancetype)addressBook

{

    AddressBook *add = [[[AddressBookalloc] init]autorelease];

    return add;

}

- (void)dealloc

{

    [_allPersonDicrelease];

    [superdealloc];

}

// 3.)添加联系人

- (BOOL)addPerson:(Person *)aPerson

{

    // 判断姓名、电话是否为空,分组是否存在

    BOOL isNameNil = aPerson.name ==nil;

    BOOL isNumNil = aPerson.num ==nil;

    BOOL isGroupExist = [[_allPersonDicallKeys] containsObject:aPerson.groupName];

    // 当姓名、电话不为空,分组存在时

    if (!isNameNil && !isNumNil && isGroupExist) {

        // 遍历字典,找到对应的组

        for (NSString *keyin _allPersonDic) {

            NSMutableArray *array =_allPersonDic[key];

            if ([keyisEqualToString:aPerson.groupName]) {

                // 遍历组,判断是否重名

                for (Person *pin array) {

                    if (p.name == aPerson.name) {

                        NSLog(@"此联系人已存在,添加失败!!!");

                        returnNO;

                    }

                }

                // 遍历之外添加联系人

                NSLog(@"添加成功");

                [array addObject:aPerson];

                returnYES;

            }

        }

    }elseif (!isNameNil && !isNumNil) { // 当分组不存在时,创建分组

        [_allPersonDicsetValue:[NSMutableArrayarrayWithObject:aPerson] forKey:aPerson.groupName];

        NSLog(@"添加成功");

        returnYES;

    }else {

        NSLog(@"添加失败!!!姓名或号码不能为空!!!");

        returnNO;

    }

    returnNO;

}


// 4.)根据号码查找联系人

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

{

    Person *per =nil;

    for (NSArray *arrayin [_allPersonDicallValues]) {

        for (Person *pin array) {

            if (p.num == aPhoneNum) {

                per = p;

                return per;

            }

        }

    }

    NSLog(@"没有该联系人");

    return per;

}

// 5.)根据性别查找联系人,并将查到的联系人按照年龄升序排序

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

{

    NSMutableArray *nma = [NSMutableArrayarray];

    for (NSArray *arrayin [_allPersonDicallValues]) {

        for (Person *pin array) {

            if (p.sex == aSex) {

                [nma addObject:p];

            }

        }

    }

    NSComparator comSex  = ^(Person *p1,Person *p2){

        if (p1.age > p2.age) {returnNSOrderedDescending;}

        elseif(p1.age < p2.age){returnNSOrderedAscending;}

        else {returnNSOrderedSame;}

    };

    NSArray *arr = [nmasortedArrayUsingComparator:comSex];

    return arr;

}

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

- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(int) aAge

{

    // 根据姓名找到联系人

    for (NSArray *arrin [_allPersonDicallValues]) {

        for (Person *pin arr) {

            if ([p.nameisEqualToString:name]) {

                [p setName:name];

                [p setNum:aNum];

                [p setSex:aSex];

                [p setAge:aAge];

                [p setGroupName:[namecharactersGroupName]];

                NSLog(@"修改成功");

                returnYES;

            }

        }

    }

    NSLog(@"修改失败,没有此联系人");

    returnNO;

}

// 7.)按照姓名删除联系人

- (BOOL)deletePersonWithName:(NSString*)aPersonName

{

    for (NSMutableArray *arrin [_allPersonDicallValues]) {

        for (Person *pin arr) {

            if ([p.nameisEqualToString:aPersonName]) {

                [arr removeObject:p];

                NSLog(@"删除成功");

                returnYES;

            }

        }

    }

    NSLog(@"删除失败");

    returnNO;

}

// 8.)删除一个分组

- (BOOL)deleteGroup:(NSString *)aGroupName

{

    for (NSString *keyin _allPersonDic) {

        if ([keyisEqualToString:aGroupName]) {

            [_allPersonDicremoveObjectForKey:aGroupName];

            NSLog(@"分组删除成功");

            returnYES;

        }

    }

    NSLog(@"该分组不存在");

    returnNO;

}

// 9.)展示通讯录中的所有联系人信息

- (void)showAll

{

    for (NSArray *arrin [_allPersonDicallValues]) {

        for (Person *pin arr) {

            [p description];

        }

    } 

}

@end


//  ****** main.m文件 ******

#import <Foundation/Foundation.h>

#import "NSString+Characters.h"

#import "Person.h"

#import "AddressBook.h"


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

    @autoreleasepool {

        /*

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

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

         姓名:Lucy性别:电话:123 年龄:21

         姓名:Joe性别:电话:456 年龄:17

         姓名:Baby性别:电话:789 年龄:27

         姓名:Linda性别:电话:000 年龄:20

         

         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 *p1 = [PersonpersonWithName:@"Lucy"Age:21Sex:@""Num:@"123"];

        Person *p2 = [PersonpersonWithName:@"Joe"Age:17Sex:@""Num:@"456"];

        Person *p3 = [PersonpersonWithName:@"Nany"Age:27Sex:@""Num:@"798"];

        Person *p4 = [PersonpersonWithName:@"Linda"Age:20Sex:@""Num:@"000"];

        [p1 description];

        

        AddressBook *add = [AddressBookaddressBook];

        

        // 3.)添加联系人

        NSLog(@"=============添加联系人 ==============");

        [add addPerson:p1];

        [add addPerson:p2];

        [add addPerson:p3];

        [add addPerson:p4];

        [add addPerson:p1];

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

        

        // 4.)根据电话查找某个联系人

        NSLog(@"==========根据姓名查找联系人 ===========");

        [[add findPersonWithPhoneNum:@"123"]description];

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

        

        // 5.)根据性别查找联系人,并将查到的联系人按照年龄升序排序

        NSLog(@"==========根据性别查找联系人 ===========");

        NSArray *arr = [addfindPersonsWithSex:@""];

        for (int i =0; i <arr.count; i++) {

            [arr[i] description];

        }

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

        

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

        NSLog(@"===========更改联系人信息 =============");

        [add changePersonWithName:@"Lucy"phoneNum:@"666"sex:@""age:61];

        [[add findPersonWithPhoneNum:@"666"]description];

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

        

        // 7.)按照姓名删除联系人

        NSLog(@"==========按照姓名删除联系人 ===========");

        [add deletePersonWithName:@"Linda"];

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

        

        // 8.)删除一个分组

        NSLog(@"============删除一个分组 ==============");

        [add deleteGroup:@"L"];

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

        

        // 9.)展示通讯录中的所有联系人信息

        NSLog(@"======展示通讯录中的所有联系人信息 =======");

        [add showAll];

    }

    return0;

}




0 0
原创粉丝点击