通讯录OC版

#import <Foundation/Foundation.h>
@class Person;

@interface AddressBook : NSObject

//属性创建通信录
@property(nonatomic,retain)NSMutableDictionary *addressBook;

//添加联系人
- (BOOL)addPerson:(Person *)aPerson;

//------删除联系人
//根据人名删除
- (BOOL)deletePersonWithName:(NSString*)personName;

//删除分组
- (BOOL)deleteGroup:(NSString *)gourpName;

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

//根据性别获取一组练习人并按年龄排序
- (NSArray *)findPersonWithSex:(NSString *)aSex;

//根据姓名修改联系人信息
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge;

//展示所有联系人
- (void)showAll;

@end

#import "AddressBook.h"
#import "Person.h"
#import "NSString+Characters.h"

@implementation AddressBook

- (void)dealloc {
[_addressBook release];
[super dealloc];
}

- (NSString *)description {
return [NSString stringWithFormat:@"%@",_addressBook];
}


#pragma mark ---初始化
- (instancetype)init {
if (self = [super init]) {
self.addressBook = [NSMutableDictionary dictionary];
}
return self;
}

#pragma mark 添加联系人
- (BOOL)addPerson:(Person *)aPerson {
//1.判断联系人姓名和电话是否为空
BOOL nameFlag = (aPerson.name == nil) || ([aPerson.name isEqualToString:@""]);
BOOL phoneNumFlag = (aPerson.phoneNum == nil) || ([aPerson.phoneNum isEqualToString:@""]);

if (!nameFlag && !phoneNumFlag) {
//如果都不为空
//获取分组首字母
NSString *firstChar = [aPerson.name uppercasePinYinFirstLetter];

//判断数组中是否有该Key值
if (self.addressBook[firstChar] == nil) {

//添加
NSMutableArray *tempArray = [NSMutableArray arrayWithObject:aPerson];
[self.addressBook setObject:tempArray forKey:firstChar];

} else {
//判断重名
for (Person *p in self.addressBook[firstChar]) {

if ([p.name isEqualToString:aPerson.name]) {
return NO;
}
}
[self.addressBook[firstChar] addObject:aPerson];
}
return YES;

} else {
//如果为空直接返回NO
return NO;
}
}

#pragma mark 根据人名删除联系人
- (BOOL)deletePersonWithName:(NSString*)personName {
//获取联系人分组
NSString *firstName = [personName uppercasePinYinFirstLetter];

if (self.addressBook[firstName] == nil) {
return NO;
} else {
NSArray *tempArr =[NSArray arrayWithArray:self.addressBook[firstName]];
BOOL reFlag = NO;
for (Person * p in tempArr) {
if ([p.name isEqualToString:personName]) {
[self.addressBook[firstName] removeObject:p];
reFlag = YES;
}
}
return reFlag;
}
}


#pragma mark 删除分组

- (BOOL)deleteGroup:(NSString *)gourpName {

if(self.addressBook[gourpName] == nil) {
return NO;
} else {
[self.addressBook[gourpName] removeAllObjects];
[self.addressBook removeObjectForKey:gourpName];
return YES;
}
}

#pragma mark 根据电话查找联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum {

for (NSString *key in self.addressBook) {
for (Person *p in self.addressBook[key]) {
if ([p.phoneNum isEqualToString:aPhoneNum]) {
return p;
}
}
}
return nil;
}

#pragma mark 根据性别查找练习人并排序
- (NSArray *)findPersonWithSex:(NSString *)aSex{
//数组(用来存放查找到的联系人)
NSMutableArray *tempArr =[NSMutableArray array];
//根据性别查找联系人
for (NSString *key in self.addressBook) {
for (Person *p in self.addressBook[key]) {
if ([p.sex isEqualToString:aSex]) {
[tempArr addObject:p];
}
}
}
//排序
[tempArr sortUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {

if (obj1.age > obj2.age) {
return NSOrderedDescending;
} else if (obj1.age == obj2.age) {
return NSOrderedSame;
} else {
return NSOrderedAscending;
}
}];
return tempArr;
}

