用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);
实现程序:
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; }
相关文章推荐
- stm32编译前为什么要配置keil中C/C++中的define 和include Paths?
- c/c++里的 堆区 栈区 静态区 文字常量区 程序代码区
- C++ 友元(共享数据)
- C++创建于销毁对象
- [转]C/C++中的memset
- C++ 类 互相包含的问题研究
- C和C++格式化输入输出
- 基本排序算法之快速排序
- VS2010 C++ 学习笔记(三) 类和对象 访问限定符 String
- c语言捕捉异常
- 二叉树的C++实现
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- 【c++】字符串中找出最长的连续数字字符串
- c语言为什么要声明
- Minimum Transport Cost
- 黑马程序员———C语言———【函数指针、指针函数、野指针、内存管理、const关键字】
- C++ primer 【笔记】关联容器 set
- C/C++:内存字节对齐详解
- VS2010 C++ 学习笔记(二) 内存管理 new delete
- 【一】C++基于C的一些改变