AddressPerson.h
{
NSString *_name;
NSString *_gender;
NSString *_phoneNumber;
NSString *_address;
NSString *_groupName;
NSInteger _age;
}
- (instancetype)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber;
- (void)setGroupName:(NSString *)groupName;
- (NSString *)getGroupName;
- (void)setGender:(NSString *)gender;
- (NSString *)getGender;
- (NSString *)getName;
- (NSString *)getPhoneNumber;
- (void)setAge:(NSInteger)age;
- (NSInteger)getAge;
- (void)introduce;
- (NSString *)description;
AddressPerson.m
- (instancetype)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber
{
self = [super init];
if (self) {
_name = name;
_phoneNumber = phoneNumber;
}
return self;
}
- (void)setGroupName:(NSString *)groupName
{
_groupName = groupName;
}
- (NSString *)getGroupName
{
return _groupName;
}
- (void)setGender:(NSString *)gender
{
_gender = gender;
}
- (NSString *)getGender
{
return _gender;
}
- (NSString *)getName
{
return _name;
}
- (NSString *)getPhoneNumber
{
return _phoneNumber;
}
- (void)setAge:(NSInteger)age
{
_age = age;
}
- (NSInteger)getAge
{
return _age;
}
- (void)introduce
{
NSLog(@"name:%@ - nubmer:%@",_name,_phoneNumber);
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name:%@ - number:%@ - sex:%@ - age:%ld",_name,_phoneNumber,_gender,_age];
}
AddressBook.h
{
NSMutableDictionary *_allPersonDic;//字典,管理所有联系人,分组管理
}
//添加新联系人
- (void)addNewAddressPerson:(AddressPerson *)person;
//根据组名,选择某组联系人
- (NSMutableArray *)selectGroupWithGroupName:(NSString *)groupName;
//根据联系方式搜索联系人
- (AddressPerson *)selectAddressPersonWithPhoneNumber:(NSString *)phoneNumber;
//获取所有女性联系人
- (NSMutableArray *)selectFemaleAddressPerson;
-
//根据姓名删除某个联系人
- (void)deleteAddressPersonWithName:(NSString *)name;
//根据组名,删除某个分组
- (void)deleteGroupWithGroupName:(NSString *)groupName;
//展示通讯录中所有联系人
- (void)showAllAddressPerson;
AddressBook.h
- (instancetype)init
{
self = [super init];
if (self) {
//该对象初始化时,创建数据对象
_allPersonDic = [[NSMutableDictionary alloc] initWithCapacity:30];
}
return self;
}
//添加新联系人
- (void)addNewAddressPerson:(AddressPerson *)person
{
//先验证新添加的联系人是否符合标准
if (nil == [person getName] || nil == [person getPhoneNumber]) {
NSLog(@"姓名或联系方式为空");
return;
}
//添加联系人
//如果这个数组 取出不为空 也就是有联系人
//有联系人 说明啥?
//这个键值对 已经存在了 直接把联系人 存进去就行了
//没联系人 数组是空的
//先创建可变数组 把人放进去 然后 和key一起添加到字典里
NSMutableArray * oneGroup = [_allPersonDic objectForKey:[person getGroupName]];
if (nil == oneGroup) {
//没有这个分组
//创建新的分组并添加联系人
oneGroup = [NSMutableArray arrayWithCapacity:30];
[oneGroup addObject:person];
//将新的分组添加到字典中
[_allPersonDic setObject:oneGroup forKey:[person getGroupName]];
}else{
//有这个分组
[oneGroup addObject:person];
}
NSLog(@"add person = %@",_allPersonDic);
}
//根据组名,选择某组联系人
- (NSMutableArray *)selectGroupWithGroupName:(NSString *)groupName
{
//通过组名从字典中取出分组
NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];
if (nil != oneGroup) {
//搜索的分组存在
[oneGroup sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
AddressPerson * p1 = (AddressPerson *)obj1;
AddressPerson * p2 = (AddressPerson *)obj2;
return [[p1 getName] compare:[p2 getName]];
}];
return oneGroup;
}
return nil;
}
//根据联系方式搜索联系人
- (AddressPerson *)selectAddressPersonWithPhoneNumber:(NSString *)phoneNumber
{
//快速枚举,获取所有分组
for (NSString * groupName in _allPersonDic) {
//根据枚举得到的分组名,从字典中获取对应的分组
NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];
//枚举数组,获取数组中的所有联系人
for (AddressPerson * p in oneGroup) {
// 数组中 有3个元素 首元素删了
// 快速遍历 一般 只用来打印
//验证联系人是否符合条件
if (YES == [[p getPhoneNumber] isEqualToString:phoneNumber]) {
//因为电话号码不重复,因此找到符合条件的联系人后,直接返回
return p;
}
}
}
return nil;
}
//获取所有女性联系人
- (NSMutableArray *)selectFemaleAddressPerson
{
//定义空的,可变的数组,存储查询到的女性联系人
NSMutableArray * femaleArray = [NSMutableArray arrayWithCapacity:30];
for (NSString * groupName in _allPersonDic) {
//根据枚举得到的分组名,从字典中获取对应的分组
NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];
//枚举数组,获取数组中的所有联系人
for (AddressPerson * p in oneGroup) {
//验证联系人是否符合条件
if (YES == [[p getGender] isEqualToString:@"女"]) {
//如果符合条件,添加到数组中存储
[femaleArray addObject:p];
}
}
}
if ([femaleArray count] > 0) {
//如果找到人了
[femaleArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
AddressPerson * p1 = (AddressPerson *)obj1;
AddressPerson * p2 = (AddressPerson *)obj2;
if ([p1 getAge] < [p2 getAge]) {
return NSOrderedDescending;
}else if ([p1 getAge] > [p2 getAge]){
return NSOrderedAscending;
}
return NSOrderedSame;
}];
return femaleArray;
}
return nil;
}
//根据姓名删除某个联系人
- (void)deleteAddressPersonWithName:(NSString *)name
{
//定义AddressPerson类型的变量,记录查找到的联系人
AddressPerson * deletePerson = nil;
for (NSString * groupName in _allPersonDic) {
NSMutableArray * oneGroup = [_allPersonDic objectForKey:groupName];
for (AddressPerson * p in oneGroup) {
if (YES == [[p getName] isEqualToString:name]) {
//找到要删除的联系人
deletePerson = p;
}
}
}
NSMutableArray * group = [self selectGroupWithGroupName:[deletePerson getGroupName]];
//删除之前,先判断组里还剩几个人
//如果剩下一个人,直接把组删除。否则,只删除某个人
if ([group count] > 1) {
//组里不止一个人
[group removeObject:deletePerson];
}else{
//组里只剩一个人了,把组删掉
[_allPersonDic removeObjectForKey:[deletePerson getGroupName]];
}
NSLog(@"delete result = %@",_allPersonDic);
}
/*
//根据组名,删除某个分组
- (void)deleteGroupWithGroupName:(NSString *)groupName
{
}
//展示通讯录中所有联系人
- (void)showAllAddressPerson
{
}
*/
main.m
int main(int argc, const char * argv[])
{
//创建联系人并添加
AddressPerson * p1 = [[AddressPerson alloc] initWithName:@"guomingmiao" phoneNumber:@"123"];
[p1 setGroupName:@"G"];
[p1 setGender:@"男"];
[p1 setAge:23];
AddressPerson * p2 = [[AddressPerson alloc] initWithName:@"yumingyue" phoneNumber:@"456"];
[p2 setGroupName:@"Y"];
[p2 setGender:@"女"];
[p2 setAge:21];
AddressPerson * p3 = [[AddressPerson alloc] initWithName:@"ranshirong" phoneNumber:@"789"];
[p3 setGroupName:@"R"];
[p3 setGender:@"男"];
[p3 setAge:25];
AddressPerson * p4 = [[AddressPerson alloc] initWithName:@"lusai" phoneNumber:@"135"];
[p4 setGroupName:@"L"];
[p4 setGender:@"女"];
[p4 setAge:19];
AddressPerson * p5 = [[AddressPerson alloc] initWithName:@"liupeiyuan" phoneNumber:@"333"];
[p5 setGroupName:@"L"];
[p5 setGender:@"男"];
[p5 setAge:30];
//创建通讯录
AddressBook * list = [[AddressBook alloc] init];
//添加联系人
[list addNewAddressPerson:p1];
[list addNewAddressPerson:p2];
[list addNewAddressPerson:p3];
[list addNewAddressPerson:p4];
[list addNewAddressPerson:p5];
//获取L组的联系人,按姓名升序排列
NSMutableArray * group = [list selectGroupWithGroupName:@"L"];
NSLog(@"group = %@",group);
AddressPerson * p = [list selectAddressPersonWithPhoneNumber:@"135"];
NSLog(@"p = %@",p);
NSMutableArray * femaleArray = [list selectFemaleAddressPerson];
NSLog(@"female = %@",femaleArray);
[list deleteAddressPersonWithName:@"guomingmiao"];
return 0;
}