要求描述:⽤用OC语言完成简易通讯录(实现增删改查)功 能.
(注:使用MRC)
⼀一、功能描述:
main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能 :
1).使用便利构造器创建四个Person类的实例(联系⼈人).
姓名:Lucy性别:女 电话:123年龄:21姓名:Joe性别:男 电话:456年龄:17姓名:Baby性别:女 电话:789年龄:27姓名:Linda性别:女 电话:000年龄:21
2).创建⼀一个AddressBook类的实例对象(通讯录). 3).使⽤用AddressBook类中定义的⽅方法实现:添加联系人,将四个联系⼈人添加到通讯录
4).使用AddressBook类中定义的⽅法实现:根据电话查找联系人,并打印(查找电
5).使用AddressBook类中定义的⽅法实现:根据性别查找联系人,并将查到的联系人
按照年龄升序排序,并打印(查找性别:⼥女)
6).使⽤AddressBook类中定义的方法实现:根据姓名,更改联系人信息.(修改Linda的 信息:性别:女 电话:012年龄:25)
7).使用AddressBook类中定义的方法实现:按照姓名删除联系人,并展⽰通信录中所 有人信息.(删除联系人:Baby)
8).使用AddressBook类中定义的方法实现:删除一个分组,并展⽰通信录中所有人信
9).使用AddressBook类中定义的方法实现:实现3~8之间每个功能后,输出通讯录中
⼆二、功能实现提⽰示:
1、功能⼀一 定义Person类
1)声明属性:姓名,年龄,性别,电话,分组。注:年龄是int类型,其余属性时NSString类型;分组是姓名首字母(大写),使用提供的类目:NSString+Characters中的方法获取。(3分)
2)重写description⽅方法,输出Person对象的信息。例如:“姓名:张三 性别:男 年龄:22电话:123456789”.(2分)
3)定义Person类的便利构造器⽅法,方法包含参数:姓名、年龄、性别、电话.(5分)
2、功能⼆二 定义AddressBook类.
1)声明属性:allPersonDic(字典类型)。使⽤用声明的字典作为容器,分组管理通讯录中 所有联系人;字典的Key值为分组名(姓名首字母,⼤写),value值为数组,数组中存放联系人(Person实例).(5分)
2)在AddressBook的初始化方法中,初始化allPersonDic。(5分)3)重写dealloc⽅法,在dealloc⽅法中实现AddressBook类的内存管理。(5分)
3、功能三 添加联系⼈.要求(15分)
a.在AddressBook类中定义⽅法:
- (BOOL)addPerson:(Person*)aPerson;
b.判断姓名和电话不能为空否则添加失败. c.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人
d.添加成功返回YES,姓名为空或者有重名的添加失败返回NO. e.数据使用Person存储.
4、功能四 根据电话查找某个联系人.(10分)
a:在AddressBook类中定义⽅方法:
-(Person*)findPersonWithPhoneNum:(NSString*)aPhoneNum;
b:如果找到返回该联系人,否则返回nil. c.忽略电话重复问题,只返回第一个查找到的联系人。
根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)a:在AddressBook类中定义方法:
-(NSArray*)findPersonsWithSex:(NSString*)aSex; b:查找到联系⼈人放⼊入数组,排序的时候使⽤用block.
6、功能六 根据姓名,更改联系人信息.(10分)
a:在AddressBook类中定义⽅方法:-(BOOL)changePersonWithName:(NSString*)name phoneNum:
(NSString*)aNum sex:(NSString*)aSex age:(NSUInteger) aAge; b:找到该联系人并修改该成功返回YES,否则返回NO
c.修改电话、性别、年龄,参数不能为空。
7、功能七 按照姓名删除联系人.(15分)
a.在AddressBook类中定义⽅方法:
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
b.删除成功返回YES,否则返回NO; c.当删除联系人后分组为空时,需要删除该分组。
8、功能八 删除⼀个分组.(5分)
a.在AddressBook类中定义⽅方法:
- (BOOL)deleteGroup:(NSString*)aGroupName;
b.删除成功返回YES,否则返回NO;
9、功能九 展⽰示通讯录中的所有联系人信息(5分)
a:在AddressBook类中定义方法:-(void)showAll;
b.
通过重写
description
⽅法展⽰示联系人信息 。
#import <Foundation/Foundation.h>
#import "Person.h"
@interface AddressBook : NSObject
@property (nonatomic ,retain)NSMutableDictionary *allPersonDic;
- (instancetype)init;
// 添加联系人
- (BOOL)addPerson:(Person *)aPerson;
// 根据电话查找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
// 根据性别查找联系人,并将查到的联系人按照年龄升序排序
- (NSArray *)findPersonsWithSex:(NSString *)aSex;
// 根据姓名,更改联系人信息
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSInteger) aAge;
// 按照姓名删除联系⼈
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName;
// 展示通讯录中的所有联系人信息
- (void)showAll;
@end
-------------------------------------------------------------------------------
// AddressBook.m
- (void)dealloc
{
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.allPersonDic = [NSMutableDictionary dictionary];
}
return self;
}
//添加新联系人
- (BOOL)addPerson:(Person *)aPerson
{
if (aPerson.name == nil ||aPerson.telephone == nil) {
NSLog(@"添加失败");
return NO;
}else
{
NSMutableArray *group = [_allPersonDic objectForKey:[aPerson GroupName]];
if (group.count > 0) {
[group addObject:aPerson];
}else
{
NSMutableArray *group = [NSMutableArray array];
[group addObject:aPerson];
[_allPersonDic setObject:group forKey:[aPerson GroupName]];
}
NSLog(@"添加成功");
return YES;
}
}
//根据电话查找某个联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
Person *p = nil;
for (NSString *key in _allPersonDic) {
NSArray *arr = [_allPersonDic objectForKey:key];
for (Person *p1 in arr) {
if ([p1.telephone isEqualToString:aPhoneNum]) {
p = p1;
}
}
}
return p;
}
//根据性别查找联系人,并将查到的联系人按照年龄升序排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex
{
NSMutableArray *arr = [NSMutableArray array];
for (NSString *key in _allPersonDic) {
NSArray *array = [_allPersonDic objectForKey:key];
for (Person *p1 in array) {
if ([p1.sex isEqualToString:aSex]) {
[arr addObject:p1];
}
}
}
if (arr != nil) {
[arr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Person *p1 = (Person *)obj1;
Person *p2 = (Person *)obj2;
if (p1.age > p2.age) {
return NSOrderedAscending;
}else if(p1.age < p2.age){
return NSOrderedDescending;
}else
{
return NSOrderedSame;
}
}];
}
return arr;
}
//根据姓名,更改联系⼈信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSInteger) aAge
{
Person *p1 = nil;
for (NSString *key in _allPersonDic) {
NSArray *arr = _allPersonDic[key];
for (Person *p in arr) {
if ([p.name isEqualToString:name]) {
p1 = p;
}
}
}
if (p1 != nil) {
[p1 setTelephone:aNum];
[p1 setSex:aSex];
[p1 setAge:aAge];
return YES;
}else
{
return NO;
}
}
//按照姓名删除联系⼈
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
Person *p1 = [[[Person alloc]init] autorelease];
for (NSString *key in _allPersonDic) {
NSArray *arr = _allPersonDic[key];
for (Person *p in arr) {
if ([p.name isEqualToString:aPersonName]) {
p1 = p;
}
}
}
NSMutableArray *value = [_allPersonDic objectForKey:p1.GroupName];
if (value.count > 1) {
[value removeObject:p1];
}else
{
[_allPersonDic removeObjectForKey:[p1 GroupName]];
}
NSLog(@"删除成功");
return YES;
}
//删除⼀个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
[_allPersonDic removeObjectForKey:aGroupName];
NSLog(@"删除成功");
return YES;
}
//展示通讯录中的所有联系人信息
-(void)showAll
{
NSLog(@"%@",_allPersonDic);
}