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

/*
 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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值