//实现中级通讯录.
/作业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小时内删除。
留言与评论(共有 0 条评论) |