您的位置:首页 > 其它

OC习题 通讯录 (知识点: 字典 封装 字符串 数组 枚举)

2015-08-05 10:30 417 查看
/*

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: