完整通讯录

来源:互联网 发布:金蝶软件模块 编辑:程序博客网 时间:2024/04/27 23:03

1), 将所有的 实例变量 用 属性代替 
2)实例变量用点语法调用。
3)实现添加联系人到通讯录,当姓名,电话号码不为空。邮箱的格式正确时,添加成功
4)获取某个分组的所有联系人并且按姓名升序排序
5)根据电话搜索某一个联系人
6)按性别找人并全部输出并且按照年龄排序
7)按姓名查找删除某一个联系人
8)按组名查找并删除某一组联系人

主函数 main.m 中

AddressPerson *p=[[AddressPerson alloc] initWithName:@"Agailun" Gender:@"M" Number:@"13843838438" Address:@"demaxiya" Group:@"A" Age:@"25" Email:@"123456789@qq.com"];

        AddressPerson *p1=[[AddressPerson alloc] initWithName:@"Awujiyi" Gender:@"F" Number:@"13843838439" Address:@"demaxiya" Group:@"A" Age:@"26" Email:@"123456987@qq.com"];

        AddressPerson *p2=[[AddressPerson alloc] initWithName:@"Bguanghui" Gender:@"F" Number:@"13843838440" Address:@"demaxiya" Group:@"B" Age:@"20" Email:@"123654789@qq.com"];

        AddressPerson *p3=[[AddressPerson alloc] initWithName:@"Bdelaiesi" Gender:@"M" Number:@"13843838441" Address:@"nuokesasi" Group:@"B" Age:@"25" Email:@"456987123@qq.com"];

        AddressPerson *p4=[[AddressPerson alloc] initWithName:@"Cdalaiwen" Gender:@"M" Number:@"13843838442" Address:@"nuokesasi" Group:@"C" Age:@"23" Email:@"456789123@qq.com"];

        AddressPerson *p5=[[AddressPerson alloc] initWithName:@"Cruiwen" Gender:@"F" Number:@"13843838443" Address:@"nuokesasi" Group:@"C" Age:@"18" Email:@"456987123@qq.com"];

       

       NSMutableArray *temp=[NSMutableArray arrayWithObjects:p,p1,p2,p3,p4,p5, nil];

        AddressPerson *p6=[[AddressPerson alloc] initWithName:@"Daiweiniya" Gender:@"F" Number:@"13843838444" Address:@"aiouniya" Group:@"D" Age:@"108" Email:@"654987123@qq.com"];

        

       //   添加所有联系人

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

        for (int i=0; i<[temp count]; i++) {

            [q addressPerson:temp[i]];

        }

       //   添加一个联系人

        [q addressPerson:p6];

        //    NSLog(@"%@",q.dict);

        

       //   根据组名查找联系人并且按照姓名升序排列

        NSMutableArray *group1=[q groupPerson:@"C"];

        NSLog(@"%@",group1);

        

       //  根据电话号码查找联系人

        AddressPerson *number1=[q numberPerson:@"13843838440"];

        NSLog(@"%@",number1);

        

       //   根据性别查找联系人 并且按照年龄排序

        NSMutableArray *gender1=[q genderPerson:@"F"];

        NSLog(@"%@",gender1);

        

       //   根据姓名删除联系人

        NSMutableDictionary *nameDel=[q nameDelPerson:@"Cdalaiwen"];

        NSLog(@"%@",nameDel);

        

       //   根据组名删除联系人

        NSMutableDictionary *groupDel=[q groupDelPerson:@"A"];

        NSLog(@"%@",groupDel);


封装 AddressBook.h中

#import <Foundation/Foundation.h>

@class AddressPerson;  // 注意这个引用

@interface AddressBook : NSObject

{

//   管理通讯录的人的字典,他的key值就是分组的值,Value是一个数组,存放相同分组的人

    NSMutableDictionary *_dict;

//   这个字典当做AdressBook类的一个实例变量,用来存储所有的联系人,这样就不用到main函数中去创建了,封装的更彻底。

}

-(id)init;


// getter 方法

-(NSMutableDictionary *)dict;


//添加联系人

-(void)addressPerson:(AddressPerson *)aPerson;


//根据组名查找联系人并且按照姓名升序排列

