OC之实现中级通讯录

阅读: 评论:0

OC之实现中级通讯录

OC之实现中级通讯录

//实现中级通讯录.

/作业1: 实现通讯录.需求:
        //1.定义联系人类Contact. 实例变量:姓名(拼音 首字母大写), 性别, 电话号码, 住址, 分组名称, 年龄. 方法: 自定义初始化方法(姓名 ,电话号码), 显示联系人信息.
        //2./2.在main.m中定义字典, 分组管理所有联系人. 分组名为26个大写的英文字母.
        //3.可以添加联系人对象, 如果姓名或电话号码为空, 添加失败.添加联系人到匹配的分组.
        //4.获取某个分组名称下所有联系人, 并且按照年龄的升序排列.
        //5.从通讯录中根据电话号码搜索联系人.
        //6. 获取所有女性的联系人, 并且按照年龄的降序排列.
        //7. 根据姓名删除某个联系人
        //8.删除某个分组的全部联系人

//  Contact.h
#import <Foundation/Foundation.h>
//1.定义联系人类Contact. 实例变量:姓名(拼音 首字母大写), 性别, 电话号码, 住址, 分组名称, 年龄. 方法: 自定义初始化方法(姓名 ,电话号码), 显示联系人信息.
@interface Contact : NSObject
{NSString *_name;NSString *_gender;NSString *_number;NSString *_place;NSString *_group;NSInteger _age;}
//setter姓名
-(void)setName:(NSString *)name;
//getter
- (NSString *)name;
//setter性别
- (void)setGender:(NSString *)gender;
//getter
- (NSString *)gender;
//setter电话号码
- (void)setNumber:(NSString *)number;
//getter
- (NSString *)number;
//setter住址
- (void)setPlace:(NSString *)place;
//getter
- (NSString *)place;
//setter分组
- (void)setGroup:(NSString *)group;
//getter
- (NSString *)group;
//setter年龄
- (void)setAge:(NSInteger)age;
//getter
- (NSInteger)age;//初始化
- (id)initWithName:(NSString *)name  number:(NSString *)number;
//便利构造
+ (id)ContactWithName:(NSString *)name  number:(NSString *)number;
- (void)displayContactInfo;
//告诉外界,该方法子类已经重写了.
- (NSString *)description;
//两个联系人对象比较的方法
//按姓名
- (NSComparisonResult)compareByName:(Contact *)addContact;
//按年龄
- (NSComparisonResult)compareByAge:(Contact *)addContact;
//按联系方式
- (NSComparisonResult)compareByPhoneNumber:(Contact *)addContact;
@end
//
//  Contact.m
#import "Contact.h"@implementation Contact
//setter姓名
-(void)setName:(NSString *)name{_name = name;}
//getter
- (NSString *)name{return _name;}
//setter性别
- (void)setGender:(NSString *)gender{_gender = gender;}
//getter
- (NSString *)gender{return _gender;}
//setter电话号码
- (void)setNumber:(NSString *)number{_number = number;}
//getter
- (NSString *)number{return _number;}
//setter住址
- (void)setPlace:(NSString *)place{_place = place;}
//getter
- (NSString *)place{return _place;}
//setter分组
- (void)setGroup:(NSString *)group{_group = group;}
//getter
- (NSString *)group{return _group;}
//setter年龄
- (void)setAge:(NSInteger)age{_age = age;}
//getter
- (NSInteger)age{return _age;}- (id)initWithName:(NSString *)name  number:(NSString *)number {self = [super init];if (self) {_name = name;_number = number;}return self;
}
//便利构造
+ (id)ContactWithName:(NSString *)name  number:(NSString *)number {Contact *c = [[Contact alloc] initWithName:name  number:number];return c;
}
- (void)displayContactInfo
{NSLog(@"name:%@,gender:%@,number:%@,age:%ld", _name, _gender, _number, _age);
}//重写从父类继承过来的description方法
//当通过%@打印一个当前对象时,就会调用该方法.
- (NSString *)description
{//    return [NSString stringWithFormat:@"<%@: %p>", [self class], self];return [NSString stringWithFormat:@"name:%@,gender:%@,number:%@,age:%ld", _name, _gender, _number, _age];
}//两个联系人对象比较的方法
//按姓名
- (NSComparisonResult)compareByName:(Contact *)addContact
{return [[self name] compare:[addContact name]];
}
//按年龄
- (NSComparisonResult)compareByAge:(Contact *)addContact
{//1.获取年龄NSInteger age1 = [self age];NSInteger age2 = [addContact age];//2.比较年龄//    if (age1 > age2) {//        return NSOrderedDescending;//    } else if (age1 == age2) {//        return NSOrderedSame;//    } else {//        return NSOrderedAscending;//    }return -[@(age1) compare:@(age2)];
}
//按联系方式
- (NSComparisonResult)compareByPhoneNumber:(Contact *)addContact
{return -[[self number] compare:[addContact number]];
}
@end
//
//  Contact.m
#import "Contact.h"@implementation Contact
//setter姓名
-(void)setName:(NSString *)name{_name = name;}
//getter
- (NSString *)name{return _name;}
//setter性别
- (void)setGender:(NSString *)gender{_gender = gender;}
//getter
- (NSString *)gender{return _gender;}
//setter电话号码
- (void)setNumber:(NSString *)number{_number = number;}
//getter
- (NSString *)number{return _number;}
//setter住址
- (void)setPlace:(NSString *)place{_place = place;}
//getter
- (NSString *)place{return _place;}
//setter分组
- (void)setGroup:(NSString *)group{_group = group;}
//getter
- (NSString *)group{return _group;}
//setter年龄
- (void)setAge:(NSInteger)age{_age = age;}
//getter
- (NSInteger)age{return _age;}- (id)initWithName:(NSString *)name  number:(NSString *)number {self = [super init];if (self) {_name = name;_number = number;}return self;
}
//便利构造
+ (id)ContactWithName:(NSString *)name  number:(NSString *)number {Contact *c = [[Contact alloc] initWithName:name  number:number];return c;
}
- (void)displayContactInfo
{NSLog(@"name:%@,gender:%@,number:%@,age:%ld", _name, _gender, _number, _age);
}//重写从父类继承过来的description方法
//当通过%@打印一个当前对象时,就会调用该方法.
- (NSString *)description
{//    return [NSString stringWithFormat:@"<%@: %p>", [self class], self];return [NSString stringWithFormat:@"name:%@,gender:%@,number:%@,age:%ld", _name, _gender, _number, _age];
}//两个联系人对象比较的方法
//按姓名
- (NSComparisonResult)compareByName:(Contact *)addContact
{return [[self name] compare:[addContact name]];
}
//按年龄
- (NSComparisonResult)compareByAge:(Contact *)addContact
{//1.获取年龄NSInteger age1 = [self age];NSInteger age2 = [addContact age];//2.比较年龄//    if (age1 > age2) {//        return NSOrderedDescending;//    } else if (age1 == age2) {//        return NSOrderedSame;//    } else {//        return NSOrderedAscending;//    }return -[@(age1) compare:@(age2)];
}
//按联系方式
- (NSComparisonResult)compareByPhoneNumber:(Contact *)addContact
{return -[[self number] compare:[addContact number]];
}
@end
//
//  ContactBook.m
#import "ContactBook.h"
#import "Contact.h"@implementation ContactBook
//初始化
-(id)init{if (self) {//_alloContactDic = [NSMutableDictionary dictionaryWithCapacity:1];Contact *contact1 = [[Contact alloc] initWithName:@"Wangzhao" number:@"18203662931"];[contact1 setPlace:@"Xinyang"];[contact1 setGroup:@"family"];[contact1 setGender:@"man"];[contact1 setAge:24];Contact *contact2 = [[Contact alloc] initWithName:@"Gaoxingxing" number:@"15136423050"];[contact2 setPlace:@"handan"];[contact2 setGroup:@"family"];[contact2 setGender:@"women"];[contact2 setAge:23];Contact *contact3 = [[Contact alloc]  initWithName:@"Wyy" number:@"17036733150"];[contact3 setPlace:@"anqing"];[contact3 setGroup:@"student"];[contact3 setGender:@"man"];[contact3 setAge:22];Contact *contact4 = [[Contact alloc]  initWithName:@"Wangxiaolin" number:@"18203658955"];[contact4 setPlace:@"xinyang"];[contact4 setGroup:@"student"];[contact4 setGender:@"man"];[contact4 setAge:26];Contact *contact5 = [[Contact alloc] initWithName:@"Xuedongli" number:@"18203659413"];[contact5 setPlace:@"henan"];[contact5 setGroup:@"teacher"];[contact5 setGender:@"man"];[contact5 setAge:28];//创建分组, 分别管理改组内的联系人NSMutableArray *fGroupArr = [NSMutableArray arrayWithObjects:contact1,contact2, nil];NSMutableArray *sGroupArr = [NSMutableArray arrayWithObjects:contact3,contact4, nil];NSMutableArray *tGroupArr = [NSMutableArray arrayWithObject:contact5];//创建可变字典, 管理班级的所有分组, 每个分组管理组内的联系人_alloContactDic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:fGroupArr, @"F", sGroupArr, @"S", tGroupArr, @"T",  nil];}return self;
}
//获取所有分组
- (NSMutableDictionary *)allContactDic{return _alloContactDic;}
//添加联系人
- (BOOL)addContact:(Contact *)addContact{//1.判断姓名以及联系方式是否为空NSString *name = [addContact name];NSString *number = [addContact number];if (!name || ![name length] || !number || ![number length]) {return NO;} else {//添加到对应的分组中//(1)获取到姓名首字母NSString *firstCharac = [name substringToIndex:1];//(2)根据key 从字典中取出对应的分组NSMutableArray *groupArr = _alloContactDic[firstCharac];//(3)判断是否成功从字典中取到key对应的数组if (!groupArr) {//如果没有数组,就创建数组.groupArr = [NSMutableArray arrayWithCapacity:1];//将key以及value添加到字典中
            [_alloContactDic setObject:groupArr forKey:firstCharac];}[groupArr addObject:addContact];return YES;}
}//获得指定分组下所有联系人, 按照联系人姓名升序排列
- (NSMutableArray *)allContactWithNameAscendingByGroup:(NSString *)group{//key对应的数组就存储着该组下所有的联系人.NSMutableArray *fGroup = _alloContactDic[group];//按照联系人姓名升序排列
    [fGroup sortedArrayUsingSelector:@selector(compareByName:)];return fGroup;}
//获取所有女性联系人, 并且按照年龄的降序排列
- (NSMutableArray *)allGrilcontactsAgeDescending{//获取所有联系人, 并且按照年龄的降序排列NSMutableArray *girlArr = [[NSMutableArray alloc] initWithCapacity:1];for (NSString *key in _alloContactDic) {NSMutableArray *groupArr = _alloContactDic[key];for (Contact *contact in groupArr) {if ([[contact gender] isEqualToString:@"girl"]) {//查找到女性联系人之后,将联系人添加到女性数组中.
                [girlArr addObject:contact];}}}[girlArr sortUsingSelector:@selector(compareByAge:)];return girlArr;
}
//按照年龄降序排//从通讯录中根据电话号码搜索联系人
- (Contact *)getContactByNumber:(NSString *)number{//1.先获取联系人所在的数组for (NSString *key in _alloContactDic) {//根据key获取对应的数组.NSMutableArray *groupArr = _alloContactDic[key];//遍历到数组中的联系人for (Contact *contact in groupArr) {if ([[contact number] isEqualToString:number]) {return contact;}}}return nil;
}//根据姓名删除某个联系人
- (void)removeContactByName:(NSString *)name{//(1)获取所在分组名称NSString *groupName = [name substringToIndex:1];//(2)获取key -- 数组NSMutableArray *group = _alloContactDic[groupName];for (int i = 0; i < [group count]; i++) {Contact *contact = group[i];if ([[contact name] isEqualToString:@"ChangChaoQun"]) {//如果和指定名字相同,则从数组中移除对应的元素.
                [group removeObjectAtIndex:i];break;}}}//删除某个分组的全部联系人
