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:@"123456789@qq.com"];
AddressPerson *p1=[[AddressPerson alloc] initWithName:@"Awujiyi" Gender:@"F" Number:@"13843838439" Address:@"demaxiya" Group:@"A" Age:@"26" Email:@"123456987@qq.com"];
AddressPerson *p2=[[AddressPerson alloc] initWithName:@"Bguanghui" Gender:@"F" Number:@"13843838440" Address:@"demaxiya" Group:@"B" Age:@"20" Email:@"123654789@qq.com"];
AddressPerson *p3=[[AddressPerson alloc] initWithName:@"Bdelaiesi" Gender:@"M" Number:@"13843838441" Address:@"nuokesasi" Group:@"B" Age:@"25" Email:@"456987123@qq.com"];
AddressPerson *p4=[[AddressPerson alloc] initWithName:@"Cdalaiwen" Gender:@"M" Number:@"13843838442" Address:@"nuokesasi" Group:@"C" Age:@"23" Email:@"456789123@qq.com"];
AddressPerson *p5=[[AddressPerson alloc] initWithName:@"Cruiwen" Gender:@"F" Number:@"13843838443" Address:@"nuokesasi" Group:@"C" Age:@"18" Email:@"456987123@qq.com"];
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:@"654987123@qq.com"];
// 添加所有联系人
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 <Foundation/Foundation.h>
@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]; //判断数组的长度,强制转换为整型
for (int i=0; i<a; i++) {
// 判断姓名
if ([[marr1[i] name]isEqualToString:Name]) {
// 在数组中根据名字删除
[marr1 removeObjectAtIndex:i];
a=a-1;
i=i-1;
}
}
return _dict;
}
//根据组名删除练习人
-(NSMutableDictionary *)groupDelPerson:(NSString *)Group{
// 取出所有的key值存在数组中
NSArray *temp=[_dict allKeys];
// 遍历数组
for (NSString *key in temp) {
// 判断组名
if ([key isEqualToString:Group]) {
// 从字典中删除分组
[_dict removeObjectForKey:key];
}
}
return _dict;
}
@end
@interface AddressPerson : NSObject
{
NSString * _name;
NSString * _gender;
NSString * _number;
NSString * _address;
NSString * _group;
NSString * _age;
NSString * _email;
}
-(id)initWithName:(NSString *)name Gender:(NSString *)gender
Number:(NSString *)number Address:(NSString *)address
Group:(NSString *)group Age:(NSString *)age
Email:(NSString *)email;
@property(nonatomic,retain)NSString *name;
@property(nonatomic,retain)NSString *gender;
@property(nonatomic,retain)NSString *number;
@property(nonatomic,retain)NSString *address;
@property(nonatomic,retain)NSString *group;
@property(nonatomic,retain)NSString *age;
@property(nonatomic,retain)NSString *email;
@end
@implementation AddressPerson
// 初始化
-(id)initWithName:(NSString *)name Gender:(NSString *)gender
Number:(NSString *)number Address:(NSString *)address
Group:(NSString *)group Age:(NSString *)age
Email:(NSString *)email{
self=[super init];
if (self) {
_name=name;
_gender=gender;
_number=number;
_address=address;
_group=group;
_age=age;
_email=email;
}
return self;
}
// 设置名字 setter方法
-(void)setName:(NSString *)name{
if (_name!=name) {
[_name release];
_name=[name retain];
}
}
// 获取名字 getter方法
-(NSString *)name{
return _name;
}
// 设置性别 setter方法
-(void)setGender:(NSString *)gender{
if (_gender!=gender) {
[_gender release];
_gender=[gender retain];
}
}
// 获取性别 getter 方法
-(NSString *)gender{
return _gender;
}
// 设置电话号码 setter方法
-(void)setNumber:(NSString *)number{
if (_number!=number) {
[_number release];
_number=[number retain];
}
}
// 获取电话号码 getter 方法
-(NSString *)number{
return _number;
}
// 设置地址 setter方法
-(void)setAddress:(NSString *)address{
if (_address!=address) {
[_address release];
_address=[address retain];
}
}
// 获取地址 getter 方法
-(NSString *)address{
return _address;
}
// 设置组名 setter方法
-(void)setGroup:(NSString *)group{
if (_group!=group) {
[_group release];
_group=[group retain];
}
}
// 获取组名 getter 方法
-(NSString *)group{
return _group;
}
// 设置年龄 setter方法
-(void)setAge:(NSString *)age{
if (_age!=age) {
[_age release];
_age=[age retain];
}
}
// 获取年龄 getter 方法
-(NSString *)age{
return _age;
}
// 设置邮箱 setter方法
-(void)setEmail:(NSString *)email{
if (_email!=email) {
[_email release];
_email=[email retain];
}
}
// 获取邮箱 getter 方法
-(NSString *)email{
return _email;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@",_name,_gender,_number,_address,_group,_age,_email];
}
@end