OC 简单通讯录操作(控制台)

第一次发博客,望大家多多批评~~
首先,今天我们做的是一个基于OC语言的一个控制台上的通讯录操作。创建好工程后,我们先建立一个AddressContact类(一个联系人类)。这里我用的是先实例变量,然后用@property 属性,然后建立了一个初始化方法。当然你会发现这里我所有的实例变量都是NSString,这是一个取巧的地方,后面会讲到。具体代码如下:
 1 #import <Foundation/Foundation.h>
 2 
 3 @interface AddressContact : NSObject
 4 
 5 {
 6     NSString *_name;
 7     NSString *_gender;
 8     NSString *_phoneName;
 9     NSString *_address;
10     NSString *_groupName;
11     NSString *_age;
12 }
13 @property(nonatomic,retain)NSString * name;
14 @property(nonatomic,retain)NSString * gender;
15 @property(nonatomic,retain)NSString * phoneName;
16 @property(nonatomic,retain)NSString * address;
17 @property(nonatomic,retain)NSString * groupName;
18 @property(nonatomic,retain)NSString * age;
19 
20 -(id)initWithName:(NSString *)name
21     withPhoneName:(NSString *)phoneName
22        withGender:(NSString *)gender
23       withAddress:(NSString *)address
24           withAge:(NSString *)age;
25 @end
AddressContact.h
现在我们在  .m中实现 .h中的方法,这里我省略了属性的实现(@synthesize),组名直接等于了姓名的首字母(大写):
 1 #import "AddressContact.h"
 2 
 3 @implementation AddressContact
 4 -(id)initWithName:(NSString *)name
 5     withPhoneName:(NSString *)phoneName
 6        withGender:(NSString *)gender
 7       withAddress:(NSString *)address
 8           withAge:(NSString *)age{
 9     self=[super init];
10     if (self)
11     {
12         _name=name;
13         _gender=gender;
14         _phoneName=phoneName;
15         _address=address;
16         _age=age;
17         _groupName=[[name substringToIndex:1] uppercaseString];
18         
19     }
20     return self;
21 }
22 - (NSString *)description
23 {
24     return [NSString stringWithFormat:@"%@,%@,%@,%@,%@,%@", _name,_age,_gender,_phoneName,_address,_groupName];
25 }
26 
27 @end
AddressContact.m
之后,我把对于通讯录的操作,放在了另一个AddAperson类中,首先两个实例变量,一个NSMutableArray,一个NSMutableDictionary用于方法的实现。
 1 #import <Foundation/Foundation.h>
 2 @class AddressContact;
 3 @interface AddAperson : NSObject
 4 {
 5     NSMutableArray *_arr;
 6     NSMutableDictionary *_addressBook;
 7 }
 8 @property (nonatomic,retain)NSMutableArray *arr;
 9 @property (nonatomic,retain)NSMutableDictionary *addressBook;
