php通讯录的增删改查,用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类中定义的方法实现:根据电话查找联系人,并打印(查找电话:456);

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方法展示联系人信息 。

Person.h#import 

@interface Person : NSObject

//声明属性

@property (nonatomic , retain) NSString *name;

@property (nonatomic , retain)NSString *gender;

@property (nonatomic , assign)int age;

@property (nonatomic , retain)

NSString *phoneNumber;

@property (nonatomic , retain)NSString *groupName;

//声明初始化方法

- (id)initWithPersonName:(NSString *)name

age:(int)age

gender:(NSString *)gender

phoneNumber:(NSString *)phoneNumber

groupName:(NSString *)groupName;

//便利构造器

+ (id)personWithName:(NSString *)name

age:(int)age

gender:(NSString *)gender

phoneNumber:(NSString *)phoneNumber

groupName:(NSString *)groupName;

@end

Person.m#import "Person.h"

@implementation Person

- (id)initWithPersonName:(NSString *)name age:(int)age gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber groupName:(NSString *)groupName{

if (self = [super init]) {

self.name = name;

self.age = age;

self.phoneNumber = phoneNumber;

self.gender = gender;

self.groupName = groupName;

}

return self;

}

+ (id)personWithName:(NSString *)name

age:(int)age

gender:(NSString *)gender

phoneNumber:(NSString *)phoneNumber

groupName:(NSString *)groupName{

Person *person = [[[Person alloc]initWithPersonName:name age:age gender:gender phoneNumber:phoneNumber groupName:groupName] autorelease];

return person;

}

//重写父类的方法,默认情况是打印对象的地址。

- (NSString *)description{

return [NSString stringWithFormat:@"  姓名:%@ ,性别:%@ , 年龄:%d  , 电话:%@ , 分组名:%@    ", _name , _gender  , _age, _phoneNumber , _groupName ];

}

- (void)dealloc{

NSLog(@"%s" , __FUNCTION__);

[_name release];

[_gender release];

[_phoneNumber release];

[_groupName release];

[super dealloc];

}

@end

AddressBook.h#import 

#import "Person.h"

@interface AddressBook : NSObject

//声明一个字典,用来存储联系人

@property (nonatomic , retain) NSMutableDictionary *allPersonDic;

//初始化方法

- (id)initWithMutableDic:(NSMutableDictionary *)dic;

//声明方法,添加联系人

- (BOOL)addPerson:(Person *)aPerson;

//按照电话查找某个联系人

- (Person *)findPersonWithPhoneNumber:(NSString *)aPhoneNumber;

//按性别查找,并且排序

- (NSArray *)findPersonWithSex:(NSString *)sex;

//根据姓名,来修改联系人的信息

- (BOOL)changePersonWithName:(NSString *)name

phoneNumber:(NSString *)phoneNumber

sex:(NSString *)sex

age:(int)age;

//删除联系人

- (BOOL)deletePersonWithName:(NSString *)name;

//删除分组

- (BOOL)deleteGroupName:(NSString *)aGroupname;

//打印所有的人

- (void)showAll;

@end

AddressBook.m#import "AddressBook.h"

#import "NSString+Character.h"

@implementation AddressBook

- (id)initWithMutableDic:(NSMutableDictionary *)dic{

if (self = [super init]) {

_allPersonDic = dic;

}

return self;

}

- (void)dealloc{

[_allPersonDic release];

[super dealloc];

}

//实现添加联系人的方法

- (BOOL)addPerson:(Person *)aPerson{

//第一步,先判断名字和电话

if ((aPerson.name == nil || aPerson.phoneNumber == nil ) || ([aPerson.name isEqualToString:@""] || [aPerson.phoneNumber isEqualToString:@""])) {

NSLog(@"信息不完整,添加失败");

return NO;

}

//获取名字的首字母,并且大写。当作字典的key(键)

NSString *keyStr = [aPerson.name  uppercaseFirstLetter];

//通过键来查找数组

NSMutableArray *tempArray =    [_allPersonDic objectForKey:keyStr];

if (! tempArray) {

//给数组分配空间

tempArray = [[NSMutableArray alloc]init];

//创建键值对

[_allPersonDic setObject:tempArray forKey:keyStr];

}

//检查一下是否有重名的

for (int i = 0; i 

if ([aPerson.name isEqualToString:[tempArray[i] name]]) {

NSLog(@"有重名的,添加失败");

return NO;

}

}

//把联系人加进创建好的数组里面

[tempArray addObject:aPerson];

return YES;

}

//实现按照号码找人的方法

- (Person *)findPersonWithPhoneNumber:(NSString *)aPhoneNumber{

//第一步,把字典里面的键拿出来,通过键来取值

for (NSString *keyStr in _allPersonDic) {

//通过objectForKey: 这个方法,把字典里面的数组拿出来

NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr];

//遍历拿出来的数组,让数组里面每一个人的号码,和 形参的值进行比较。

for (Person *p in tempArray) {

if ([p.phoneNumber isEqualToString:aPhoneNumber]) {

NSLog(@"人找到了");

return p;

}

}

}

NSLog(@"没有找到该联系人");

return nil;

}

//实现方法

