通讯录
来源:互联网 发布:windows预览体验版 编辑:程序博客网 时间:2024/04/30 22:23
题目要求 OC上机考试试题 ————通讯录
要求描述:用OC语言完成简易通讯录(实现增删改查)功能.
(注:使用MRC)
一、功能描述:
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之间每个功能后,输出通讯录中所有联系人信息。
二、功能实现提示:
1、功能一
定义Person类
1)声明属性:姓名,年龄,性别,电话,分组。注:年龄是int类型,其余属性时NSString类型;分组是姓名首字母(大写),使用提供的类目:NSString+Characters中的方法获取。(3分)
2)重写description方法,输出Person对象的信息。例如: “姓名:张三 性别:男 年龄:22 电话:123456789”.(2分)
3)定义Person类的便利构造器方法,方法包含参数:姓名、年龄、性别、电话.(5分)
2、功能二
定义AddressBook类.1)声明属性:allPersonDic(字典类型)。使用声明的字典作为容器,分组管理通讯录中所有联系人;字典的Key值为分组名(姓名首字母,大写),value值为数组,数组中存放联系人(Person实例).(5分)
2)在AddressBook的初始化方法中,初始化allPersonDic。(5分)
3)重写dealloc方法,在dealloc方法中实现AddressBook类的内存管理。(5分)
3、功能三
添加联系人.要求(15分)
a.在AddressBook类中定义方法:
- (BOOL)addPerson:(Person *)aPerson;
b.判断姓名和电话不能为空否则添加失败.
c.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人不能有重名).
d.添加成功返回YES,姓名为空或者有重名的添加失败返回NO.
e.数据使用Person存储.
4、功能四
根据电话查找某个联系人.(10分)
a:在AddressBook类中定义方法:
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
b:如果找到返回该联系人,否则返回nil.
c.忽略电话重复问题,只返回第一个查找到的联系人。
5、功能五
根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)
a:在AddressBook类中定义方法:
-(NSArray *)findPersonsWithSex:(NSString *)aSex;
b:查找到联系人放入数组,排序的时候使用block.
6、功能六
根据姓名,更改联系人信息.(10分)
a:在AddressBook类中定义方法:
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
b:找到该联系人并修改该成功返回YES,否则返回NO
c.修改电话、性别、年龄,参数不能为空。
7、功能七
按照姓名删除联系人.(15分)
a.在AddressBook类中定义方法:
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
b.删除成功返回YES,否则返回NO;
c.当删除联系人后分组为空时,需要删除该分组。
8、功能八
删除一个分组.(5分)
a.在AddressBook类中定义方法:
- (BOOL)deleteGroup:(NSString *)aGroupName;
b.删除成功返回YES,否则返回NO;
9、功能九
展示通讯录中的所有联系人信息(5分)
a:在AddressBook类中定义方法:
-(void)showAll;
b.通过重写description方法展示联系人信息 。
<span style="font-size:18px;">//// main.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import <Foundation/Foundation.h>#import "Person.h"#import "AddessBook.h"#import "NSString+Charact.h"#import "NSDictionary+zhongwen.h"#import "NSArray+ShowChinese.h"int main(int argc, const char * argv[]) { @autoreleasepool { //创建实例对象 Person *p1 = [Person personWithName:@"Lucy" age:14 sex:@"女" phoneNum:@"123"]; Person *p2 = [Person personWithName:@"Linda" age:16 sex:@"女" phoneNum:@"456"]; Person *p3 = [Person personWithName:@"Yangying" age:25 sex:@"女" phoneNum:@"789"]; Person *p4 = [Person personWithName:@"Joe" age:23 sex:@"男" phoneNum:@"000"]; Person *p5 = [Person personWithName:@"Yang" age:24 sex:@"男" phoneNum:@"543"]; //创建字典 AddressBook *addressBook = [[AddressBook alloc]init]; //实现的功能 //1.添加联系人功能 [addressBook addPerson:p1]; [addressBook addPerson:p2]; [addressBook addPerson:p3]; [addressBook addPerson:p4]; [addressBook addPerson:p5]; //2.根据电话查找某个联系人 NSLog(@"%@",[addressBook findPersonWithPhoneNum:@"000"]); //3.根据性别查找联系人,并按照年龄升序排序 NSLog(@"%@",[addressBook findpersionWithSex:@"女"]); //4.根据姓名,更改联系人信息 [addressBook changeWithName:@"Joe" phoneNum:@"987" sex:@"女" age:23]; NSLog(@"%@",[addressBook findPersonWithPhoneNum:@"987"]); //5.根据姓名删除联系人 [addressBook deletePersonWithName:@"Yang"]; //6.删除一个分组 [addressBook deleteGroup:@"Y"]; //7.显示所有联系人的信息 [addressBook showAll]; } return 0;}</span>
<span style="font-size:18px;">//// Person.h// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject@property(nonatomic,retain)NSString *name,*sex,*phoneNum,*groupName;@property(nonatomic,assign)int age;//初始化方法-(instancetype)initWithName:(NSString *)name age:(int)age sex:(NSString*)sex phoneNum:(NSString *)phoneNum;//便利构造器+(id)personWithName:(NSString *)name age:(int)age sex:(NSString*)sex phoneNum:(NSString *)phoneNum;//按照年龄升序排序-(NSComparisonResult)sortBynameOrderedAscending:(Person *)person; @end</span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;">//// Person.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import "Person.h"#import "NSString+Charact.h"@implementation Person//dealloc方法-(void)dealloc{ [_name release]; [_sex release]; [_phoneNum release]; [super dealloc];}//重写description方法-(NSString *)description{ return [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄:%i 电话:%@ 分组:%@",_name,_sex,_age,_phoneNum,_groupName];}//初始化方法-(instancetype)initWithName:(NSString *)name age:(int)age sex:(NSString *)sex phoneNum:(NSString *)phoneNum { self = [super init]; if (self) { self.name = name; self.sex = sex; self.age = age; self.phoneNum = phoneNum; self.groupName = [self.name characterFromCapitalizedString]; } return self;}//便利构造器+(id)personWithName:(NSString *)name age:(int)age sex:(NSString *)sex phoneNum:(NSString *)phoneNum{ Person *person = [[Person alloc]initWithName:name age:age sex:sex phoneNum:phoneNum]; return person;}//按照年龄升序排序-(NSComparisonResult)sortBynameOrderedAscending:(Person *)person{ if (self.age < person.age) { return NSOrderedAscending; }else if (self.age > person.age){ return NSOrderedDescending; }else{ return NSOrderedSame; } return NSOrderedAscending;}@end</span>
<span style="font-size:18px;">//// AddessBook.h// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import <Foundation/Foundation.h>@class Person;@interface AddressBook : NSObject@property(nonatomic,retain)NSMutableDictionary *allPersonDic;+(AddressBook *)addressBook;-(instancetype)init;//实现的功能//1.添加联系人功能-(BOOL)addPerson:(Person *)aPerson;//2.根据电话查找某个联系人-(Person *)findPersonWithPhoneNum:(NSString*)aPhoneNum;//3.根据性别查找联系人,并按照年龄升序排序-(NSArray *)findpersionWithSex:(NSString *)aSex;//4.根据姓名,更改联系人信息-(BOOL)changeWithName:(NSString *)name phoneNum:(NSString *)aPhoneNum sex:(NSString *)aSex age:(int)aAge;//5.根据姓名删除联系人-(BOOL)deletePersonWithName:(NSString*)aPersonName;//6.删除一个分组-(BOOL)deleteGroup:(NSString*)aGroupName;//7.显示所有联系人的信息-(void)showAll;@end</span>
<span style="font-size:18px;">//// AddessBook.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import "AddessBook.h"#import "Person.h"#import "NSString+Charact.h"@implementation AddressBook//重写dealloc方法-(void)dealloc{ [_allPersonDic release]; [super dealloc];}//初始化字典-(instancetype)init{ self = [super init]; if (self) { _allPersonDic = [NSMutableDictionary dictionary]; } return self;}//字典便利构造器+(AddressBook *)addressBook{ return [[[AddressBook alloc]init]autorelease];}//实现的功能//1.添加联系人功能- (BOOL)addPerson:(Person *)aPerson{ BOOL isNameNull = aPerson.name == nil || [aPerson.name isEqualToString:@""]; BOOL isPhoneNull = aPerson.phoneNum == nil || [aPerson.phoneNum isEqualToString:@""]; BOOL isExitGroup = [[_allPersonDic allKeys] containsObject:[aPerson.name characterFromCapitalizedString]]; NSString *keyString = [aPerson.name characterFromCapitalizedString]; if (!isNameNull && !isPhoneNull && isExitGroup) { for (NSString *key in _allPersonDic) { NSMutableArray *array = _allPersonDic[key]; if ([key isEqualToString:keyString]) { for (Person *person in array) { if ([person.name isEqualToString:aPerson.name]) { NSLog(@"已经存在该联系人,添加失败"); return NO; } } // 要在外面添加,不要在枚举的时候添加。 [array addObject:aPerson];// NSLog(@"添加%@成功",aPerson.name); } } } else if (!isNameNull && !isPhoneNull) // 添加联系人组 { NSString *key = [aPerson.name characterFromCapitalizedString]; NSMutableArray *array = [NSMutableArray array]; [array addObject:aPerson]; [_allPersonDic setObject:array forKey:key]; return YES; } else{// NSLog(@"添加联系人失败"); return NO; } return NO;}//2.根据电话查找某个联系人-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum{ Person *p = nil; for (NSString *key in _allPersonDic) { if(_allPersonDic[key] != 0) { for (Person *person in _allPersonDic[key]) { if ([person.phoneNum isEqualToString:aPhoneNum]) { p = person; return person; } } } } // 提示作用 if (p == nil) { NSLog(@"没有该联系人"); } return p;}//3.根据性别查找联系人,并按照年龄升序排序-(NSArray *)findpersionWithSex:(NSString *)aSex{ NSMutableArray *array = [NSMutableArray array]; for (NSString *key in _allPersonDic) { if (_allPersonDic[key] != 0) { for (Person *person in _allPersonDic[key]) { if ([person.sex isEqualToString:aSex]) { [array addObject:person]; } } } } //排序 [array sortUsingSelector:@selector(sortBynameOrderedAscending:)]; return array;}//4.根据姓名,更改联系人信息-(BOOL)changeWithName:(NSString *)name phoneNum:(NSString *)aPhoneNum sex:(NSString *)aSex age:(int)aAge{ Person *p = nil; for (NSString *key in _allPersonDic) { if (_allPersonDic[key] != 0) { for (Person *person in _allPersonDic[key]) { if ([person.name isEqualToString:name]) { p = person; person.phoneNum = aPhoneNum; person.sex = aSex; person.age = aAge; return YES; } } } } if (p == nil) { return NO; } return YES;}//5.根据姓名删除联系人-(BOOL)deletePersonWithName:(NSString*)aPersonName{ NSMutableArray *array = nil; for (NSString *key in _allPersonDic) { // 把练习人所在的数组给拷贝一份,用于枚举 if (_allPersonDic[key] != 0) { for (Person *person in _allPersonDic[key]) { if ([person.name isEqualToString:aPersonName]) { array = [NSMutableArray arrayWithArray:_allPersonDic[key]]; } } } // 正确的删除联系人方式 for (Person *person in array) { if ([person.name isEqualToString:aPersonName]) { [_allPersonDic[key] removeObject:person]; NSLog(@"删除联系人%@成功", person.name); if ([_allPersonDic[key] count] == 0) { [_allPersonDic removeObjectForKey:key]; NSLog(@"删除分组成功"); } return YES; } } } NSLog(@"删除失败"); return NO;}//6.删除一个分组-(BOOL)deleteGroup:(NSString*)aGroupName{ [_allPersonDic removeObjectForKey:aGroupName]; return YES; }//7.显示所有联系人的信息-(void)showAll{ for (NSString *key in _allPersonDic) { NSLog(@"allPersonDic = %@",_allPersonDic[key]); }// NSLog(@"allPersonDic = %@",_allPersonDic); }@end</span>
<span style="font-size:18px;">//// NSString+Charact.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import "NSString+Charact.h"@implementation NSString (Charact)-(NSString *)characterFromCapitalizedString{ NSString *string = [self uppercaseString]; return [string substringToIndex:1];}@end</span>
<span style="font-size:18px;">//// NSArray+ShowChinese.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import "NSArray+ShowChinese.h"@implementation NSArray (ShowChinese)-(NSString *)descriptionWithLocale:(id)locale{ NSMutableString *str = [NSMutableString stringWithFormat:@"%lu (\n", (unsigned long)self.count]; for (id obj in self) { [str appendFormat:@"\t%@, \n", obj]; } [str appendString:@")"]; return str; }@end</span>
<span style="font-size:18px;">//// NSDictionary+zhongwen.m// Contact//// Created by lanou3g on 15/8/20.// Copyright (c) 2015年 df. All rights reserved.//#import "NSDictionary+zhongwen.h"@implementation NSDictionary (zhongwen)-(NSString *)descriptionWithLocale:(id)locale{ NSMutableString *str = [NSMutableString stringWithFormat:@"%lu (\n", (unsigned long)self.count]; for (id obj in self) { [str appendFormat:@"\t%@, \n", obj]; } [str appendString:@")"]; return str;}@end</span>
0 0
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- 通讯录
- Stringbuffer中的append的说法整理
- 43.用Block和协议对网络请求简单封装
- NYOJ 546 Divideing Jewels ( 背包+二进制优化)
- 深入理解可重入与线程安全
- CC2540/2541 : Change Advertising Data And Scan Response Without Rebooting.
- 通讯录
- 输出能被其它元素整除的数(2016)
- 猫猫学iOS 之CoreLocation指南针小应用
- 记录一些matlab中关于文件路径的操作
- 在做java 的web开发,为什么要使用框架
- iOS APP瘦身技巧之第三方SDK瘦身
- web form
- 开源的c/c++编译器 mingm 编译、执行一段简单的c/c++代码
- HDU 1026(优先队列+BFS+前驱记录)