10 -(id)initWithArr:(NSMutableArray *)arr
11  withAddressBook:(NSMutableDictionary *)addressBook;
12 -(void)verifyAndAppend:(AddressContact *)person;
13 -(void)printAllPerson;
14 -(void)searchWithGender:(NSString *)gender;
15 -(void)searchWithPhoneName:(NSString *)addressContactPhoneName;
16 -(void)sortWithGroupName:(NSString *)groupName;
17 -(void)deleteWithGroupName:(NSString *)groupName;
18 -(void)deleteWithName:(NSString *)name;
19 @end
AddAperson.h
  1 #import "AddAperson.h"
  2 #import "AddressContact.h"
  3 @implementation AddAperson
  4 -(id)initWithArr:(NSMutableArray *)arr
  5  withAddressBook:(NSMutableDictionary *)addressBook
  6 {
  7     self=[super init];
  8     if (self)
  9     {
 10         _arr=arr;
 11         _addressBook=addressBook;
 12     }
 13     return self;
 14 }
 15 -(void)verifyAndAppend:(AddressContact *)person
 16 {
 17     [_arr addObject:person];
 18     if ([[person name] isEqualToString:@""]|| [[person phoneName] isEqualTo:@""])
 19         {
 20             NSLog(@"添加失败");
 21             //添加失败后,移除这个对象
 22             [_arr removeObject:person];
 23             return;
 24         }else
 25         {
 26             //将数据加入到字典中
 27             NSString *key=[[[person name] uppercaseString] substringToIndex:1];
 28             NSMutableArray *arr=[NSMutableArray arrayWithArray:_addressBook[key]];
 29             [arr addObject:person];
 30             [_addressBook setObject:arr forKey:key];
 31         }
 32 }
 33 -(void)printAllPerson
 34 {
 35     for (int i=0; i<[_arr count]; i++)
 36     {
 37         NSLog(@"%@",_arr[i]);
 38     }
 39 }
 40 //性别查找
 41 -(void)searchWithGender:(NSString *)gender
 42 {
 43     for (int i=0; i<[_arr count]; i++) {
 44         if ([[_arr[i] gender] isEqualToString:gender])
 45         {
 46             NSLog(@"%@",_arr[i]);;
 47         }else{
 48             NSLog(@"无此联系人!!!!");
 49         }
 50     }
 51 }
 52 //电话号码查找
 53 -(void)searchWithPhoneName:(NSString *)addressContactPhoneName
 54 {
 55     for (int i=0; i<[_arr count]; i++)
 56     {
 57         if ([[_arr[i] phoneName] isEqualTo:addressContactPhoneName] )
 58         {
 59             NSLog(@"%@",_arr[i]);
 60         }else{
 61             NSLog(@"无此联系人!!!!");
 62         }
 63     }
 64 }
 65 //组名排序
 66 -(void)sortWithGroupName:(NSString *)groupName{
 67     //创建一个临时数组放入字典中所有的key值
 68     NSArray *arr=[NSArray arrayWithArray:[_addressBook objectForKey:groupName]];
 69     //遍历数组
 70     for (int i=0; i<[arr count]; i++)
 71     {   //创建一个临时数组,存放数组中的数据排序后的结果
 72         NSArray *arr1=[arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
 73         {
 74             return [[obj2 name] compare:[obj1 name]];
 75         }];
 76         NSLog(@"%@",arr1[i]);
 77     }
 78 }
 79 //按组名查找并删除
 80 -(void)deleteWithGroupName:(NSString *)groupName{
 81     NSArray *arr=[_addressBook allKeys];
 82     for (NSString *key in arr) {
 83         if ([key isEqualTo:groupName]) {
 84             [_addressBook removeObjectForKey:key];
 85         }else{
 86             NSLog(@"没有找到组名!!!");
 87         }
 88     }
 89 }
 90 //按姓名查找并删除
 91 -(void)deleteWithName:(NSString *)name{
 92     NSArray *arr=[_addressBook allKeys];
 93     for (int i=0; i<[arr count]; i++)
 94     {
 95         for (AddressContact * add in _addressBook[arr[i]]) {
 96             [_addressBook[arr[i]] removeObject:add];
 97         }
 98     }
 99 }
