main.m
<span style="font-size:14px;">#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p1 = [Person personWithName:@"路西" age:21 sex:@"nv" number:@"123"];
Person *p2 = [Person personWithName:@"Joe " age:17 sex:@"nan" number:@"456"];
Person *p3 = [Person personWithName:@"Baby" age:27 sex:@"nv" number:@"789"];
Person *p4 = [Person personWithName:@"Lind" age:21 sex:@"nv" number:@"000"];
AddressBook *manager = [[AddressBook alloc] init];
[manager addPerson:p1];
[manager addPerson:p2];
[manager addPerson:p3];
[manager addPerson:p4];
// [manager findPersonWithPhoneNum:@"456"];
// NSArray *sexArray = [manager findPersonsWithSex:@"nv"];
// for (Person *p in sexArray) {
// NSLog(@"%@",p);
// }
// [manager changePersonWithName:@"Lind" phoneNum:@"012" sex:@"nv" age:25];
[manager deletePersonWithName:@"Baby"];
[manager showAll];
// [manager deleteGroup:@"L"];
// [manager showAll];
[manager release];
}
return 0;
}</span><span style="font-size:18px;">
</span>
创建了person类
Person.h
#import <Foundation/Foundation.h>
#import "NSString+Characters.h"
@interface Person : NSObject
@property(nonatomic, retain)NSString *name;
@property(nonatomic, assign)int age;
@property(nonatomic, retain)NSString *sex;
@property(nonatomic, retain)NSString *number;
@property(nonatomic, retain)NSString *groupName;
// 自定义初始化
- (instancetype)initWithName:(NSString *)name
age:(int)age
sex:(NSString *)sex
number:(NSString *)number;
// 便利构造器
+ (instancetype)personWithName:(NSString *)name
age:(int)age
sex:(NSString *)sex
number:(NSString *)number;
// 获得英文分组名
- (NSString *)getGroupName:(Person *)p;
// 重写description
- (NSString *)description;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
[_name release];
[_groupName release];
[_sex release];
[_number release];
[super dealloc];
}
// 自定义初始化
- (instancetype)initWithName:(NSString *)name
age:(int)age
sex:(NSString *)sex
number:(NSString *)number
{
self = [super init];
if (self) {
self.name = name;
self.age = age;
self.sex = sex;
self.number = number;
}
return self;
}
// 便利构造器
+ (instancetype)personWithName:(NSString *)name
age:(int)age
sex:(NSString *)sex
number:(NSString *)number
{
Person *p = [[Person alloc] initWithName:name age:age sex:sex number:number];
return [p autorelease];
}
// 获得英文分组名
- (NSString *)getGroupName:(Person *)p
{
p.name = [p.name pinyinOfName];
p.groupName = [p.name uppercasePinYinFirstLetter];
return p.groupName;
}
// 重写description
- (NSString *)description
{
NSString *str = [NSString stringWithFormat:@"name:%@ age:%d sex:%@ number:%@",self.name,self.age,self.sex,self.number];
return str;
}
@end
创建AddressBook类 来管理联系人
AddressBook.h
#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:(int) aAge;
//按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName;
// 显示所有联系人
-(void)showAll;
@end
AddressBook.m
#import "AddressBook.h"
@implementation AddressBook
- (void)dealloc
{
[_allPersonDic release];
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.allPersonDic = [NSMutableDictionary dictionary];
}
return self;
}
// 添加联系人
- (BOOL)addPerson:(Person *)aPerson
{
if (aPerson.name == nil || aPerson.number == nil) {
NSLog(@"号码和姓名不能为空");
return NO;
}
NSString *groupName = [aPerson getGroupName:aPerson];
NSMutableArray *groupPerson = [self.allPersonDic objectForKey:groupName];
if (groupPerson == nil) {
groupPerson = [NSMutableArray array];
[groupPerson addObject:aPerson];
[self.allPersonDic setObject:groupPerson forKey:groupName];
}else{
[groupPerson addObject:aPerson];
}
return YES;
}
// 根据电话查找联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
// Person *person = [[Person alloc] init];
for (NSString *allkeys in self.allPersonDic) {
NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
for (Person *p in allPerson) {
if ([p.number isEqualToString:aPhoneNum]) {
NSLog(@"%@",p);
return p;
}
}
}
return nil;
}
// 根据性别查找联系人
-(NSArray *)findPersonsWithSex:(NSString *)aSex
{
NSMutableArray *sexArray = [NSMutableArray array];
for (NSString *allkeys in self.allPersonDic) {
NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
for (Person *p in allPerson) {
if ([p.sex isEqualToString:aSex]) {
[sexArray addObject:p];
}
}
}
NSComparisonResult (^block)(id obj1,id obj2) = ^NSComparisonResult(id obj1, id obj2){
Person *p1 = obj1;
Person *p2 = obj2;
if (p1.age > p2.age) {
return NSOrderedAscending;
}else if (p1.age == p2.age){
return NSOrderedSame;
}else{
return NSOrderedDescending;
}
};
[sexArray sortUsingComparator:block];
return sexArray;
}
// 根据姓名更改联系人信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:
(NSString *)aNum sex:(NSString *)aSex age:(int) aAge
{
for (NSString *allkeys in self.allPersonDic) {
NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
for (Person *p in allPerson) {
if ([p.name isEqualToString:name]) {
p.number =aNum;
p.sex = aSex;
p.age = aAge;
NSLog(@"%@",p);
return YES;
}
}
}
return NO;
}
//按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
for (NSString *allkeys in self.allPersonDic) {
NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
for (Person *p in allPerson) {
if ([p.name isEqualToString:aPersonName] && [allPerson count] == 1) {
[self.allPersonDic removeObjectForKey:allkeys];
return YES;
}
if ([p.name isEqualToString:aPersonName] && [allPerson count] > 1)
{
[allPerson removeObject:p];
return YES;
}
}
}
return NO;
}
// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
for (NSString *allkeys in self.allPersonDic) {
NSMutableArray *allPerson = [self.allPersonDic objectForKey:allkeys];
for (Person *p in allPerson) {
if ([p.groupName isEqualToString:aGroupName]) {
[self.allPersonDic removeObjectForKey:allkeys];
return YES;
}
}
}
return NO;
}
// 显示所有联系人
-(void)showAll
{
for (NSString *allkey in self.allPersonDic) {
NSLog(@"%@ = %@",allkey, [self.allPersonDic objectForKey:allkey]);
}
}
@end
创建一个NSString的类目,如果输入的姓名是汉字 自动转换为拼音, 并且能截取首字母作为分组名
NSString+Characters.h
#import <Foundation/Foundation.h>
@interface NSString (Characters)
//讲汉字转换为拼音
- (NSString *)pinyinOfName;
//汉字转换为拼音后,返回大写的首字母
- (NSString *)uppercasePinYinFirstLetter;
@end
NSString+Characters.m
#import "NSString+Characters.h"
@implementation NSString (Characters)
//讲汉字转换为拼音
- (NSString *)pinyinOfName
{
NSMutableString * name = [[[NSMutableString alloc] initWithString:self ] autorelease];
CFRange range = CFRangeMake(0, 2);
// 汉字转换为拼音,并去除音调
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
这样一个中等难度的通讯录就实现了.....