一道例题的详解

实现中等难度通讯录。需求:

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

2、在main.m中定义字典,分组管理所有联系人。分组名为26个⼤写的英文字母。
3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。

4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人,并且按照年龄的降序排列。

7、根据姓名删除某个联系人。

8、删除某个分组的全部联系人。

Contact.h中代码

 1 #import <Foundation/Foundation.h>
 2 
 3 //这是一个联系人类,用于存储单个联系人的信息
 4 //并且能够提供联系人相关内容
 5 //这个类是一个Model类
 6 
 7 @interface Contact : NSObject
 8 {
 9     NSString *_name;    //姓名
10     NSString *_sex;     //性别
11     NSString *_phone;   //电话
12     NSString *_address; //地址
13     NSString *_groupName;   //组名
14     NSInteger _age;     //年龄
15 }
16 //初始化方法,初始化的时候需要给定一个姓名和电话
17 - (instancetype)initWithName:(NSString *)name phone:(NSString *)phone;
18 
19 - (instancetype)initWithName:(NSString *)name phone:(NSString *)phone sex:(NSString *)sex age:(NSInteger)age;
20 
21 //显示联系人信息
22 - (void)displayInfo;
23 
24 //获取联系人姓名
25 - (NSString *)name;
26 
27 //获取联系人电话
28 - (NSString *)phone;
29 
30 //获取联系人分组信息
31 - (NSString *)groupName;
32 
33 //获取联系人性别
34 - (NSString *)sex;
35 
36 - (NSInteger)age;
37 
38 //联系人按姓名比较
39 - (NSComparisonResult)compareByName:(Contact *)contact;
40 
41 //联系人按年龄比较
42 - (NSComparisonResult)compareByAge:(Contact *)contact;
43 
44 @end

Contact.m中代码

 1 #import "Contact.h"
 2 
 3 @implementation Contact
 4 
 5 - (instancetype)initWithName:(NSString *)name phone:(NSString *)phone
 6 {
 7     return [self initWithName:name phone:phone sex:nil age:0];
 8 }
 9 //指定初始化方法
10 - (instancetype)initWithName:(NSString *)name phone:(NSString *)phone sex:(NSString *)sex age:(NSInteger)age
11 {
12     self = [super init];
13     if (self) {
14         _name = name;
15         _sex = sex;
16         _groupName = [_name substringToIndex:1];
17         _age = age;
18         _phone = phone;
19     }
20     return self;
21 }
22 
23 - (void)displayInfo
24 {
25     NSLog(@"name:%@ sex:%@ phone:%@ address:%@ group:%@ age:%ld",_name,_sex,_phone,_address,_groupName,_age);
26 }
27 
28 
29 - (NSString *)name
30 {
31     return _name;
32 }
33 
34 - (NSString *)sex
35 {
36     return _sex;
37 }
38 
39 - (NSString *)phone
40 {
41     return _phone;
42 }
43 
44 
45 - (NSString *)groupName
46 {
47     return _groupName;
48 }
49 
50 - (NSComparisonResult)compareByName:(Contact *)contact
51 {
52     NSString *myName = [self name];
53     NSString *otherName = [contact name];
54     NSComparisonResult result = [myName compare:otherName];
55     if (result == NSOrderedAscending) {
56         return NSOrderedDescending;
57     }else if (result == NSOrderedDescending){
58         return NSOrderedAscending;
59     }else {
60         return NSOrderedSame;
61     }
62 //    return result;
63 }
64 
65 - (NSInteger)age
66 {
67     return _age;
68 }
69 
70 - (NSComparisonResult)compareByAge:(Contact *)contact
71 {
72     NSInteger myAge = [self age];
73     NSInteger otherAge  = [contact age];
74     if (myAge > otherAge) {
75         return NSOrderedAscending;
76     }else if (myAge < otherAge){
77         return NSOrderedDescending;
78     }else {
79         return NSOrderedSame;
80     }
81 }
82 
83 @end

