一道例题的详解

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

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 }

 

你可能感兴趣的:(详解)