标签:
用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家:
通讯录管理系统
* 需求:
1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
2、定义AddressBook类,定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。
4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人,并且按照年龄的降序排列。
7、根据姓名删除某个联系人。
8、删除某个分组的全部联系人。
Contact.h文件
#import <Foundation/Foundation.h> @interface Contact : NSObject @property (nonatomic, retain) NSString *name; @property (nonatomic, retain) NSString *gender; @property (nonatomic, retain) NSString * phoneNum; @property (nonatomic, retain) NSString *address; @property (nonatomic, retain) NSString *groupName; @property (nonatomic, assign) NSInteger age; // 初始化方法 - (instancetype)initWithName:(NSString *)name gender:(NSString *)gender phoneNum:(NSString *)phoneNum age:(NSInteger)age; // 构造器 +(instancetype)contactWithName:(NSString *)name gender:(NSString *)gender phoneNum:(NSString *)phoneNum age:(NSInteger)age; // 显示联系人信息 - (void)showInformation; @end
Contact.m文件
#import "Contact.h" @implementation Contact // 初始化方法 - (instancetype)initWithName:(NSString *)name gender:(NSString *)gender phoneNum:(NSString *)phoneNum age:(NSInteger)age { self = [super init]; if (self) { _name = name; _gender = gender; _phoneNum = phoneNum; _age = age; } return self; } // 构造器 +(instancetype)contactWithName:(NSString *)name gender:(NSString *)gender phoneNum:(NSString *)phoneNum age:(NSInteger)age { return [[Contact alloc] initWithName:name gender:gender phoneNum:phoneNum age:age]; } // 显示联系人信息 - (void)showInformation { NSLog(@"name = %@, gender = %@, phoneNum = %@, age = %ld", _name, _gender, _phoneNum, _age); } - (NSString *)description { return [NSString stringWithFormat:@"name = %@, gender = %@, phoneNum = %@, age = %ld", _name, _gender, _phoneNum, _age]; } @end
AddressBook.h文件
#import <Foundation/Foundation.h> @class Contact; @interface AddressBook : NSObject @property (nonatomic, retain)NSMutableDictionary *addressBook; // 添加联系人对象 - (void)addContact:(Contact *)contact; // 获取某个分组名称下所有联系人,并且按照姓名升序排列 - (void)groupContactsByNameSortDes:(NSString *)groupName; // 从通讯录中根据电话号码搜索联系人 - (void)findContactByPhoneNum:(NSString *)phoneNum; // 获取所有女性的联系人,并且按照年龄的降序排列 - (void)womanContactsByAgeSortAsc:(NSString *)gender; // 根据姓名删除某个联系人。 - (void)deleteContactByName:(NSString *)name; // 删除某个分组全部联系人 - (void)deleteAllContactByGroup:(NSString *)groupName; // 打印联系人 - (void)printContacts; @end
AddressBook.m文件
#import "AddressBook.h" #import "Contact.h" @implementation AddressBook // 初始化 - (instancetype)init { self = [super init]; if (self) { _addressBook = [[NSMutableDictionary alloc] init]; for (int i = 65; i < 91; i++) { char c = i; // 为字典添加键值对 NSString *strKey = [NSString stringWithFormat:@"%c", c]; [_addressBook setObject:[NSMutableArray array] forKey:strKey]; } } return self; } // 添加联系人对象 - (void)addContact:(Contact *)contact { // 如果姓名或电话号码为空,添加失败 if ([contact.name isEqualToString:@""] || [contact.phoneNum isEqualToString:@""]) { NSLog(@"添加失败"); return; } // 添加联系人到匹配的分组,以联系人姓名首字母当做分组方式。 contact.groupName = [[contact.name capitalizedString] substringToIndex:1]; // 联系人分组即为键值,通过键值得到字典的值传入数组 NSMutableArray *arrContact = [_addressBook objectForKey:contact.groupName]; // 将联系人信息传入数组 [arrContact addObject:contact]; NSLog(@"添加成功!"); } // 获取某个分组名称下所有联系人,并且按照姓名升序排列 - (void)groupContactsByNameSortDes:(NSString *)groupName { NSMutableArray *arrGroup = [_addressBook objectForKey:groupName]; NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; [arrGroup sortedArrayUsingDescriptors:@[sortByName]]; NSLog(@"姓名升序排序成功!"); NSLog(@"%@", arrGroup); } // 从通讯录中根据电话号码搜索联系人 - (void)findContactByPhoneNum:(NSString *)phoneNum { for (NSArray *key in _addressBook) { NSMutableArray *findArray = _addressBook[key]; for (Contact *targetContact in findArray) { if ([targetContact.phoneNum isEqualToString:phoneNum]) { NSLog(@"搜索成功!"); NSLog(@"%@", targetContact); } } } } // 获取所有女性的联系人,并且按照年龄的降序排列 - (void)womanContactsByAgeSortAsc:(NSString *)gender { NSMutableArray *arrGender = [NSMutableArray array]; for (NSArray *woman in _addressBook) { NSMutableArray *womanArray = _addressBook[woman]; for (Contact *womanContact in womanArray) { if ([womanContact.gender isEqualToString:gender]) { [arrGender addObject:womanContact]; } } } NSSortDescriptor *sortByAge = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO]; [arrGender sortedArrayUsingDescriptors:@[sortByAge]]; NSLog(@"年龄的降序排序成功"); NSLog(@"%@", arrGender); } // 根据姓名删除某个联系人。 - (void)deleteContactByName:(NSString *)name { for (NSArray *delete in _addressBook) { NSMutableArray *arrayDelete = _addressBook[delete]; for (Contact *deleteContact in arrayDelete) { if ([deleteContact.name isEqualToString:name]) { [arrayDelete removeObject:deleteContact]; } } } NSLog(@"移除成功"); } // 删除某个分组全部联系人 - (void)deleteAllContactByGroup:(NSString *)groupName { NSLog(@"删除成功!"); [_addressBook setObject:[NSMutableArray array] forKey:groupName]; } // 打印联系人 - (void)printContacts { NSLog(@"%@", _addressBook); } @end
main.m文件
#import <Foundation/Foundation.h> #import "Contact.h" #import "AddressBook.h" int main(int argc, const char * argv[]) { @autoreleasepool { // 创建联系人对象 Contact *c1 = [Contact contactWithName:@"zhangsan" gender:@"man" phoneNum:@"18888888888" age:18]; Contact *c2 = [Contact contactWithName:@"lisi" gender:@"woman" phoneNum:@"18821321318" age:33]; Contact *c3 = [Contact contactWithName:@"wangwu" gender:@"man" phoneNum:@"18883435888" age:43]; Contact *c4 = [Contact contactWithName:@"zhangsi" gender:@"woman" phoneNum:@"18888657588" age:13]; Contact *c5 = [Contact contactWithName:@"zhangwu" gender:@"man" phoneNum:@"18881232188" age:66]; Contact *c6 = [Contact contactWithName:@"" gender:@"" phoneNum:@"" age:0]; // 创建字典对象 AddressBook *addressBook = [[AddressBook alloc] init]; // 添加联系人 [addressBook addContact:c1]; [addressBook addContact:c2]; [addressBook addContact:c3]; [addressBook addContact:c4]; [addressBook addContact:c5]; [addressBook addContact:c6]; // 打印所有联系人 [addressBook printContacts]; // 获取某个分组名称下所有联系人,并且按照姓名升序排列 [addressBook groupContactsByNameSortDes:@"Z"]; // 从通讯录中根据电话号码搜索联系人 [addressBook findContactByPhoneNum:@"18881232188"]; //获取所有女性的联系人,并且按照年龄的降序排列 [addressBook womanContactsByAgeSortAsc:@"woman"]; //根据姓名删除某个联系人 [addressBook deleteContactByName:@"zhangwu"]; // 打印所有联系人 [addressBook printContacts]; // 删除某个分组的全部联系人 [addressBook deleteAllContactByGroup:@"Z"]; // 打印所有联系人 [addressBook printContacts]; } return 0; }
标签:
原文地址:http://www.cnblogs.com/soley/p/5322945.html