-(NSMutableArray *)groupPerson:(NSString *)groupName;


//根据电话号码查找联系人

-(AddressPerson *)numberPerson:(NSString *)number;


//根据性别查找联系人并且按照年龄升序排列

-(NSMutableArray *)genderPerson:(NSString *)Gender;


//根据名字删除联系人

-(NSMutableDictionary *)nameDelPerson:(NSString *)Name;


//根据组名删除联系人

-(NSMutableDictionary *)groupDelPerson:(NSString *)Group;

@end

 



封装 AddressBook.m 中

#import "AddressBook.h"

#import "AddressPerson.h" // 注意这个引用

@implementation AddressBook

-(id)init{

    self=[super init];

    if (self) {

        //  将字典初始化

        _dict=[NSMutableDictionary dictionary];

    }

    return self;

}

-(NSMutableDictionary *)dict{

    return _dict;

}


// 添加联系人

-(void)addressPerson:(AddressPerson *)aPerson{

//   判断联系人名字,电话号码,邮箱是否为空

    if ([aPerson.name isEqualToString:@" "]||[aPerson.number isEqualToString:@" "]||[aPerson.email hasSuffix:@" "]) {

        NSLog(@"打印失败");

        return;

    }else{

//        取首字母,当做 Key

        NSString *first=[aPerson.name substringToIndex:1];

//        判断首字母

        if ([_dict objectForKey:first]==nil) {

//       如果通过first在字典中取不到Value说明没有这个分组存在,那么创建一个分组

            

//        创建可变数组 ,添加首字母相同的person 到数组中

            NSMutableArray *tem=[NSMutableArray arrayWithObject:aPerson];

            

//       添加到字典中,以首字母当做Key,可变数组当做Value,存入管理字典中

            [_dict setObject:tem forKey:first];

        }else{

//         如果存在这个分组的Value ,那么直接添加。

            

//         直接添加联系人

            [[_dict objectForKey:first] addObject:aPerson];

        }

    }

    

}


//根据组名查找联系人并且按照姓名升序排序

-(NSMutableArray *)groupPerson:(NSString *)Group{

//   将查找到的组放到数组中。

    NSMutableArray *tem1=[_dict objectForKey:Group];

    

//    姓名的 block 排序

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

        return [[obj1 name]compare:[obj2 name]];

    }];

    return tem1; //返回已经排序好的数组

}


// 根据电话号码查找联系人

-(AddressPerson *)numberPerson:(NSString *)Number{

//    遍历字典 group 就是字典的key

    for (NSString *group in _dict) {

//      将字典的Value 的值放到数组中

        NSMutableArray *arr=[_dict objectForKey:group];

//        遍历数组

        for (AddressPerson *c in arr) {

//            判断电话号码

            if ([Number  isEqualToString:c.number]) {

                return c;

            }

        }

    }

    return nil;

}

// 根据性别查找联系人并且按照年龄升序排列

-(NSMutableArray *)genderPerson:(NSString *)Gender{

    NSMutableArray *arr=[NSMutableArray array];

    //    遍历字典 group 就是字典的key

    for (NSString *group in _dict) {

        

//      AddressPerson对象遍历 数组[_dict objectForKey:group]

        for (AddressPerson *c in [_dict objectForKey:group]) {

            

//         判断性别

            if ([Gender isEqualToString:c.gender]) {

                [arr addObject:c];

            }

        }

    }

//    block 排序 此时age是字符串用intValue转化为整型(int

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

        return [[obj1 age] intValue]>[[obj2 age] intValue];

    }];

    return arr;

}

// 根据姓名删除联系人

