您的位置:首页 > 编程语言 > C语言/C++

用OC语言完成简易通讯录(实现增删改查)功能.

2015-08-13 19:34 555 查看
一、功能描述:

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之间每个功能后,输出通讯录中所有联系人信息


实现程序

这里写代码片
Person.h
#import <Foundation/Foundation.h>
#import "NSString+Characters.h"
@interface Person : NSObject
{
NSString *_name;
NSString *_gender;
NSString *_groupName;
NSString *_phoneNumber;
int      _age;

}
@property(nonatomic ,retain)NSString *name;
@property (nonatomic ,retain)NSString *gender;
@property(nonatomic , retain)NSString *groupName;
@property (nonatomic,assign)int age;
@property (nonatomic,retain)NSString *phoneNumber;
- (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age;
+ (id)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age;
- (NSString *)description;
//Person.m
#import "Person.h"

@implementation Person
- (id)initWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age{

self = [super init ];

if (self) {
_name =[name retain];
_gender = [gender retain];
_phoneNumber = [phoneNumber retain];
_age = age;
_groupName = [[name firstCharacterOfString]retain ];
}

return self;
}
+ (id)personWithName:(NSString *)name gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber age:(int)age{

Person * p= [[Person alloc]initWithName:name  gender:gender phoneNumber:phoneNumber age:age];

return [p autorelease];
}
- (NSString *)description{
return [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄:%d 电话:%@",_name,_gender,_age,_phoneNumber];
}

- (void)dealloc
{
[_name release];
[_gender release];
[_phoneNumber release];
[super dealloc];
NSLog(@"内存已释放");
}
@end
//AddressBook
#import <Foundation/Foundation.h>
@class Person ;
@interface AddressBook : NSObject
{
NSMutableDictionary *_allPersonDic;
}

@property(nonatomic,retain)NSMutableDictionary * allPersonDic;
- (BOOL)addPerson:(Person *)aPerson;
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
- (NSArray *)findPersonsWithSex:(NSString *)aSex;
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
- (BOOL)deleteGroup:(NSString *)aGroupName;
-(void)showAll;
@end
#import "AddressBook.h"
#import "Person.h"
@implementation AddressBook
- (id)init
{ self = [super init];
if (self) {
_allPersonDic = [[NSMutableDictionary alloc]init ];
}
return self ;
}

//添加联系人
- (BOOL)addPerson:(Person *)aPerson{
//如果姓名或电话为空返回NO
if ([aPerson name] == nil || [aPerson phoneNumber] == nil ) {
return NO;
}
NSMutableArray * oneGroup = [_allPersonDic  objectForKey:[aPerson groupName] ];
//如果姓名重复返回NO
for (Person * p  in oneGroup) {
if ([[p name] isEqualToString: [aPerson name]]) {
NSLog(@"请不要添加同姓名之人");
return NO;
}

}
//不存在创建分组后再存储
if (oneGroup  == nil) {
oneGroup = [NSMutableArray array ];
[oneGroup addObject:aPerson];
[_allPersonDic setObject:oneGroup forKey: [aPerson groupName]];

//判断是否已经存在分组,存在直接存储
}else{
[oneGroup  addObject:aPerson];
}

return YES;
}
//根据电话查找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{

for (NSString *groupName in _allPersonDic) {

NSMutableArray  * oneGroup = [_allPersonDic objectForKey:groupName];

for (Person * p in oneGroup) {
if ([[p phoneNumber] isEqualToString:aPhoneNum]) {

return p;
}

}

}
return nil;
}

//根据姓名,更改联系人信息
- (NSArray *)findPersonsWithSex:(NSString *)aSex{
NSMutableArray * searchArray =[NSMutableArray array ];

for (NSString *groupName in _allPersonDic) {
NSMutableArray *oneGroup = [_allPersonDic  objectForKey:groupName ];

for (Person * p  in oneGroup) {

if ([[p gender] isEqualToString:aSex]) {

[ searchArray addObject:p  ];

}
}

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

Person * p1 =(Person *)obj1;

Person * p2 =(Person *)obj2;

return [p1  age] >[p2  age];

}];

return searchArray;
}

