1、定义联系⼈人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、 住址、分组名称、年龄。方法:自定义初始化⽅方法(姓名、电话号码)、显示联系⼈人信息
2、在main.m中定义字典,分组管理所有联系⼈人。分组名为26个⼤大写的英⽂文字⺟母。
3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系⼈人到匹配的分 组。
4、获取某个分组名称下所有联系⼈人,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人。
7、根据姓名删除某个联系人。
*/
main.m
int main(int argc, const char * argv[]) {
@autoreleasepool {
Contact *Yang = [[Contact alloc]initWithName:@"yangyang" tel:@158 age:16 sex:@"m"];
Contact *Na = [[Contact alloc]initWithName:@"nana" tel:@139 age:16 sex:@"w"];
Contact *Li = [[Contact alloc]initWithName:@"LiYang" tel:@145 age:23 sex:@"m"];
Contact *Han = [[Contact alloc]initWithName:@"HanLiang" tel:@128 age:12 sex:@"w"];
Contact *Zhao = [[Contact alloc]initWithName:@"ZhaoMing" tel:@178 age:24 sex:@"m"];
Contact *Sun = [[Contact alloc]initWithName:@"SunYang" tel:@189 age:19 sex:@"m"];
Contact *YangLi = [[Contact alloc]initWithName:@"YangLi" tel:@197 age:17 sex:@"w"];
Contact *HanHong = [[Contact alloc]initWithName:@"HanHong" tel:@146 age:34 sex:@"w"];
Contact *LiHua = [[Contact alloc]initWithName:@"LiHua" tel:@176 age:28 sex:@"m"];
//创建通讯录对象
ContactBook *contactbook = [[ContactBook alloc]init];
//然后往通讯录添加联系人
[contactbook addPerson:Yang];
[contactbook addPerson:YangLi];
[contactbook addPerson:Na];
[contactbook addPerson:Li];
[contactbook addPerson:Zhao];
[contactbook addPerson:Sun];
[contactbook addPerson:HanHong];
[contactbook addPerson:Han];
[contactbook addPerson:LiHua];
//查找
NSLog(@"1 查找某个分组下的所有联系人(Y)");
[contactbook FindGroupName:@"Y"];
//通过Tel查找
NSLog(@"2 通过tel查找联系人(158)");
Contact *contact = [contactbook FindPersonByTel:@158];
NSLog(@"%@",contact);
//获取所有的女性联系人
NSLog(@"All female");
NSArray *female = [contactbook AllFemale];
//将已经排好序的女性联系人枚举遍历输出
for (Contact *contact in female) {
NSLog(@"name: %@ age: %ld",contact.name,contact.age);
}
NSLog(@"删除某个联系人(HanHong)");
[contactbook deleteByName:@"HanHong"];
NSLog(@"删除对应分组(L)");
[contactbook deleteGroup:@"L"];
}
return 0;
}
Contact.m
#import "Contact.h"
@implementation Contact
//初始化
-(id)initWithName:(NSString *)name
tel:(NSNumber *)tel
age:(NSInteger )age
sex:(NSString *)sex
{
if (self = [super init]) {
_name = name ;
_age = age ;
_tel = tel;
_sex = sex;
NSString *FirstName = [[name substringToIndex:1]uppercaseString];
_Group = FirstName;
}
return self;
}
//显示所有人信息
-(void)ShowAllPerson
{
NSLog(@"name:%@ age:%ld tel:%@ sex:%@",_name,_age,_tel,_sex);
}
//重写description方法
-(NSString *)description
{
return [NSString stringWithFormat:@"name: %@ age: %ld tel: %@ sex: %@",_name,_age,_tel,_sex];
}
//通过姓名进行升序排序
-(NSComparisonResult)CompareByName:(Contact *)anotherContact
{
return [self.name compare:anotherContact.name];
}
//通过年龄进行降序排序
-(NSComparisonResult)CompareByAge:(Contact *)anotherContact
{
if (self.age > anotherContact.age) {
return NSOrderedAscending;
}else if(self.age < anotherContact.age)
{
return NSOrderedDescending;
}
return NSOrderedSame;
}
@end
"ContactBook.m"
#import "ContactBook.h"
#import "Contact.h"
@implementation ContactBook
//初始化
-(id)init
{
if (self = [super init]) {
//当通讯录创建的时候就需一个容器
_ContDic = [[NSMutableDictionary alloc]init];
}
return self;
}
//添加联系人
-(void)addPerson:(Contact *)contact
{
if (contact.name == nil || contact.tel == nil) {
NSLog(@"add person error");
}else
{
//添加
//先获取对应的分组
NSMutableArray *group = [_ContDic valueForKey:contact.Group];
if (group == nil) {
//如果分组名是空的 那就新创建一个分组
group = [NSMutableArray array];
//然后 将创建的分组添加到通讯录字典
[_ContDic setValue:group forKey:contact.Group];
}
//若分组名不是空的 则将其添加到对应的分组
[group addObject:contact];
}
}
//查找 给定的分组联系人
-(void)FindGroupName:(NSString *)Group
{
NSMutableArray *group = [_ContDic valueForKey:Group];
//通过 姓名 升序
[group sortUsingSelector:@selector(CompareByName:)];
//枚举输出
for (Contact *contact in group) {
[contact ShowAllPerson];
}
}
//搜索
-(Contact *)FindPersonByTel:(NSNumber *)tel
{
//遍历通讯录字典
for (NSString *groupName in _ContDic) {
//通过分组名 获取对应的分组
NSMutableArray *group = [_ContDic valueForKey:groupName];
//遍历分组 获取联系人
for (Contact *contact in group) {
if ([contact.tel isEqualToNumber:tel]) {
return contact;
}
}
}
NSLog(@"Find error! No people");
return nil;
}
//获取所有女性联系人
-(NSArray *)AllFemale
{
NSMutableArray *female = [[NSMutableArray alloc]init];
for (NSString *groupname in _ContDic) {
NSMutableArray *group = [_ContDic valueForKey:groupname];
for (Contact *contact in group) {
//通过性别进行筛选
if ([contact.sex isEqualToString:@"m"]) {
//将符合条件的联系人 放入数组
[female addObject:contact];
}
}
}
//按照年龄进行排序
[female sortUsingSelector:@selector(CompareByAge:)];
return female;
}
-(void)deleteByName:(NSString *)name
{
//遍历通讯录字典
for (NSString *groupName in _ContDic) {
//通过分组名 获取对应的分组
NSMutableArray *group = [_ContDic valueForKey:groupName];
//遍历分组 获取联系人
for (int i=0; i<group.count; i++) {
if ([[group[i] name] isEqualToString:name]) {
[group removeObject:group[i]];
NSLog(@"delete %@ success",name);
NSLog(@"%@",_ContDic);
}
}
}
}
-(BOOL)deleteGroup:(NSString *)Group
{
[_ContDic removeObjectForKey:Group];
NSLog(@"剩下的联系人:%@",_ContDic);
return YES;
}
@end