通讯录

来源:互联网 发布: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