-(NSMutableDictionary *)nameDelPerson:(NSString *)Name{

    

//    当人的名字没有重复的时候,使用下面这个方法

    /*

//    遍历字典

    for (NSString *group in _dict) {

//     将字典的Value 值放到数组中

        NSMutableArray *arr=[_dict objectForKey:group];

//      遍历数组

        for (AddressPerson *one in arr) {

//            判断姓名

            if ([one.name isEqualToString:Name]) {

                [arr removeObject:one];

                break; 

            }

        }

    }

    return _dict;

    */

    

//  当人的名字有重复的时候,则使用下面的这个方法

    

//    取出所有的key 值放到数组 arr

    NSArray *arr=[_dict allKeys];

    NSMutableArray *marr1=[NSMutableArray array];

//    用循环将字典的Value的值放入数组marr1

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

        marr1=[_dict objectForKey:arr[i]];

    }

    int a=(int)[marr1 count]; //判断数组的长度,强制转换为整型

    for (int i=0; i<a; i++) {

//        判断姓名

        if ([[marr1[i] name]isEqualToString:Name]) {

//         在数组中根据名字删除

            [marr1 removeObjectAtIndex:i];

            a=a-1;

            i=i-1;

        }

    }

    return _dict;

}


//根据组名删除练习人

-(NSMutableDictionary *)groupDelPerson:(NSString *)Group{

//   取出所有的key存在数组中

    NSArray *temp=[_dict allKeys];

//    遍历数组

    for (NSString *key in temp) {

//        判断组名

        if ([key isEqualToString:Group]) {

//            从字典中删除分组

            [_dict removeObjectForKey:key];

        }

    }

    return _dict;

}

@end



AdressPerson.h 中

@interface AddressPerson : NSObject

{

    NSString * _name;  

    NSString * _gender;

    NSString * _number;

    NSString * _address;

    NSString * _group;

    NSString * _age;

    NSString * _email;

}

-(id)initWithName:(NSString *)name Gender:(NSString *)gender

           Number:(NSString *)number Address:(NSString *)address

            Group:(NSString *)group Age:(NSString *)age

            Email:(NSString *)email; 



@property(nonatomic,retain)NSString *name;

@property(nonatomic,retain)NSString *gender;

@property(nonatomic,retain)NSString *number;

@property(nonatomic,retain)NSString *address;

@property(nonatomic,retain)NSString *group;

@property(nonatomic,retain)NSString *age;

@property(nonatomic,retain)NSString *email;

@end


AddressPerson.m 中

@implementation AddressPerson

//  初始化

-(id)initWithName:(NSString *)name Gender:(NSString *)gender

           Number:(NSString *)number Address:(NSString *)address

            Group:(NSString *)group Age:(NSString *)age

            Email:(NSString *)email{

    self=[super init];

    if (self) {

        _name=name;

        _gender=gender;

        _number=number;

        _address=address;

        _group=group;

        _age=age;

        _email=email;

    }

    return self;

}


//  设置名字 setter方法

-(void)setName:(NSString *)name{

    if (_name!=name) {

        [_name release];

        _name=[name retain];

    }

}


//  获取名字 getter方法

-(NSString *)name{

    return _name;

}


//  设置性别  setter方法

-(void)setGender:(NSString *)gender{

    if (_gender!=gender) {

        [_gender release];

        _gender=[gender retain];

    }

}


//  获取性别 getter 方法

-(NSString *)gender{

    return _gender;

}


//  设置电话号码  setter方法

-(void)setNumber:(NSString *)number{

    if (_number!=number) {

        [_number release];

        _number=[number retain];

    }

}


//  获取电话号码 getter 方法

-(NSString *)number{

    return _number;

}


//  设置地址  setter方法

-(void)setAddress:(NSString *)address{

    if (_address!=address) {

        [_address release];

        _address=[address retain];

    }

}


//  获取地址 getter 方法

-(NSString *)address{

    return _address;

}


//  设置组名  setter方法

-(void)setGroup:(NSString *)group{

    if (_group!=group) {

        [_group release];

        _group=[group retain];

    }

}


//  获取组名 getter 方法

-(NSString *)group{

    return _group;

}


//  设置年龄  setter方法

-(void)setAge:(NSString *)age{

    if (_age!=age) {

        [_age release];

        _age=[age retain];

    }

}


//  获取年龄 getter 方法

-(NSString *)age{

    return _age;

}


//  设置邮箱  setter方法

-(void)setEmail:(NSString *)email{

    if (_email!=email) {

        [_email release];

        _email=[email retain];

    }

}


//  获取邮箱 getter 方法

-(NSString *)email{

    return _email;

}


-(NSString *)description{

    return [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@",_name,_gender,_number,_address,_group,_age,_email];

}


@end








0 0