100 @end
AddAperson.m
main里的调用
  1 #import <Foundation/Foundation.h>
  2 #import "AddressContact.h"
  3 #import "AddAperson.h"
  4 int main(int argc, const char * argv[]) {
  5     @autoreleasepool {
  6 //        AddAperson *asdf =[[AddAperson alloc]init];
  7         //创建一个可变字典
  8         NSMutableDictionary *addressBook=[[NSMutableDictionary alloc] init];
  9         
 10         //创建一个可变数组
 11         NSMutableArray *add=[NSMutableArray array];
 12         [add retain];
 13         NSLog(@"%lu",add.retainCount);
 14         //实例化一个通讯录对象
 15         AddAperson *addPerson=[[AddAperson alloc] initWithArr:add withAddressBook:addressBook];
 16         //循环
 17         int count=0;
 18         while (1>0) {
 19             NSLog(@"***************通讯录控制台***************");
 20             NSLog(@"***添加联系人:1                       ***");
 21             NSLog(@"***按性别搜索:2                       ***");
 22             NSLog(@"***按号码搜索:3                       ***");
 23             NSLog(@"***按姓名排序:4                       ***");
 24             NSLog(@"***所有联系人:5                       ***");
 25             NSLog(@"***按组名查找并删除:6                  ***");
 26             NSLog(@"***按姓名查找并删除:7                  ***");
 27             NSLog(@"****************************************");
 28             NSLog(@"请输入n:");
 29             //根据控制台提示输入count的值
 30             scanf("%d",&count);
 31             getchar();
 32             switch (count)
 33             {
 34                 case 1:
 35                 {
 36                     NSLog(@"请输入联系人信息(每项间逗号隔开,空信息用单空格,格式为姓名,手机号,性别,住址,年龄):");
 37                     //新建一个字符串,去接收输入的数据
 38                     char str[100]={0};
 39                     scanf("%s",str);
 40                     getchar();
 41                     //将字符串转换成字符串对象
 42                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
 43                     //根据“,”将字符串对象分成需要的几个字符串对象存进数组
 44                     NSArray *array=[str1 componentsSeparatedByString:@","];
 45                     //实例化一个person对象
 46                     AddressContact *person=[[AddressContact alloc] initWithName:array[0] withPhoneName:array[1] withGender:array[2] withAddress:array[3] withAge:array[4]];
 47                     //调用判定、添加联系人的方法
 48                     [addPerson verifyAndAppend:person];
 49                 break;
 50                 }
 51                 case 2:
 52                 {
 53                     NSLog(@"请输入性别:");
 54                     //新建一个字符串,去接收输入的数据
 55                     char str[20]={0};
 56                     scanf("%s",str);
 57                     getchar();
 58                     //将字符串转换成字符串对象
 59                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
 60                     [addPerson searchWithGender:str1];
 61                     break;
 62                 }
 63                 case 3:
 64                 {
 65                     NSLog(@"请输入查询的手机号:");
 66                     //新建一个字符串,去接收输入的数据
 67                     char str[20]={0};
 68                     scanf("%s",str);
 69                     getchar();
 70                     //将字符串转换成字符串对象
 71                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
 72                     //调用据号码查找
 73                     [addPerson searchWithPhoneName:str1];
 74                     break;
 75                 }
 76                 case 4:
 77                 {   NSLog(@"请输入组名:");
 78                     //新建一个字符串,去接收输入的数据
 79                     char str[20]={0};
 80                     scanf("%s",str);
 81                     getchar();
 82                     //将字符串转换成字符串对象
 83                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
 84                     NSLog(@"%@分组中按姓名排序中......",str1);
 85                     //调用排序方法
 86                     [addPerson sortWithGroupName:str1];
 87                     break;
 88                 }
 89                 case 5:{
 90                     [addPerson printAllPerson];
 91                 }
 92                     //按组名查找并删除
 93                 case 6:{
 94                     char str[20]={0};
 95                     NSLog(@"请输入组名:");
 96                     scanf("%s",str);
 97                     getchar();
 98                     //将字符串转换成字符串对象
 99                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
100                     [addPerson deleteWithGroupName:str1];
101 
102                     break;
103                 }
104                //按姓名查找并删除
105                 case 7:{
106                     char str[20]={0};
107                     NSLog(@"请输入姓名:");
108                     scanf("%s",str);
109                     getchar();
110                     //将字符串转换成字符串对象
111                     NSString *str1=[[NSString alloc] initWithFormat:@"%s",str];
112                     [addPerson deleteWithName:str1];
113                     break;
114                 }
115             
116                 default:{
117                     NSLog(@"输入错误!!!");
118                     break;
119                 }
120                 break;
121             }
122         }
123     }
124     return 0;
125 }
main.m

 这里的代码中,控制台输入的是字符串,先接收,然后把它改为对象类型,再拆分。通过这个模式将我们输入的字符串使用起来。这也就是我为什么要把联系人类的实例变量都设置成NSString的原因。

最后,希望各路大神,看看这个代码怎么检查内存泄露,我用commond + shift + b试了好多次了,而且水管我不太会用。。。

posted @ 2015-08-26 17:45  沒了漃謨,誰婄莪  阅读(218)  评论(0编辑  收藏  举报