中级通讯录

阅读: 评论:0

中级通讯录

中级通讯录

实现中等难度通讯录。需求:
1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息


2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。


3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。


4、获取某个分组名称下所有联系人,并且按照姓名升序排列。


5、从通讯录中根据电话号码搜索联系人。


6、获取所有女性的联系人,并且按照年龄的降序排列。


7、根据姓名删除某个联系人。


8、删除某个分组的全部联系人。

AddressContact.h

#import <Foundation/Foundation.h>@interface AddressContact : NSObject
{NSString *_name; //姓名NSString *_gender; //性别NSString *_phoneNumber; //电话号码NSInteger _age; //年龄
}
//setter and getter
//_name  setter and getter
- (void)setName:(NSString *)name;
- (NSString *)name;
//_gender  setter and getter
- (void)setGender:(NSString *)gender;
- (NSString *)gender;
//_phoneNumber  setter and getter
- (void)setPhoneNumber:(NSString *)phoneNumber;
- (NSString *)phoneNumber;
//_age  setter and getter
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
//init method
- (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(NSInteger)age;
- (void)displayContactInfo;
//告诉外界,该方法子类已经重写了.
- (NSString *)description;
//两个联系人对象比较的方法
//按姓名
- (NSComparisonResult)compareByName:(AddressContact *)addContact;
//按年龄
- (NSComparisonResult)compareByAge:(AddressContact *)addContact;
//按联系方式
- (NSComparisonResult)compareByPhoneNumber:(AddressContact *)addContact;
@end

#import "AddressContact.h"@implementation AddressContact //setter and getter //_name setter and getter - (void)setName:(NSString *)name {_name = name; } - (NSString *)name {return _name; } //_gender setter and getter - (void)setGender:(NSString *)gender {_gender = gender; } - (NSString *)gender {return _gender; } //_phoneNumber setter and getter - (void)setPhoneNumber:(NSString *)phoneNumber {_phoneNumber = phoneNumber; } - (NSString *)phoneNumber {return _phoneNumber; } //_age setter and getter - (void)setAge:(NSInteger)age {_age = age; } - (NSInteger)age {return _age; } //init method - (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(NSInteger)age {self = [super init];if (self) {_name = name;_gender = gender;_phoneNumber = phoneNumber;_age = age;}return self; } - (void)displayContactInfo {NSLog(@"name:%@,gender:%@,phoneNumber:%@,age:%ld", _name, _gender, _phoneNumber, _age); }//重写从父类继承过来的description方法 //当通过%@打印一个当前对象时,就会调用该方法. - (NSString *)description { // return [NSString stringWithFormat:@"<%@: %p>", [self class], self];return [NSString stringWithFormat:@"name:%@,gender:%@,phoneNumber:%@,age:%ld", _name, _gender, _phoneNumber, _age]; }//两个联系人对象比较的方法 //按姓名 - (NSComparisonResult)compareByName:(AddressContact *)addContact {return [[self name] compare:[addContact name]]; } //按年龄 - (NSComparisonResult)compareByAge:(AddressContact *)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:(AddressContact *)addContact {return -[[self phoneNumber] compare:[addContact phoneNumber]]; } @end
AddressBook.h
#import <Foundation/Foundation.h>
@class AddressContact;
@interface AddressBook : NSObject
{NSMutableDictionary *_allContactDic; //管理所有的分组
}
//获取所有的分组
- (NSMutableDictionary *)allContactDic;
//添加联系人
- (BOOL)addAddressContact:(AddressContact *)addContact;
//获得指定分组下得所有联系人,按照联系人姓名升序排序.
- (NSMutableArray *)allContactsWithNameAscendingByGroupName:(NSString *)groupName;
//获取所有女性的联系人,并且按照年龄的降序排列。
- (NSMutableArray *)allGrilContactsWithAgeDecending;
//从通讯录中根据电话号码搜索联系人。
- (AddressContact *)getAddressContactByPhoneNumber:(NSString *)phoneNumber;
//根据姓名删除某个联系人。
- (void)removeAddressContactByName:(NSString *)name;
//删除某个分组的全部联系人.
- (void)removeAllContactsByGroupName:(NSString *)groupName;
//输出所有学生的信息
- (void)displayAllAddressContactInfo;
@end

 

#import "AddressBook.h"
#import "AddressContact.h"
@implementation AddressBook
//重写父类继承过来的初始化方法,在初始化的同时,为_allContactDic完成初始化操作.
- (id)init
{self = [super init];if (self) {//通讯录AddressContact *chaoQun = [[AddressContact alloc] initWithName:@"ChangChaoQun" gender:@"girl" phoneNumber:@"13838389438" age:18];AddressContact *wangLi = [[AddressContact alloc] initWithName:@"WangLi" gender:@"man" phoneNumber:@"213213213" age:28];AddressContact *chunPing = [[AddressContact alloc] initWithName:@"WangChunPing" gender:@"girl" phoneNumber:@"2132" age:20];AddressContact *weiHai = [[AddressContact alloc] initWithName:@"WangWeiHai" gender:@"man" phoneNumber:@"111111" age:19];AddressContact *yanYan = [[AddressContact alloc] initWithName:@"WangYanYan" gender:@"girl" phoneNumber:@"0000000" age:28];AddressContact *mingXing = [[AddressContact alloc] initWithName:@"TanMingXing" gender:@"girl" phoneNumber:@"250250250" age:20];AddressContact *qingCheng = [[AddressContact alloc] initWithName:@"ZhouQingCheng" gender:@"man" phoneNumber:@"110119120" age:18];//创建分组,分别管理该组内的联系人NSMutableArray *cGroupArr = [NSMutableArray arrayWithObject:chaoQun];NSMutableArray *wGroupArr = [NSMutableArray arrayWithObjects:wangLi, chunPing, weiHai, yanYan, nil];NSMutableArray *tGroupArr = [NSMutableArray arrayWithObject:mingXing];NSMutableArray *zGroupArr = [NSMutableArray arrayWithObject:qingCheng];//创建可变字典,管理班级的所有分组,每个分组管理该组内的联系人_allContactDic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:cGroupArr, @"C", wGroupArr, @"W", tGroupArr, @"T", zGroupArr, @"Z", nil];}return self;
}
- (NSMutableDictionary *)allContactDic
{return _allContactDic;
}
//添加联系人
- (BOOL)addAddressContact:(AddressContact *)addContact
{//1.判断姓名以及联系方式是否为空NSString *name = [addContact name];NSString *phoneNumber = [addContact phoneNumber];if (!name || ![name length] || !phoneNumber || ![phoneNumber length]) {return NO;} else {//添加到对应的分组中//(1)获取到姓名首字母NSString *firstCharac = [name substringToIndex:1];//(2)根据key 从字典中取出对应的分组NSMutableArray *groupArr = _allContactDic[firstCharac];//(3)判断是否成功从字典中取到key对应的数组if (!groupArr) {//如果没有数组,就创建数组.groupArr = [NSMutableArray arrayWithCapacity:1];//将key以及value添加到字典中
            [_allContactDic setObject:groupArr forKey:firstCharac];}[groupArr addObject:addContact];return YES;}
}
//获得指定分组下得所有联系人,按照联系人姓名升序排序.
- (NSMutableArray *)allContactsWithNameAscendingByGroupName:(NSString *)groupName
{//key 对应的数组就存储着该组下所有的联系人.NSMutableArray *wGroup = _allContactDic[groupName];//按照联系人姓名升序排序.
    [wGroup sortUsingSelector:@selector(compareByName:)];return wGroup;
}
//获取所有女性的联系人,并且按照年龄的降序排列。
- (NSMutableArray *)allGrilContactsWithAgeDecending
{//获取所有女性的联系人,并且按照年龄的降序排列。NSMutableArray *girlArr = [[NSMutableArray alloc] initWithCapacity:1];for (NSString *key in _allContactDic) {NSMutableArray *groupArr = _allContactDic[key];for (AddressContact *contact in groupArr) {if ([[contact gender] isEqualToString:@"girl"]) {//查找到女性联系人之后,将联系人添加到女性数组中.
                [girlArr addObject:contact];}}}//按照年龄降序排列
    [girlArr sortUsingSelector:@selector(compareByAge:)];return girlArr;
}
//从通讯录中根据电话号码搜索联系人。
- (AddressContact *)getAddressContactByPhoneNumber:(NSString *)phoneNumber
{//1.先获取联系人所在的数组for (NSString *key in _allContactDic) {//根据key获取对应的数组.NSMutableArray *groupArr = _allContactDic[key];//遍历到数组中的联系人for (AddressContact *contact in groupArr) {if ([[contact phoneNumber] isEqualToString:phoneNumber]) {return contact;}}}return nil;
}
//根据姓名删除某个联系人。
- (void)removeAddressContactByName:(NSString *)name
{//(1)获取所在分组名称NSString *groupName = [name substringToIndex:1];//(2)获取key -- 数组NSMutableArray *group = _allContactDic[groupName];for (int i = 0; i < [group count]; i++) {AddressContact *contact = group[i];if ([[contact name] isEqualToString:@"ChangChaoQun"]) {//如果和指定名字相同,则从数组中移除对应的元素.
            [group removeObjectAtIndex:i];break;}}
}
//删除某个分组的全部联系人.
- (void)removeAllContactsByGroupName:(NSString *)groupName
{[_allContactDic removeObjectForKey:groupName];
}
//输出所有学生的信息
- (void)displayAllAddressContactInfo
{NSLog(@"allContactInfo = %@", _allContactDic);
}
@end

 

