@实现通讯录。需求:
1、创建联系人类AddressContact,联系人可以存储姓名(英文,首字母大写)、地址、邮箱、电话号码、分组名(即大写字母A~Z)。
2、创建通讯录类AddressBook。
3、通讯录使用字典分组管理所有联系人。(即key是大写字母A~Z,每个key对应的值是数组,管理对应的联系人).
4、通讯录可以添加联系人。要求:
(1)添加到对应的分组中,
(2)添加时需要进行验证,如果姓名为空或手机号为空,不能添加,并输出:联系人姓名或手机号不能为空。
(3)如果添加成功,输出:添加联系人成功。
5、输出所有联系人,并按照姓名升序排列。即返回值为数组类型,并对整个数组中的元素进行排序。
//选作
1、创建联系人类AddressContact,联系人可以存储姓名(英文,首字母大写)、地址、邮箱、电话号码、分组名(即大写字母A~Z)。
2、创建通讯录类AddressBook。
3、通讯录使用字典分组管理所有联系人。(即key是大写字母A~Z,每个key对应的值是数组,管理对应的联系人).
4、通讯录可以添加联系人。要求:
(1)添加到对应的分组中,
(2)添加时需要进行验证,如果姓名为空或手机号为空,不能添加,并输出:联系人姓名或手机号不能为空。
(3)如果添加成功,输出:添加联系人成功。
5、输出所有联系人,并按照姓名升序排列。即返回值为数组类型,并对整个数组中的元素进行排序。
//选作
6,可以按照电话号码搜索联系人,返回值为联系人对象。
#import <Foundation/Foundation.h>
@interface AddressContact : NSObject{
NSString * _name;
NSString * _address;
NSString * _emil;
NSString * _telephone;
NSString * _headName;
}
@property (nonatomic,strong) NSString * name; // 姓名
@property (nonatomic,strong) NSString * address; // 地址
@property (nonatomic,strong) NSString * emil; // 邮箱
@property (nonatomic,strong) NSString * telephone; // 电话
@property (nonatomic,strong) NSString * headName; // 分组名(26个字母A-Z)
+ (id)addressContactWithName:(NSString *)name Address:(NSString *)address Emil:(NSString *)emil Telephone:(NSString *)telephone HeadName:(NSString *)headName;
@end
#import "AddressContact.h"
@implementation AddressContact
+ (id)addressContactWithName:(NSString *)name Address:(NSString *)address Emil:(NSString *)emil Telephone:(NSString *)telephone HeadName:(NSString *)headName{
AddressContact * selfAC = [[[self class] alloc]init];
selfAC.name = name;
selfAC.address = address;
selfAC.emil = emil;
selfAC.telephone = telephone;
selfAC.headName = headName;
return selfAC;
}
- (NSString *)description{
return [NSString stringWithFormat:@"姓名:%@ 地址:%@ emil:%@ 电话:%@ 首字母:%@",self.name,self.address,self.emil,self.telephone,self.headName];
}
@end
#import <Foundation/Foundation.h>
@class AddressContact;
@interface AddressBook : NSObject
@property (nonatomic,strong) NSArray * keys; // key
@property (nonatomic,strong) NSMutableArray * values; // value
@property (nonatomic,strong) NSMutableDictionary * abDic; // Dictionary
- (id)init;
// 显示全部联系人
- (void)showAllContactWithCount:(NSUInteger) count;
// 可以按照电话号码搜索联系人,返回值为联系人对象
- (AddressContact *)selectContactWithTelephone:(NSString *)telephone;
@end
#import "AddressBook.h"
#import "AddressContact.h"
@implementation AddressBook
- (id)init{
if (self = [super init]) {
_keys = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",
@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];
_values = [NSMutableArray array];
for (int i = 0; i < [_keys count]; i++) {
// 一定要初始化,要不是直接用_values加对象会报错,因为_value不初始化只是一个指针,只有初始化,它才是一个数组对象(切记切记!!!!)
[_values addObject:[NSMutableArray array]];
}
_abDic = [[NSMutableDictionary alloc] initWithObjects:_values forKeys:_keys];
}
return self;
}
- (void)showAllContactWithCount:(NSUInteger) count{
NSLog(@"姓名 地址 emil 电话 首字母");
for (int i = 0; i < count; i++) {
AddressContact * adContact = [_values objectAtIndex:i];
NSLog(@"%@ %@ %@ %@ %@",adContact.name,adContact.address,adContact.emil,adContact.telephone,adContact.headName);
}
}
- (AddressContact *)selectContactWithTelephone:(NSString *)telephone{
for (int i = 0; i < [_values count]; i++) {
AddressContact * adContact = [_values objectAtIndex:i];
if ([adContact.telephone isEqualToString:telephone]) {
return adContact;
}
}
return 0;
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
AddressContact * person1 = [AddressContact addressContactWithName:@"Zumingtao" Address:@"江西" Emil:@"humingtao2013@126.com" Telephone:@"18601982565" HeadName:@"Z"];
AddressContact * person2 = [AddressContact addressContactWithName:@"Zhaoweisong" Address:@"河北" Emil:@"zhaoweisong2013@126.com" Telephone:@"18618956482" HeadName:@"Z"];
AddressContact * person3 = [AddressContact addressContactWithName:@"Fanjunpeng" Address:@"河南" Emil:@"fanjunpeng@126.com" Telephone:@"15502369875" HeadName:@"F"];
AddressContact * person4 = [AddressContact addressContactWithName:@"Chenfengchang" Address:@"天津" Emil:@"chenfengchang@126.com" Telephone:@"18601982565" HeadName:@"C"];
AddressContact * person5 = [AddressContact addressContactWithName:@"Niexuwang" Address:@"四川" Emil:@"niexuwang2013@126.com" Telephone:@"15862548169" HeadName:@"N"];
AddressContact * person6 = [AddressContact addressContactWithName:@"Yanguo" Address:@"全真教" Emil:@"yanguolove2013@126.com" Telephone:@"13578569452" HeadName:@"Y"];
AddressContact * person7 = [AddressContact addressContactWithName:@"Xiaolongnv" Address:@"古墓" Emil:@"xiaolongnv@126.com" Telephone:@"14785698562" HeadName:@"X"];
AddressBook * adBook = [[AddressBook alloc]init];
adBook.values = [NSMutableArray arrayWithObjects:person1,person2,person3,person4,person5,person6,person7,nil];
for (int i = 0; i < [adBook.values count]; i++) {
if (((AddressContact *)[adBook.values objectAtIndex:i]).name == nil || ((AddressContact *)[adBook.values objectAtIndex:i]).telephone == nil) {
NSLog(@"%@----------不能添加,联系人姓名或手机号不能为空",[adBook.values objectAtIndex:i]);
}else{
[(NSMutableArray *)[adBook.abDic objectForKey:((AddressContact *)[adBook.values objectAtIndex:i]).headName] addObject:[adBook.values objectAtIndex:i]];
//[adBook.abDic setObject:[adBook.values objectAtIndex:i] forKey: ((AddressContact *)[adBook.values objectAtIndex:i]).headName];
NSLog(@"%@----------添加成功",[adBook.values objectAtIndex:i]);
}
}
for (int i = 0; i < [[adBook.abDic allKeys] count]; i++) {
if ([adBook.abDic objectForKey:[[adBook.abDic allKeys] objectAtIndex:i]] != nil) {
NSLog(@"key = value <====> %@ = %@",[[adBook.abDic allKeys] objectAtIndex:i],[adBook.abDic objectForKey:[[adBook.abDic allKeys] objectAtIndex:i]]);
}
}
NSLog(@"%@",adBook.abDic);
// 输出所有联系人,并按照姓名升序排列。即返回值为数组类型,并对整个数组中的元素进行排序。
[adBook.values sortUsingComparator:^NSComparisonResult(AddressContact * obj1, AddressContact * obj2) {
return [obj1.name compare:obj2.name];
}];
[adBook showAllContactWithCount:[adBook.values count]];
NSLog(@"-------------------------------------------------------------------------------------------");
// 可以按照电话号码搜索联系人,返回值为联系人对象
NSLog(@"%@",[adBook selectContactWithTelephone:@"14785698562"]);
}
return 0;
}