/* 实现中等难度通讯录。需求:
1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。
4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人,并且按照年龄的降序排列。
7、根据姓名删除某个联系人。
8、删除某个分组的全部联系人。*/
AddressContact.h
#import <Foundation/Foundation.h>
@interface AddressContact : NSObject{
NSString * _name;
NSString * _sex;
NSString * _telNum;
NSString * _address;
NSString * _group;
int _age;
}
//初始化
- (id)initWithName:(NSString *)name telNum:(NSString *)telNum;
+ (id)initWithName:(NSString *)name telNum:(NSString *)telNUm;
//显示该联系人信息
- (void)showInfo;
//显示所有联系人信息
- (void)showAllInfo:(NSMutableDictionary *)addressBook;
//添加联系人到通讯录
- (void)addToAddressBook:(NSMutableDictionary *)adressBook;
//显示某个分组下的所有联系人的姓名
- (void)getAllByKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook;
//获得某个分组下的所有联系人
- (NSMutableArray *)getAllAddressContectByGroup:(NSString *)groupName ofAddressBook:(NSMutableDictionary *)addressBook;
//根据电话号码搜索,显示目标联系人所有信息
- (void)getAllInfoByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook;
//根据电话号码搜索,获取所有联系人的数组
- (NSMutableArray *)getAllAddressContectsByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook;
//删除某个分组所有联系人
- (void)deleteAllWithKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook;
//按姓名删除某个联系人
- (void)deleteWithName:(NSString *)name ofAddressBook:(NSMutableDictionary *)addressBook;
- (NSString *)getName;
- (NSString *)getSex;
- (NSString *)getTelNum;
- (NSString *)getAddress;
- (NSString *)getGroup;
- (int)getAge;
- (void)setAge:(int)age;
@end
AddressContact.m
#import "AddressContact.h"
@implementation AddressContact
//初始化
- (id)initWithName:(NSString *)name telNum:(NSString *)telNum{
self = [super init];
if(self){
_name = name;
_telNum = telNum;
}
return self;
}
+ (id)initWithName:(NSString *)name telNum:(NSString *)telNUm{
AddressContact * a = [[AddressContact alloc]initWithName:name telNum:telNUm];
return a;
}
- (NSString *)getName{
return _name;
}
- (NSString *)getSex{
return _sex;
}
- (NSString *)getTelNum{
return _telNum;
}
- (NSString *)getAddress{
return _address;
}
- (NSString *)getGroup{
return _group;
}
- (int)getAge{
return _age;
}
- (void)setAge:(int)age{
_age = age;
}
//显示该联系人信息
- (void)showInfo{
NSLog(@"姓名:%@,性别:%@,联系方式:%@,地址:%@,分组:%@,年龄:%d"
,[self getName],[self getSex],[self getTelNum],[self getAddress],[self getGroup],[self getAge]);
}
//显示所有联系人信息
- (void)showAllInfo:(NSMutableDictionary *)addressBook{
for(NSString * a in addressBook){
for(AddressContact * ac in [addressBook valueForKey:a]){
[ac showInfo];
}
}
}
//添加联系人到通讯录
- (void)addToAddressBook:(NSMutableDictionary *)adressBook{
if(!_name || !_telNum){
NSLog(@"添加失败!");
}else{
//根据名字首字母获得分组名称
NSString * key = [_name substringToIndex:1];
//补充分组信息
_group = key;
//根据分组名称获取对应的联系人数组
NSMutableArray * array = [adressBook valueForKey:key];
//将联系人添加到对应数组中
[array addObject:self];
}
}
//显示某个分组下得所有联系人的姓名
- (void)getAllByKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook{
for(AddressContact * a in [addressBook valueForKey:key]){
NSLog(@"%@",[a getName]);
}
}
//获得某个分组下的所有联系人对象,并按姓名升序排序
- (NSMutableArray *)getAllAddressContectByGroup:(NSString *)groupName ofAddressBook:(NSMutableDictionary *)addressBook{
NSMutableArray * names = [addressBook valueForKey:groupName];
//不可变数组的排序方法
//names = (NSMutableArray *)[names sortedArrayUsingSelector:@selector(compareWithName:)];
//可变数组的排序方法
[names sortUsingSelector:@selector(compareWithAge:)];
return names;
}
//根据电话号码搜索,显示联系人所有信息
- (void)getAllInfoByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook{
for(NSString * a in [addressBook allKeys]){
for(AddressContact * ac in [addressBook valueForKey:a]){
if([[ac getTelNum]isEqualToString:telNum]){
//调用已有方法,显示目标联系人的所有信息
[ac showInfo];
}
}
}
}
//根据电话号码搜索,获取所有联系人的数组
- (NSMutableArray *)getAllAddressContectsByTelNum:(NSString *)telNum ofAddressBook:(NSMutableDictionary *)addressBook{
NSMutableArray * arr = [NSMutableArray array];
for (NSString * a in addressBook) {
for (AddressContact * ac in [addressBook valueForKey:a]) {
if ([[ac getTelNum] isEqualToString:telNum]) {
[arr addObject:ac];
}
}
}
arr = (NSMutableArray *)[arr sortedArrayUsingSelector:@selector(compareWithName:)];
return arr; //返回联系人数组
}
//删除某个分组所有联系人
- (void)deleteAllWithKey:(NSString *)key ofAddressBook:(NSMutableDictionary *)addressBook{
[addressBook removeObjectForKey:key];
}
//按姓名删除某个联系人
- (void)deleteWithName:(NSString *)name ofAddressBook:(NSMutableDictionary *)addressBook{
NSString * key = [name substringToIndex:1];
for(AddressContact * a in [addressBook valueForKey:key]){
if([[a getName]isEqualToString:name]){
[[addressBook valueForKey:key] removeObject:a];
}
}
}
//按姓名比较联系人
- (NSComparisonResult)compareWithName:(AddressContact *)anotherAC{
return [[self getName] compare:[anotherAC getName]];
}
- (NSComparisonResult)compareWithAge:(AddressContact *)anotherAC{
// int result = 0;
// if ([self getAge] < [anotherAC getAge]) {
// result = -1;
// } else if ([self getAge] == [anotherAC getAge]){
// result = 0;
// } else {
// result = 1;
// }
// return result * -1;
return [self getAge] > [anotherAC getAge]; //>:升序 <:降序
}
@end
main.m
@autoreleasepool {
AddressContact * p1 = [AddressContact initWithName:@"Wang Yun Feng" telNum:@"18686886570"];
[p1 setAge:23];
AddressContact * p2 = [AddressContact initWithName:@"Zang Wang Wang" telNum:@"18686886570"];
[p2 setAge:22];
AddressContact * p3 = [AddressContact initWithName:@"Ha Ha Ha" telNum:@"13354288401"];
[p3 setAge:24];
AddressContact * p4 = [AddressContact initWithName:@"Wang Hui Jun" telNum:@"13354288401"];
[p4 setAge:21];
AddressContact * p5 = [AddressContact initWithName:@"Wang Jian Nan" telNum:@"13333333333"];
[p5 setAge:22];
NSMutableDictionary * addressBook = [NSMutableDictionary dictionary];
for(int i = 'A'; i <= 'Z'; i++){
NSMutableArray * value = [NSMutableArray array];
NSString * key = [NSString stringWithFormat:@"%c",i];
[addressBook setValue:value forKey:key];
}
//将信息添加进通讯录
[p1 addToAddressBook:addressBook];
[p2 addToAddressBook:addressBook];
[p3 addToAddressBook:addressBook];
[p4 addToAddressBook:addressBook];
[p5 addToAddressBook:addressBook];
//按首字母查找所有信息
// [p1 getAllByKey:@"W" ofAddressBook:addressBook];
NSMutableArray * acs = [p1 getAllAddressContectByGroup:@"W" ofAddressBook:addressBook];
for (AddressContact * ac in acs) {
[ac showInfo];
}
//显示通讯录中所有信息
//[p1 showAllInfo:addressBook];
//通过电话号码搜索联系人
//[p1 getAllInfoByTelNum:@"18686886570" ofAddressBook:addressBook];
//删除某个分组下得所有联系人
//[p1 deleteAllWithKey:@"Z" ofAddressBook:addressBook];
//[p1 showAllInfo:addressBook];
//按姓名删除联系人
//[p1 deleteWithName:@"Zang Wang Wang" ofAddressBook:addressBook];
//[p1 showAllInfo:addressBook];
}