题目要求 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>