ContactManager.h中代码

 1 #import <Foundation/Foundation.h>
 2 #import "Contact.h"
 3 
 4 //这个类是一个联系人管理类,主要用于添加,删除,获取,搜索联系人等
 5 
 6 @interface ContactsManager : NSObject
 7 {
 8     //用于存储所有联系人的字典
 9     NSMutableDictionary *_contactsDic;
10 }
11 - (instancetype)init;
12 
13 //添加联系人
14 - (void)addContact:(Contact *)contact;
15 
16 //根据groupName获取一组联系人
17 - (NSArray *)contactsForGroupName:(NSString *)groupName;
18 
19 //根据电话号码,获取联系人
20 - (Contact *)contactForPhone:(NSString *)phone;
21 
22 //根据性别,获取联系人
23 - (NSArray *)contactsForSex:(NSString *)sex;
24 
25 //删除指定姓名的联系人
26 - (void)removeContactForName:(NSString *)name;
27 
28 //删除指定分组的所有联系人
29 - (void)removeContactsForGroup:(NSString *)groupName;
30 
31 //显示所有人的信息
32 - (void)displayAllContacts;
33 
34 @end

ContactsManager.m中代码

  1 #import "ContactsManager.h"
  2 
  3 @implementation ContactsManager
  4 
  5 -(instancetype)init{
  6     self = [super init];
  7     if (self) {
  8         _contactsDic = [[NSMutableDictionary alloc] initWithCapacity:26];
  9     }
 10     return self;
 11 }
 12 
 13 - (void)addContact:(Contact *)contact
 14 {
 15     NSString *name = [contact name];
 16     NSString *phone = [contact phone];
 17     if ([name isEqualToString:@""] || name == nil || [phone isEqualToString:@""] || phone == nil) {
 18         return;
 19     }
 20     
 21     NSString *groupName = [contact groupName];
 22     NSMutableArray *group = [_contactsDic objectForKey:groupName];
 23     if (group == nil) {
 24         NSLog(@"分组不存在");
 25         //创建一个数组,把人放数组里,把数组放字典里
 26         group = [[NSMutableArray alloc] initWithCapacity:10];
 27         [group addObject:contact];
 28         [_contactsDic setObject:group forKey:groupName];
 29     }else {
 30         [group addObject:contact];
 31     }
 32 }
 33 
 34 - (NSArray *)contactsForGroupName:(NSString *)groupName
 35 {
 36     NSMutableArray *group = [_contactsDic objectForKey:groupName];
 37     [group sortUsingSelector:@selector(compareByName:)];
 38     return group;
 39 }
 40 
 41 - (NSArray *)contactsForSex:(NSString *)sex
 42 {
 43     NSMutableArray *results = [[NSMutableArray alloc] initWithCapacity:10];
 44     
 45     for (NSString *key in _contactsDic) {
 46         NSMutableArray *group = [_contactsDic objectForKey:key];
 47         for (Contact *c in group) {
 48             NSString *s = [c sex];
 49             if ([s isEqualToString:sex]) {
 50                 [results addObject:c];
 51             }
 52         }
 53     }
 54     
 55     [results sortUsingSelector:@selector(compareByAge:)];
 56     
 57     return results;
 58 }
 59 
 60 - (Contact *)contactForPhone:(NSString *)phone
 61 {
 62     for (NSString *key in _contactsDic) {
 63         NSMutableArray *group = [_contactsDic objectForKey:key];
 64         for (Contact *c in group) {
 65             NSString *p = [c phone];
 66             if ([p isEqualToString:phone]) {
 67                 return c;
 68             }
 69         }
 70     }
 71     return nil;
 72 }
 73 
 74 - (void)removeContactForName:(NSString *)name
 75 {
 76     NSMutableArray *arr = nil;
 77     Contact *toDelete = nil;
 78     for (NSString *key in _contactsDic) {
 79         NSMutableArray *group = [_contactsDic objectForKey:key];
 80         for (Contact *c in group) {
 81             NSString *n = [c name];
 82             if ([n isEqualToString:name]) {
 83                 arr = group;
 84                 toDelete = c;
 85             }
 86         }
 87     }
 88     [arr removeObject:toDelete];
 89 }
 90 - (void)removeContactsForGroup:(NSString *)groupName
 91 {
 92     [_contactsDic removeObjectForKey:groupName];
 93 }
 94 
 95 - (void)displayAllContacts
 96 {
 97     NSArray *allKeys = [_contactsDic allKeys];
 98     NSArray *sortedKeys = [allKeys sortedArrayUsingSelector:@selector(compare:)];
 99     for (NSString *key in sortedKeys) {
100         NSMutableArray *group = [_contactsDic objectForKey:key];
101         NSLog(@"---%@---",key);
102         for (Contact *c in group) {
103             [c displayInfo];
104         }
105     }
106     
107     
108 //    for (NSString *key in _contactsDic) {
109 //        NSMutableArray *group = [_contactsDic objectForKey:key];
110 //        NSLog(@"---%@---",key);
111 //        for (Contact *c in group) {
112 //            [c displayInfo];
113 //        }
114 //    }
115 }
116 
117 @end