//根据姓名,更改联系人
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge{

for (NSString *groupName in _allPersonDic) {
NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];
for (Person * p  in oneGroup) {
if ([[p name] isEqualToString:name]) {

p.phoneNumber   = aNum;
p.gender = aSex;
p.age =(int) aAge;

return YES;
}
}
}

return NO;

}

//按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName{

for (NSString * groupName in _allPersonDic) {
NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];
NSMutableArray * deleteArray =[NSMutableArray array ];
for (Person * p  in oneGroup) {

if ([[p  name ] isEqualToString :aPersonName ]) {

[deleteArray addObject:p];
}
}

[ oneGroup removeObjectsInArray:deleteArray];

if ( oneGroup.count == 0) {

//[oneGroup removeAllObjects];

[_allPersonDic removeObjectForKey: aPersonName];
return YES;
}

}
return NO;

}

//删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName{

for (NSString * groupName in _allPersonDic) {

if ( [ groupName isEqualToString:aGroupName ]) {

[_allPersonDic removeObjectForKey:aGroupName ];

return YES;

}

}
return NO;

}

- (void)showAll{
for (NSString * groupName in _allPersonDic) {
NSMutableArray *oneGroup = [_allPersonDic objectForKey:groupName];

for ( Person * p  in oneGroup) {

NSLog(@"%@",p);
}

}
}

- (void)dealloc
{  NSLog(@"内存释放");
[_allPersonDic release];
[super  dealloc ];
}
@end

//**NSString+Characters.m**
#import "NSString+Characters.h"

@implementation NSString (Characters)

//讲汉字转换为拼音
- (NSString *)pinyinOfString
{
NSMutableString * string = [[[NSMutableString alloc] initWithString:self ] autorelease];

CFRange range = CFRangeMake(0, [string length]);

// 汉字转换为拼音,并去除音调
if ( ! CFStringTransform((__bridge CFMutableStringRef) string, &range, kCFStringTransformMandarinLatin, NO) ||
! CFStringTransform((__bridge CFMutableStringRef) string, &range, kCFStringTransformStripDiacritics, NO)) {
return @"";
}

return string;
}

//汉字转换为拼音后,返回大写的首字母
- (NSString *)firstCharacterOfString
{

NSMutableString * first = [[[NSMutableString alloc] initWithString:[self substringWithRange:NSMakeRange(0, 1)]] autorelease];

CFRange range = CFRangeMake(0, 1);

// 汉字转换为拼音,并去除音调
if ( ! CFStringTransform((__bridge CFMutableStringRef) first, &range, kCFStringTransformMandarinLatin, NO) ||
! CFStringTransform((__bridge CFMutableStringRef) first, &range, kCFStringTransformStripDiacritics, NO)) {
return @"";
}

NSString * result;
result = [first substringWithRange:NSMakeRange(0, 1)];

return result.uppercaseString;
}
@end

//main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {

AddressBook * book = [[AddressBook alloc]init];

Person * p1 = [Person personWithName:@"Lucy" gender:@"女" phoneNumber:@"123" age:21];
Person * p2 = [Person personWithName:@"Joe" gender:@"男" phoneNumber:@"456" age:17];
Person * p3 = [Person personWithName:@"Baby" gender:@"女" phoneNumber:@"789" age:27];
Person * p4 = [Person personWithName:@"Linda" gender:@"女" phoneNumber:@"000" age:21];
Person * p5 = [Person personWithName:@"Lucy" gender:@"女" phoneNumber:@"123" age:17];

[book addPerson:p1];
[book addPerson:p2];
[book addPerson:p3];
[book addPerson:p4];
[book addPerson:p5];

[book showAll];

NSLog(@"========");

//查找电话:456 的联系人
Person *  p= [book findPersonWithPhoneNum:@"456"];
NSLog(@"%@",p);

NSLog(@"========");

//查找女联系人
NSArray *array2 = [book findPersonsWithSex:@"女"];
for (Person * p in array2) {
NSLog(@"%@",p);
}

NSLog(@"========");

//更改联系人信息
[book changePersonWithName:@"Linda" phoneNum:@"012" sex:@"女" age:25];

[book showAll];

NSLog(@"========");

//删除联系人
[book deletePersonWithName:@"Baby"];

[book showAll];

NSLog(@"========");

//删除分组
[book deleteGroup:@"L"];

[book showAll];

[book release];

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: