通讯录(中级)
来源:互联网 发布:windows 活动目录 管理 编辑:程序博客网 时间:2024/05/04 13:05
实现中等难度通讯录。需求:
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;}
0 0
- 通讯录(中级)
- OC编写中级通讯录
- OC中级通讯录
- 基于 Objective-C 的中级通讯录代码
- 中级
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 《算法导论》的堆排序
- hdu 4442 Physical Examination(贪心)
- cocos2d-x 入门游戏:许特尔图_4 of 4
- Triangular Pastures-DP(有点像是暴力枚举)
- HDOJ The kth great number (优先队列)
- 通讯录(中级)
- 支持向量回归(SVR)对函数的拟合近似
- MyBatis知多少(18)更新操作
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- 数据库中的锁
- Android之ListView原理学习与优化总结
- C语言陷阱与缺陷(4)
- 访问I/O内存和I/O端口设备
- Tcp粘包分析