1), 将所有的 实例变量 用 属性代替
2)实例变量用点语法调用。
3)实现添加联系人到通讯录,当姓名,电话号码不为空。邮箱的格式正确时,添加成功
4)获取某个分组的所有联系人并且按姓名升序排序
5)根据电话搜索某一个联系人
6)按性别找人并全部输出并且按照年龄排序
7)按姓名查找删除某一个联系人
8)按组名查找并删除某一组联系人
主函数 main.m 中
AddressPerson *p=[[AddressPerson alloc] initWithName:@"Agailun" Gender:@"M" Number:@"13843838438" Address:@"demaxiya" Group:@"A" Age:@"25" Email:@"[email protected]"];
AddressPerson *p1=[[AddressPerson alloc] initWithName:@"Awujiyi" Gender:@"F" Number:@"13843838439" Address:@"demaxiya" Group:@"A" Age:@"26" Email:@"[email protected]"];
AddressPerson *p2=[[AddressPerson alloc] initWithName:@"Bguanghui" Gender:@"F" Number:@"13843838440" Address:@"demaxiya" Group:@"B" Age:@"20" Email:@"[email protected]"];
AddressPerson *p3=[[AddressPerson alloc] initWithName:@"Bdelaiesi" Gender:@"M" Number:@"13843838441" Address:@"nuokesasi" Group:@"B" Age:@"25" Email:@"[email protected]"];
AddressPerson *p4=[[AddressPerson alloc] initWithName:@"Cdalaiwen" Gender:@"M" Number:@"13843838442" Address:@"nuokesasi" Group:@"C" Age:@"23" Email:@"[email protected]"];
AddressPerson *p5=[[AddressPerson alloc] initWithName:@"Cruiwen" Gender:@"F" Number:@"13843838443" Address:@"nuokesasi" Group:@"C" Age:@"18" Email:@"[email protected]"];
NSMutableArray *temp=[NSMutableArray arrayWithObjects:p,p1,p2,p3,p4,p5, nil];
AddressPerson *p6=[[AddressPerson alloc] initWithName:@"Daiweiniya" Gender:@"F" Number:@"13843838444" Address:@"aiouniya" Group:@"D" Age:@"108" Email:@"[email protected]"];
// 添加所有联系人
AddressBook *q=[[AddressBook alloc] init];
for (int i=0; i<[temp count]; i++) {
[q addressPerson:temp[i]];
}
// 添加一个联系人
[q addressPerson:p6];
// NSLog(@"%@",q.dict);
// 根据组名查找联系人并且按照姓名升序排列
NSMutableArray *group1=[q groupPerson:@"C"];
NSLog(@"%@",group1);
// 根据电话号码查找联系人
AddressPerson *number1=[q numberPerson:@"13843838440"];
NSLog(@"%@",number1);
// 根据性别查找联系人 并且按照年龄排序
NSMutableArray *gender1=[q genderPerson:@"F"];
NSLog(@"%@",gender1);
// 根据姓名删除联系人
NSMutableDictionary *nameDel=[q nameDelPerson:@"Cdalaiwen"];
NSLog(@"%@",nameDel);
// 根据组名删除联系人
NSMutableDictionary *groupDel=[q groupDelPerson:@"A"];
NSLog(@"%@",groupDel);
封装 AddressBook.h中
#import
@class AddressPerson; // 注意这个引用
@interface AddressBook : NSObject
{
// 管理通讯录的人的字典,他的key值就是分组的值,Value是一个数组,存放相同分组的人
NSMutableDictionary *_dict;
// 这个字典当做AdressBook 类的一个实例变量,用来存储所有的联系人,这样就不用到main函数中去创建了,封装的更彻底。
}
-(id)init;
// getter 方法
-(NSMutableDictionary *)dict;
//添加联系人
-(void)addressPerson:(AddressPerson *)aPerson;
//根据组名查找联系人 并且按照姓名升序排列
-(NSMutableArray *)groupPerson:(NSString *)groupName;
//根据电话号码查找联系人
-(AddressPerson *)numberPerson:(NSString *)number;
//根据性别查找联系人 并且按照年龄升序排列
-(NSMutableArray *)genderPerson:(NSString *)Gender;
//根据名字删除联系人
-(NSMutableDictionary *)nameDelPerson:(NSString *)Name;
//根据组名删除联系人
-(NSMutableDictionary *)groupDelPerson:(NSString *)Group;
@end
#import "AddressBook.h"
#import "AddressPerson.h" // 注意这个引用
@implementation AddressBook
-(id)init{
self=[super init];
if (self) {
// 将字典初始化
_dict=[NSMutableDictionary dictionary];
}
return self;
}
-(NSMutableDictionary *)dict{
return _dict;
}
// 添加联系人
-(void)addressPerson:(AddressPerson *)aPerson{
// 判断联系人名字,电话号码,邮箱是否为空
if ([aPerson.name isEqualToString:@" "]||[aPerson.number isEqualToString:@" "]||[aPerson.email hasSuffix:@" "]) {
NSLog(@"打印失败");
return;
}else{
// 取首字母,当做 Key 值
NSString *first=[aPerson.name substringToIndex:1];
// 判断首字母
if ([_dict objectForKey:first]==nil) {
// 如果通过first在字典中取不到Value说明没有这个分组存在,那么创建一个分组
// 创建可变数组 ,添加首字母相同的person 到数组中
NSMutableArray *tem=[NSMutableArray arrayWithObject:aPerson];
// 添加到字典中 ,以首字母当做Key值,可变数组当做Value,存入管理字典中
[_dict setObject:tem forKey:first];
}else{
// 如果存在这个分组的Value ,那么直接添加。
// 直接添加联系人
[[_dict objectForKey:first] addObject:aPerson];
}
}
}
//根据组名查找联系人 并且按照姓名升序排序
-(NSMutableArray *)groupPerson:(NSString *)Group{
// 将查找到的组放到数组中。
NSMutableArray *tem1=[_dict objectForKey:Group];
// 姓名的 block 排序
[tem1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 name]compare:[obj2 name]];
}];
return tem1; //返回已经排序好的数组
}
// 根据电话号码查找联系人
-(AddressPerson *)numberPerson:(NSString *)Number{
// 遍历字典 group 就是字典的key
for (NSString *group in _dict) {
// 将字典的Value 的值放到数组中
NSMutableArray *arr=[_dict objectForKey:group];
// 遍历数组
for (AddressPerson *c in arr) {
// 判断电话号码
if ([Number isEqualToString:c.number]) {
return c;
}
}
}
return nil;
}
// 根据性别查找联系人 并且按照年龄升序排列
-(NSMutableArray *)genderPerson:(NSString *)Gender{
NSMutableArray *arr=[NSMutableArray array];
// 遍历字典 group 就是字典的key
for (NSString *group in _dict) {
// AddressPerson对象 遍历 数组[_dict objectForKey:group]
for (AddressPerson *c in [_dict objectForKey:group]) {
// 判断性别
if ([Gender isEqualToString:c.gender]) {
[arr addObject:c];
}
}
}
// block 排序 此时age是字符串用intValue转化为整型(int)
[arr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 age] intValue]>[[obj2 age] intValue];
}];
return arr;
}
// 根据姓名删除联系人
-(NSMutableDictionary *)nameDelPerson:(NSString *)Name{
// 当人的名字没有重复的时候,使用下面这个方法
/*
// 遍历字典
for (NSString *group in _dict) {
// 将字典的Value 值放到数组中
NSMutableArray *arr=[_dict objectForKey:group];
// 遍历数组
for (AddressPerson *one in arr) {
// 判断姓名
if ([one.name isEqualToString:Name]) {
[arr removeObject:one];
break;
}
}
}
return _dict;
*/
// 当人的名字有重复的时候,则使用下面的这个方法
// 取出所有的key 值放到数组 arr 中
NSArray *arr=[_dict allKeys];
NSMutableArray *marr1=[NSMutableArray array];
// 用循环将字典的Value的值放入数组marr1 中
for (int i=0; i<[arr count]; i++) {
marr1=[_dict objectForKey:arr[i]];
}
int a=(int)[marr1 count]; //判断数组的长度,强制转换为整型