通讯录



题目要求 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值