- (NSArray *)findPersonWithSex:(NSString *)sex{

//声明数组,用来储存性别相同的人

NSMutableArray *mutableArray = [[NSMutableArray alloc]init];

//然后再开始,遍历字典,拿到键值,遍历数组

for (NSString *keyStr in _allPersonDic) {

NSMutableArray *array = [_allPersonDic objectForKey:keyStr];

for (Person *person in array) {

//跟上一方法不同的地方

if ([person.gender isEqualToString:sex]) {

[mutableArray addObject:person];

}

}

}

[mutableArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

Person *per1 = (Person *)obj1;

Person *per2 = (Person *)obj2;

if ( per1.age  > per2.age ) {

return NSOrderedDescending;

}

else if (per1.age 

return NSOrderedAscending;

}

return NSOrderedSame;

}];

//  [mutableArray sortUsingSelector:@selector(compare:)];

return mutableArray;

}

//实现修改方法

- (BOOL)changePersonWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber sex:(NSString *)sex age:(int)age{

//第一步,先遍历

for (NSString *keyStr  in _allPersonDic) {

//通过key来取值

NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr];

//开始遍历数组

for (Person *person in tempArray) {

if ([person.name isEqualToString:name]) {

//找到人后,开始修改,把传进来的新的信息赋值给这个人

person.phoneNumber = phoneNumber;

person.gender = sex;

person.age = age;

NSLog(@"赋值成功");

return YES;

}

}

}

return NO;

}

- (BOOL)deletePersonWithName:(NSString *)name{

for (NSString *keyStr in _allPersonDic) {

NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr];

//遍历数组

for (Person *person in tempArray) {

if ([person.name isEqualToString:name]) {

[tempArray removeObject:person];

NSLog(@"找到要删除的人了");

//如果这个人,是分组里面最后一个,就把分组也删除

if ([tempArray count] == 0) {

//在字典里面删除键值对

[_allPersonDic removeObjectForKey:keyStr];

NSLog(@"数组已经被删除");

}

return YES;

}

}

}

NSLog(@"没有找到");

return NO;

}

//实现删除分组的方法

- (BOOL)deleteGroupName:(NSString *)aGroupname{

//先判断,有么有这个分组

for (NSString *keyStr in _allPersonDic) {

if ([keyStr isEqualToString:aGroupname]) {

//先通过传进来的键,来获取字典里面的值(数组)

NSMutableArray *tempArray = [_allPersonDic objectForKey:aGroupname];

//删完这个数组里面的所有元素

[tempArray removeAllObjects];

//删除字典里面的键值对,通过键来删除

[_allPersonDic removeObjectForKey:aGroupname];

NSLog(@"找到分组,删除成功");

return YES;

}

}

NSLog(@"没有这个分组");

return NO;

}

//打印所有人

- (void)showAll{

for (NSString *key in _allPersonDic) {

NSMutableArray *array = [_allPersonDic objectForKey:key];

for (Person *person in array) {

NSLog(@"%@" , person);

}

}

}

@end

NSString+Character.h#import 

@interface NSString (Character)

- (NSString *)uppercaseFirstLetter;

@end

NSString+Character.m@implementation NSString (Character)

- (NSString *)uppercaseFirstLetter{

return [[self uppercaseString] substringToIndex:1];

}

@end

main.m#import 

#import "Person.h"

#import "AddressBook.h"

int main(int argc, const char * argv[]) {

// 创建三个对象,就是三个人啊

Person *person = [[Person alloc]initWithPersonName:@"Auroua" age:21 gender:@"girl" phoneNumber:@"1352345678" groupName:@"friend"];

NSLog(@"%@" , person);

Person *person1 = [[Person alloc]initWithPersonName:@"Lily" age:18 gender:@"girl" phoneNumber:@"18638520107" groupName:@"firend"];

Person *person4 = [[Person alloc]initWithPersonName:@"DaShi" age:18 gender:@"boy" phoneNumber:@"110" groupName:@"fff"];

//声明完容器类之后,一定给它开辟空间。

AddressBook *addressBook = [[AddressBook alloc]initWithMutableDic:[NSMutableDictionary dictionary]];

//判断person对象是否加进字典里面

BOOL result = [addressBook addPerson:person];

NSLog(@"result = %@" , result ? @"YES" : @"NO" );

//判断person1对象是否加进字典里面

BOOL result1 = [addressBook addPerson:person1];

NSLog(@"result1 =%@" , result1 ? @"YES" : @"NO" );

//判断person11对象是否加进字典里面

BOOL result11 = [addressBook addPerson:person4];

NSLog(@"result11 =%@" , result11 ? @"YES" : @"NO" );

//查找联系人

Person *tempPerson = [addressBook findPersonWithPhoneNumber:@"18638520107"];

NSLog(@"%@" , tempPerson);

//接收排序结束后的数组

NSArray *array = [addressBook findPersonWithSex:@"girl"];

NSLog(@"排序后的结果");

for (Person *per in array) {

NSLog(@"%@" , per);

}

//改变联系人信息,判断是否改变成功

BOOL result2 = [addressBook changePersonWithName:@"Lily" phoneNumber:@"123" sex:@"boy" age:40];

NSLog(@"%@" , result2 ? @"YES" : @"NO");

//按名字删除一个联系人,删除了Lily

BOOL result3 = [addressBook deletePersonWithName:@"Lily"];

NSLog(@"%@" , result3 ? @"YES" : @"NO");

//刚刚删除了Lily,现在把Lily加进来

[addressBook addPerson:person1];

//删除某一个分组

BOOL result5 =   [addressBook deleteGroupName:@"D"];

NSLog(@"%@" , result5 ? @"YES" : @"NO");

//展示分组里面的所有的信息

[addressBook showAll];

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值