- (void)removeAllContactsByGroup:(NSString *)group{[_alloContactDic removeObjectForKey:group];}
//输出所有联系人
- (void)displayAllAddContactInfo{NSLog(@"allContactInfo = %@", _alloContactDic);
}@end
//
//  main.m
#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactBook.h"int main(int argc, const char * argv[]) {@autoreleasepool {//2.在main.m中定义字典, 分组管理所有联系人. 分组名为26个大写的英文字母.//创建通讯录对象ContactBook *lanou12 = [[ContactBook alloc] init];//添加联系人Contact *frank = [[Contact alloc] initWithName:@"Wangluodan" number:@"18839732932"];BOOL isSuccess = [lanou12 addContact:frank];NSLog(@"%d", isSuccess);[lanou12 displayAllAddContactInfo];//获得指定分组下得所有联系人,按照联系人姓名升序排序.NSMutableArray *fGroupArr = [lanou12 allContactWithNameAscendingByGroup:@"W"];NSLog(@"%@", fGroupArr);//获取所有女性的联系人,并且按照年龄的降序排列。NSMutableArray *girlArr = [lanou12 allGrilcontactsAgeDescending];NSLog(@"%@", girlArr);//从通讯录中根据电话号码搜索联系人。Contact *contact = [lanou12 getContactByNumber:@"13838389438"];NSLog(@"contact = %@", contact);//删除姓名为Wangzhao的联系人[lanou12 removeContactByName:@"Wangzhao"];[lanou12 displayAllAddContactInfo];//删除f分组下得所有联系人[lanou12 removeAllContactsByGroup:@"F"];[lanou12 displayAllAddContactInfo];}return 0;
}

 


        

转载于:.html

本文发布于:2024-02-05 05:55:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170725669463615.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:通讯录   OC
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23