main.m中代码

 1 #import <Foundation/Foundation.h>
 2 #import "ContactsManager.h"
 3 
 4 int main(int argc, const char * argv[])
 5 {
 6 //    NSString *allColorString = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/crayons.txt" encoding:NSUTF8StringEncoding error:nil];
 7 //    NSArray *colors = [allColorString componentsSeparatedByString:@"\n"];
 8 //    NSLog(@"%@",[[colors objectAtIndex:0] componentsSeparatedByString:@" #"]);
 9 
10     
11     //联系人管理器
12     ContactsManager *cm = [[ContactsManager alloc] init];
13     //联系人1
14     Contact *mohang = [[Contact alloc] initWithName:@"Mohan" phone:@"13925082699" sex:@"" age:22];
15     //联系人2
16     Contact *mochou = [[Contact alloc] initWithName:@"Mochou" phone:@"13854389438" sex:@"" age:20];
17     //联系人3
18     Contact *moyan = [[Contact alloc] initWithName:@"Moyan" phone:@"18100000000" sex:@"" age:46];
19 
20     //联系人4
21     Contact *yangbailao = [[Contact alloc] initWithName:@"Yangbailao" phone:@"13944774747" sex:@"" age:56];
22     //联系人5
23     Contact *yangxier = [[Contact alloc] initWithName:@"Yangxier" phone:@"13837373737" sex:@"" age:18];
24     //联系人6
25     Contact *panjinlian = [[Contact alloc] initWithName:@"Panjinlian" phone:@"18188888888" sex:@"" age:27];
26     
27     //联系人1
28     Contact *caocao = [[Contact alloc] initWithName:@"Caocao" phone:@"1811111111" sex:@"" age:47];
29     //联系人2
30     Contact *caozhi = [[Contact alloc] initWithName:@"Caozhi" phone:@"13274747474" sex:@"" age:16];
31     //联系人3
32     Contact *caopi = [[Contact alloc] initWithName:@"Caopi" phone:@"18699995555" sex:@"" age:34];
33     
34     [cm addContact:mohang];
35     [cm addContact:mochou];
36     [cm addContact:moyan];
37     [cm addContact:panjinlian];
38     [cm addContact:yangbailao];
39     [cm addContact:yangxier];
40     [cm addContact:caocao];
41     [cm addContact:caopi];
42     [cm addContact:caozhi];
43 
44 //    [cm displayAllContacts];
45     
46 //    [cm removeContactForName:@"Mohang"];
47 //    [cm removeContactForName:@"Moyan"];
48 //
49 ////    [[cm contactForPhone:@"18188888888"] displayInfo];
50 ////    NSLog(@"---");
51 ////    NSArray *mContacts = [cm contactsForSex:@"女"];
52 //    NSArray *mContacts = [cm contactsForGroupName:@"M"];
53 //
54 ////    NSLog(@"%@",mContacts);
55 //    for (Contact *c in mContacts) {
56 //        [c displayInfo];
57 //    }
58 ////    [cm removeContactForName:@"Haojianming"];
59     
60     return 0;
61 }

 

posted on 2014-06-30 19:08  狭义  阅读(1254)  评论(0编辑  收藏  举报

导航