关闭

OC试题 ——通讯录(AddressBook)

638人阅读 评论(1) 收藏 举报

要求描述:⽤用OC语言完成简易通讯录(实现增删改查)功 能.
(
:使用MRC)

⼀一、功能描述:

main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能 :

.

:456);

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类中定义的方法实现:删除一个分组,并展⽰通信录中所有人信

.(删除L)所有联系⼈人信息。

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.忽略电话重复问题,只返回第一个查找到的联系人。

5、功能五

根据性别查找联系人,并将查到的联系人按照年龄升序排序(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);
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7874次
    • 积分:439
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:10篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论