Objective—C通讯录简单编程(源码)
2016-02-27 12:27
260 查看
Objective—C通讯录简单编程(源码)
标签(空格分隔): 小练习1、准备步骤
建立两个类:Contact和TelBook2、在main函数中的源码和运行结果
main.m#import <Foundation/Foundation.h> #import "Contact.h" #import "TelBook.h" int main(int argc, const char * argv[]) { Contact *c1 = [[Contact alloc] initWithName:@"Mike" telNum:@"111111"]; Contact *c2 = [[Contact alloc] initWithName:@"Joe" telNum:@"222222"]; Contact *c3 = [[Contact alloc] initWithName:@"Kitty" telNum:@"333333"]; Contact *c4 = [[Contact alloc] initWithName:@"Miss" telNum:@"444444"]; // 通讯录 TelBook *tb = [[TelBook alloc] init]; // 添加联系人 [tb addContact:c1]; [tb addContact:c2]; [tb addContact:c3]; [tb addContact:c4]; NSLog(@"添加后的通讯录有:%@",tb.telDict); // 调用- (NSString *)description方法 // 查找 [tb selectContactWithName:@"Kitty"]; // 增加联系人 Contact *c5 = [[Contact alloc] initWithName:@"jone" telNum:@"555555"]; [tb addContact:c5]; NSLog(@"增加后的通讯录有:%@",tb.telDict); // 修改联系人 [tb updateContactWithName:@"Kitty" telNum:@"666666"]; NSLog(@"修改后的通讯录有:%@",tb.telDict); // 删除联系人 [tb deleteContactWithName:@"Mike"]; NSLog(@"删除后的通讯录有:%@",tb.telDict); return 0; }
运行结果
2016-02-27 16:14:29.606 TELBook[2047:179058] 添加后的通讯录有:{ J = ( "Joe : 222222" ); K = ( "Kitty : 333333" ); M = ( "Mike : 111111", "Miss : 444444" ); } 2016-02-27 16:14:29.607 TELBook[2047:179058] 查找的联系人是:Kitty : 333333 2016-02-27 16:14:29.607 TELBook[2047:179058] 增加后的通讯录有:{ J = ( "Joe : 222222", "jone : 555555" ); K = ( "Kitty : 333333" ); M = ( "Mike : 111111", "Miss : 444444" ); } 2016-02-27 16:14:29.607 TELBook[2047:179058] 修改后的通讯录有:{ J = ( "Joe : 222222", "jone : 555555" ); K = ( "Kitty : 666666" ); M = ( "Mike : 111111", "Miss : 444444" ); } 2016-02-27 16:14:29.608 TELBook[2047:179058] 删除后的通讯录有:{ J = ( "Joe : 222222", "jone : 555555" ); K = ( "Kitty : 666666" ); M = ( "Miss : 444444" ); } Program ended with exit code: 0
3、在Contact类中的源码
Contact.h#import <Foundation/Foundation.h> @interface Contact : NSObject // 属性 @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *telNum; // 初始化 - (instancetype)initWithName:(NSString *)name telNum:(NSString *)telNum; @end
Contact.m
#import "Contact.h" @implementation Contact // 初始化 - (instancetype)initWithName:(NSString *)name telNum:(NSString *)telNum { if (self = [super init]) { _name = name; _telNum = telNum; } return self; } // 重写父类方法 - (NSString *)description { return [NSString stringWithFormat:@"%@ : %@", _name,_telNum]; } @end
4、在TelBook类中的源码
TelBook.h#import <Foundation/Foundation.h> @class Contact; @interface TelBook : NSObject // 属性 @property (nonatomic, retain) NSMutableDictionary *telDict; // 增加 - (void)addContact:(Contact *)aContact; // 删除 - (void)deleteContactWithName:(NSString *)name; // 修改 - (void)updateContactWithName:(NSString *)name telNum:(NSString *)telNum; // 查找 - (void)selectContactWithName:(NSString *)name; // 获取首字母并大写 - (NSString *)getFirstCapitalLetter:(NSString *)str; @end
TelBook.m
#import "TelBook.h" #import "Contact.h" @implementation TelBook // 重写父类方法 - (instancetype)init { if (self = [super init]) { _telDict = [NSMutableDictionary dictionaryWithCapacity:10]; } return self; } // 获取首字母并大写 - (NSString *)getFirstCapitalLetter:(NSString *)str { NSString *firstChar = [[str substringWithRange:NSMakeRange(0, 1)] capitalizedString]; return firstChar; } // 增加 - (void)addContact:(Contact *)aContact { if (aContact.name.length != 0) { NSString *firstChar = [self getFirstCapitalLetter:aContact.name]; // 获取首字母并大写 if (_telDict[firstChar] != nil) { // 判断是否有该分组 [_telDict[firstChar] addObject:aContact]; // 如果有就直接添加 }else{ NSMutableArray *groupArr = [NSMutableArray arrayWithObject:aContact]; // 如果没有,创建分组 [_telDict setObject:groupArr forKey:firstChar]; // 将分组添加到字典中并且以firstChar作为key } }else{ NSLog(@"姓名不能为空!"); } } // 删除 - (void)deleteContactWithName:(NSString *)name { if (name.length != 0) { BOOL flag = NO; NSString *firstChar = [self getFirstCapitalLetter:name]; // 获取首字母并大写 if (_telDict[firstChar] != nil) { // 判断是否有该分组 for (Contact *c in _telDict[firstChar]) { // 遍历字典,用创建的联系人Contact对象进行接收 if ([c.name isEqualToString:name]) { // 判断是否包含所要删除的名字 flag = YES; if ([_telDict[firstChar] count] == 1) { // 判断以这个首字母开头的分组中是否只有一个联系人 [_telDict removeObjectForKey:firstChar]; // 如果只有一个,就删除这个首字母开头的分组 }else{ [_telDict[firstChar] removeObject:c]; // 否则删除这个联系人 break; } } } if (flag == NO) { // 上述判断中没有这个联系人 NSLog(@"没有该联系人,删除失败"); } }else{ NSLog(@"没有该联系人,删除失败"); } }else{ NSLog(@"姓名不能为空"); } } // 修改 - (void)updateContactWithName:(NSString *)name telNum:(NSString *)telNum { if (name.length != 0) { BOOL flag = NO; NSString *firstChar = [self getFirstCapitalLetter:name]; // 获取首字母并大写 if (_telDict[firstChar] != nil) { // 判断是否有该分组 for (Contact *c in _telDict[firstChar]) { // 遍历字典,用创建的联系人Contact对象进行接收 if ([c.name isEqualToString:name]) { // 判断是否包含所要删除的名字 flag = YES; c.telNum = telNum; // 如果有,就直接修改 } } if (flag == NO) { // 上述判断中没有这个联系人 NSLog(@"没有该联系人,无法修改"); } }else{ NSLog(@"没有该联系人,无法修改"); } }else{ NSLog(@"没有该联系人,无法修改"); } } // 查找 - (void)selectContactWithName:(NSString *)name { if (name.length != 0) { BOOL flag = NO; NSString *firstChar = [self getFirstCapitalLetter:name]; // 获取首字母并大写 if (_telDict[firstChar] != nil) { // 判断是否有该分组 // 遍历 for (Contact *c in _telDict[firstChar]) { // 遍历字典,用创建的联系人Contact对象进行接收 if ([c.name isEqualToString:name]) { flag = YES; NSLog(@"查找的联系人是:%@",c); // 如果有,就直接打印这个联系人 } } if (flag == NO) { // 上述判断中没有这个联系人 NSLog(@"没有该联系人!"); } }else{ NSLog(@"没有该联系人!"); } }else{ NSLog(@"姓名不能为空!"); } } @end
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- 浅析Ruby的源代码布局及其编程风格
- asp.net 抓取网页源码三种实现方法
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- jQuery源码分析之jQuery中的循环技巧详解
- 本人自用的global.js库源码分享
- java中原码、反码与补码的问题分析
- PHP网页游戏学习之Xnova(ogame)源码解读(六)
- C#获取网页HTML源码实例
- PHP网页游戏学习之Xnova(ogame)源码解读(八)
- PHP网页游戏学习之Xnova(ogame)源码解读(四)
- JS小游戏之极速快跑源码详解
- JS小游戏之象棋暗棋源码详解
- android源码探索之定制android关机界面的方法
- Android获取手机通讯录、sim卡联系人及调用拨号界面方法
- Android使用ContentResolver搜索手机通讯录的方法
- Android实现仿通讯录侧边栏滑动SiderBar效果代码
- 基于Android设计模式之--SDK源码之策略模式的详解
- Android游戏源码分享之2048