#pragma mark 修改
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge {

//获取联系人分组
NSString *firstName = [name uppercasePinYinFirstLetter];
for (Person *p in self.addressBook[firstName]) {
if ([p.name isEqualToString:name]) {
p.age = aAge;
p.phoneNum = aNum;
p.sex = aSex;
return YES;
}
}
return NO;
}


#pragma mark 展示所有联系人
- (void)showAll {

for (NSString *key in self.addressBook) {
NSLog(@"%@",key);
for (Person *p in self.addressBook[key]) {
NSLog(@"%@",p);
}
}
}

@end

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *phoneNum;
@property (nonatomic,copy) NSString *sex;
@property (nonatomic,assign) NSUInteger age;

- (instancetype)initWithName:(NSString *)aName sex:(NSString*)aSex phoneNum:(NSString *)aPhoneNum age:(NSUInteger)aAge;

+ (Person *)personWithName:(NSString *)aName sex:(NSString*)aSex phoneNum:(NSString *)aPhoneNum age:(NSUInteger)aAge;

@end#import "Person.h"
#import "NSString+Characters.h"

@implementation Person

- (NSString *)description {

return [NSString stringWithFormat:@"name:%@ sex:%@ tel:%@ age:%lu",self.name,self.sex,self.phoneNum,(unsigned long)self.age];
}

- (void)dealloc {
[_name release];
[_phoneNum release];
[_sex release];
[super dealloc];
}

- (instancetype)initWithName:(NSString *)aName sex:(NSString*)aSex phoneNum:(NSString *)aPhoneNum age:(NSUInteger)aAge {

if (self = [super init]) {
self.name = aName;
self.sex = aSex;
self.phoneNum = aPhoneNum;
self.age = aAge;
}
return self;
}

+ (Person *)personWithName:(NSString *)aName sex:(NSString*)aSex phoneNum:(NSString *)aPhoneNum age:(NSUInteger)aAge {

Person * p = [[Person alloc] initWithName:aName sex:aSex phoneNum:aPhoneNum age:aAge];

return [p autorelease];
}

@end#import <Foundation/Foundation.h>

@interface NSString (Characters)

//讲汉字转换为拼音
- (NSString *)pinyinOfName;

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

@end
#import "NSString+Characters.h"

@implementation NSString (Characters)

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

CFRange range = CFRangeMake(0, 1);

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

return name;
}

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

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#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"

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

@autoreleasepool {

//创建联系人
Person *p1= [[Person alloc] initWithName:@"Lee" sex:@"n" phoneNum:@"123" age:10];
Person *p2= [[Person alloc] initWithName:@"Mee" sex:@"n" phoneNum:@"133" age:3];
Person *p3= [[Person alloc] initWithName:@"Lkk" sex:@"n" phoneNum:@"333" age:12];
Person *p4= [[Person alloc] initWithName:@"Lee" sex:@"8" phoneNum:@"123" age:10];

//初见通讯录
AddressBook *ab = [[AddressBook alloc] init];

//添加联系人
[ab addPerson:p1];
[ab addPerson:p2];
[ab addPerson:p3];
[ab addPerson:p4];


//根据姓名删除联系人
[ab deletePersonWithName:@"Lee"];

//删除分组
[ab deleteGroup:@"M"];
NSLog(@"-------------%@",ab.addressBook);

//根据电话查找联系人
NSLog(@"person : %@ ",[ab findPersonWithPhoneNum:@"123"]);

//根据性别查找联系人并排序
NSLog(@"%@",[ab findPersonWithSex:@"n"]);

//根据姓名修改联系人
[ab changePersonWithName:@"Lee" phoneNum:@"222" sex:@"m" age:22];
NSLog(@"-------------%@",ab.addressBook);

//显示所有人
[ab showAll];

}
return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值