OC语言__实现中等难度通讯录

来源:互联网 发布:知识竞赛软件免费版 编辑:程序博客网 时间:2024/05/16 00:33

main.m中的代码:

#import <Foundation/Foundation.h>

#import "Contact.h"

#import "AddressPerson.h"


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        Contact *contact6 = [ContactcontactWithName:@"Xiaodidi"gender:@""address:@"北京"groupName:@"X"number:@"12530"age:18];

        

        Contact *contact7 = [ContactcontactWithName:@"Piaodidi"gender:@""address:@"北京"groupName:@"X"number:@"12530"age:18];

        Contact *contact = [[Contactalloc]initWithName:@"xiaopihai"gender:@""address:@"郑州"groupName:@"X"number:@"0000"age:18];

        Contact *contact1 = [[Contactalloc]initWithName:@"xiaomeimei"gender:@""address:@"郑州"groupName:@"X"number:@"0001"age:18];

        Contact *contact2 = [[Contactalloc]initWithName:@"laonvren"gender:@""address:@"河北"groupName:@"L"number:@"0002"age:40];

        Contact *contact3 = [[Contactalloc]initWithName:@"laonanren"gender:@""address:@"河北"groupName:@"L"number:@"0003"age:40];

       AddressPerson *addressPerson = [[AddressPersonalloc]init];

       //添加联系人

        [addressPersonaddContacts:contact];

        [addressPersonaddContacts:contact1];

        [addressPersonaddContacts:contact2];

        [addressPersonaddContacts:contact3];

        [addressPersonaddContacts:contact6];

        [addressPersonaddContacts:contact7];

        //输出所有的联系人

        [addressPersonshowContacts];

        //获取x分组的联系人并升序

        [addressPersonobtainGroupName:@"x"];

        //通过号码找联系人

        [addressPersonobtainGroupNumber:@"0001"];

        //获取女联系人并降序

        [addressPersonobtainGender:@""];

        //删除指定联系人

        [addressPersondeletesName:@"xiaomeimei"];

       //删除指定分组

        [addressPersondeletesGroupName:@"L"];

        //打印所有联系人

        [addressPersonshowContacts];

        

       //释放内存

        [addressPersonrelease];

        [contactrelease];

        [contact1release];

        [contact1release];

        [contact2release];

        [contact2release];

        [contact3release];

        [contact6release];

        [contact7release];


Contact.h中的代码:

#import <Foundation/Foundation.h>


//1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息


@interface Contact :NSObject

//字符串类型:姓名性别住址分组名称

@property (nonatomic,retain)NSString *name, *gender, *address, *groupName, *number;

//整型:电话号码 年龄

@property (nonatomic)NSInteger  age;


//自定义初始化方法

-(id)initWithName:(NSString *)name

           gender:(NSString *)gender

          address:(NSString *)address

        groupName:(NSString *)groupName

           number:(NSString *)number

              age:(NSInteger)age;


//便利构造器

+(id)contactWithName:(NSString *)name

              gender:(NSString *)gender

             address:(NSString *)address

           groupName:(NSString *)groupName

              number:(NSString *)number

                 age:(NSInteger)age;


-(void)show;


//比较姓名(升序)

-(NSComparisonResult)comperByName:(Contact *)anotherContact;

//年龄比较(降序)

-(NSComparisonResult)comperByAge:(Contact *)anotherContact;

@end



Contact.m中的代码:

#import "Contact.h"


@implementation Contact

//自定义初始化方法

-(id)initWithName:(NSString *)name

           gender:(NSString *)gender

          address:(NSString *)address

        groupName:(NSString *)groupName

           number:(NSString *)number

              age:(NSInteger)age{

   if (self = [superinit]) {

       self.name = [namecapitalizedString];//name的首字母改成大写

       self.gender = gender;

       self.address = address;

       self.groupName = groupName;

       self.number = number;

       self.age = age;

    }

    return self;

}


//便利构造器

+(id)contactWithName:(NSString *)name

              gender:(NSString *)gender

             address:(NSString *)address

           groupName:(NSString *)groupName

              number:(NSString *)number

                 age:(NSInteger)age{

   return [[[Contactalloc]initWithName:name

                                  gender:gender

                                 address:address

                               groupName:groupName

                                  number:number

                                     age:age]autorelease];

}

//重写dealloc

- (void)dealloc

{

    NSLog(@"%@内存已被释放",self.name);

   self.name =nil;

   self.gender =nil;

   self.address =nil;

   self.groupName =nil;

   self.number =nil;

    [superdealloc];

}

//重写description

- (NSString *)description

{

    return [NSStringstringWithFormat:@"name:%@ gender:%@ address:%@ groupName:%@ number:%@ age:%ld",_name,_gender,_address,_groupName,_number,_age];

}


//显示联系人信息

-(void)show{

    NSLog(@"name:%@ gender:%@ address:%@ groupName:%@ number:%@ age:%ld",_name,_gender,_address,_groupName,_number,_age);

}


//比较姓名(升序)

-(NSComparisonResult)comperByName:(Contact *)anotherContact{

    //比较相邻俩个的名字

   return [self.namecompare:anotherContact.name];

}

//年龄比较(降序)

-(NSComparisonResult)comperByAge:(Contact *)anotherContact{

   if (self.age > anotherContact.age) {

        returnNSOrderedAscending;

    }elseif (self.age < anotherContact.age){

        returnNSOrderedDescending;

    }

    returnNSOrderedSame;

}

@end



AddressPerson.h中的代码:

#import <Foundation/Foundation.h>

@class Contact;

@interface AddressPerson :NSObject

@property (nonatomic,retain)NSMutableDictionary *dic;

//添加联系人

-(void)addContacts:(Contact *)contacts;

//获取某个分组的所有联系人

-(void)obtainGroupName:(NSString *)groupName;

//输出所有联系人

-(void)showContacts;

//通过号码搜联系人

-(void)obtainGroupNumber:(NSString *)number;

//获取所有性别为女的联系人并降序输出

-(void)obtainGender:(NSString *)gender;

//根据姓名删除某人

-(void)deletesName:(NSString *)name;

//删除某个分组的全部联系人

-(void)deletesGroupName:(NSString *)groupName;

@end




AddressPerson.m中的代码:

#import "AddressPerson.h"

//引入

#import "Contact.h"

@implementation AddressPerson

//自定义初始化

-(id)init {

   self = [superinit];

   if (self) {

        //初始化添加一个人的联系

        Contact *contact4 = [[Contactalloc]initWithName:@"Zhangsan"gender:@""address:@"郑州"groupName:@"Z"number:@"1834803"age:21];

        //将这个人的信息添加到groupName1

       NSMutableArray *groupName1 = [NSMutableArrayarrayWithObject:contact4];

       _dic = [[NSMutableDictionaryalloc]initWithObjectsAndKeys:groupName1,@"Z",nil];

        [contact4release];

    }

    return self;

}

-(NSMutableDictionary *)dic{

   return_dic;

}


//添加联系人

-(void)addContacts:(Contact *)contacts{

    //判断name的长度是否为0number的字符串是否为空(两种方法都可以)

   if ([contacts.namelength] ==0 || [contacts.numberisEqualToString:@""]) {

        NSLog(@"添加失败(你输入的名字或者号码是空的)");

    }else{

        //提取联系人名字首字母用firstContact接收

       NSString *firstContact = [contacts.namesubstringToIndex:1];

        //把联系人名字首字母放到groupArr

       NSMutableArray *groupNameArr =_dic[firstContact];

        //判断groupArr中是否有添加的联系人名字的首字母那一个分组

       if (!groupNameArr) {

            //如果没有建一个其首字母的分组

            groupNameArr = [NSMutableArrayarrayWithCapacity:1];

            //将联系人的信息和分组存到dic可变数组中

            [_dicsetObject:groupNameArrforKey:firstContact];

        }

        //groupArr添加到contacts参数名中

        [groupNameArraddObject:contacts];

       NSLog(@"恭喜你添加成功,添加信息为:%@",contacts);

    }

}



//输出所有联系人

-(void)showContacts{

    NSLog(@"------所有联系人得信息:----------");

    //遍历key

   for (id keyin_dic) {

        //通过key值找到对应的value

       NSMutableArray *value = [_dicobjectForKey:key];

        //遍历value并放在show

        

       for (NSString *showin value) {

           NSLog(@"%@",show);

        }

    }

}



//获取某个分组的所有联系人

-(void)obtainGroupName:(NSString *)groupName{

    NSLog(@"--------获取某个分组的所有联系人-----------");

    //设定一个可变数组wGroup来接受可变字典中的分组名

   NSString *groupName1 = [groupNamecapitalizedString];

   NSMutableArray *wGroup =_dic[groupName1];

    //把分组名中名字进行排序

    [wGroupsortUsingSelector:@selector(comperByName:)];

    //遍历wGroup并把值放在show

   for (id showin wGroup) {

       NSLog(@"%@分组下的联系人:%@", groupName1, show);

    }

}


//通过号码搜联系人

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

    NSLog(@"------根据号码搜人---------");

    //遍历dic字典找到所有的key

   for (id keyin_dic) {

        //通过key找到value

       NSMutableArray *value = [_dicobjectForKey:key];

        //遍历value

       for (id showin value) {

            //找到value中的号码那个字符串

           if ([[shownumber]isEqualToString:number]) {

               NSLog(@"搜索的%@号码匹配的联系人信息是:%@", number, show);

            }

        }

    }

}


//获取所有性别为女的联系人并降序输出

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

    NSLog(@"--------获取女性联系人并降序------------");

    //定义一个array并初始化

    NSMutableArray *array = [[NSMutableArrayalloc]init];

    

    //遍历字典中的key

   for (id keyin_dic) {

        //通过key找到value的所有值

       NSMutableArray *value = [_dicobjectForKey:key];

       for (id showin value) {

           if ([[showgender]isEqualToString:gender]) {

                [arrayaddObject:show];

            }

        }

    }

    //对性别为女的联系人排序,并存放与array

    [arraysortUsingSelector:@selector(comperByAge:)];

   for (id showin array) {

       NSLog(@"性别为%@的联系人:%@", gender, show);

    }

    

}


//根据姓名删除某人

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

    NSLog(@"------根据姓名删除人-------");

   NSInteger count =0;//计数

    //把输入的name值换成大写

   NSString *name1 = [namecapitalizedString];

    //key值中的元素1

   NSString *key = [name1substringToIndex:1];

    //通过key找到对应的value

   NSMutableArray *value =_dic[key];

    //遍历vanlue

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

       Contact *temp = value[i];

        //找到需求的名字,定位除i的值

       if ([temp.nameisEqualToString:name1]) {

            //删除value中的i元素

            [valueremoveObjectAtIndex:i];

            count++;

            i--;

           NSLog(@"需要删除%@的信息",name);

           NSLog(@"联系人%@已经被成功删除", name);

        }

    }

   if (count ==0) {

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

    }

}




//删除某个分组的全部联系人

-(void)deletesGroupName:(NSString *)groupName{

    NSLog(@"---------删除某个分组的全部联系人---------");

    //在字典中查找需求分组

   NSMutableArray *Group =_dic[groupName];

    //删除该分组的全部分组

    [Group removeAllObjects];

   NSLog(@"需要删除的分组为:%@",groupName);

   NSLog(@"分组%@的联系人已被删除",groupName);

}


//dealloc

- (void)dealloc

{

    NSLog(@"dic内存已被释放");

   self.dic =nil;

    [superdealloc];

}

@end




0 0