main.m

#import <Foundation/Foundation.h>
#import "AddressBook.h"
#import "AddressContact.h"
int main(int argc, const char * argv[])
{@autoreleasepool {//创建通讯录对象AddressBook *lanou12 = [[AddressBook alloc] init];//添加联系人AddressContact *frank = [[AddressContact alloc] initWithName:@"Frank" gender:@"man" phoneNumber:@"18612697721" age:16];BOOL isSuccess = [lanou12 addAddressContact:frank];NSLog(@"%d", isSuccess);[lanou12 displayAllAddressContactInfo];//获得指定分组下得所有联系人,按照联系人姓名升序排序.NSMutableArray *wGroupArr = [lanou12 allContactsWithNameAscendingByGroupName:@"W"];NSLog(@"%@", wGroupArr);//获取所有女性的联系人,并且按照年龄的降序排列。NSMutableArray *girlArr = [lanou12 allGrilContactsWithAgeDecending];NSLog(@"%@", girlArr);//从通讯录中根据电话号码搜索联系人。AddressContact *contact = [lanou12 getAddressContactByPhoneNumber:@"13838389438"];NSLog(@"contact = %@", contact);//删除姓名为ChangChaoQun的联系人[lanou12 removeAddressContactByName:@"ChangChaoQun"];[lanou12 displayAllAddressContactInfo];//删除W分组下得所有联系人[lanou12 removeAllContactsByGroupName:@"F"];[lanou12 displayAllAddressContactInfo];}return 0;
}

 

转载于:.html

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

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

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

标签:通讯录
留言与评论(共有 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