OC编写中级通讯录

来源:互联网 发布:java jar包日志输出 编辑:程序博客网 时间:2024/05/23 13:03

//

//  main.m

//  Contact

//  Created by  on 15/10/27.


#import <Foundation/Foundation.h>

#import "ContactManager.h"

 

int main(int argc, constchar * argv[]) {

 

    //创建联系人对象

    Contact *contact1 = [Contact contactWithName:@"zhao"gender:@"man" age:32 phoneNumber:@"110" groupNumber:@"Z"];

    Contact *contact2 = [Contact contactWithName:@"qian"gender:@"man" age:41 phoneNumber:@"120" groupNumber:@"Q"];

    Contact *contact3 = [Contact contactWithName:@"sun"gender:@"women" age:56 phoneNumber:@"119" groupNumber:@"S"];

    Contact *contact4 = [Contact contactWithName:@"li"gender:@"women" age:28 phoneNumber:@"10010" groupNumber:@"L"];

    Contact *contact5 = [Contact contactWithName:@"zhou"gender:@"man" age:62 phoneNumber:@"10086" groupNumber:@"Z"];

    Contact *contact6 = [Contact contactWithName:@"wu"gender:@"women" age:38 phoneNumber:@"12584" groupNumber:@"W"];

    //创建联系人管理类对象

    ContactManager *contactManager = [[ContactManageralloc] init];

    //添加联系人

    [contactManager addContact:contact1];

    [contactManager addContact:contact2];

    [contactManager addContact:contact3];

    [contactManager addContact:contact4];

    [contactManager addContact:contact5];

    [contactManager addContact:contact6];

 

    //显示所有联系人信息

    [contactManager displayAllContactInfo];

    NSLog(@"*+*+*+*+*+*+*+*+*+*+*+*+*");

   

    //根据group获取一组联系人, 按姓名升序

    NSArray *groupArray = [contactManager getContactForGroupName:@"Z"];

    NSLog(@"%@",groupArray);

    NSLog(@"*+*+*+*+*+*+*+*+*+*+*+*+*");

 

   

    //根据电话号码获取联系人

    Contact *contact = [contactManager getContactForPhoneName:@"10086"];

    NSLog(@"%@",contact);

    NSLog(@"*+*+*+*+*+*+*+*+*+*+*+*+*");

 

   

    //根据性别获取联系人, 按年龄降序

    NSArray *genderArray = [contactManager getContactForGender:@"women"];

    NSLog(@"%@",genderArray);

    NSLog(@"*+*+*+*+*+*+*+*+*+*+*+*+*");

 

   

    //删除指定姓名的联系人

    [contactManager removeContactForName:@"sun"];

    [contactManager displayAllContactInfo];

    NSLog(@"*+*+*+*+*+*+*+*+*+*+*+*+*");

 

   

    //删除指定分组联系人

    [contactManager removeContactForGroupName:@"Z"];

    [contactManager displayAllContactInfo];

  

   

    return 0;

}



第一个类

//

//  Contact.h

//  Contact

//

//  Created by  on 15/10/27.

//  Copyright (c) 2015年  . All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

@interface Contact : NSObject

@property (nonatomic,retain)NSString *name;//姓名

@property (nonatomic,retain)NSString *gender;//性别

@property (nonatomic,assign)NSInteger age;//年龄

@property (nonatomic,retain)NSString *phoneNumber;//电话号码

@property (nonatomic,retain)NSString *groupName;//分组号码

 

//自定义初始化

- (id)initWithName:(NSString*)name gender:(NSString *)gender age:(NSInteger)age phoneNumber:(NSString*)phoneNumber groupNumber:(NSString *)groupNumber;

 

//便利构造器

+ (id)contactWithName:(NSString*)name gender:(NSString *)gender age:(NSInteger)age phoneNumber:(NSString*)phoneNumber groupNumber:(NSString *)groupNumber;

 

//重定义description方法

- (NSString*)description;

@end


****************

//  Contact.m

//  Contact

//

//  Created by  on 15/10/27.

//  Copyright (c) 2015年   . All rights reserved.

//

 

#import "Contact.h"

 

@implementationContact

 

//自定义初始化

- (id)initWithName:(NSString*)name gender:(NSString *)gender age:(NSInteger)age phoneNumber:(NSString*)phoneNumber groupNumber:(NSString *)groupNumber {

    self = [super init];

    if (self) {

        _name = name;

        _gender = gender;

        _age = age;

        _phoneNumber = phoneNumber;

        _groupName =  groupNumber;

    }

    return self;

}

 

//便利构造器

+ (id)contactWithName:(NSString*)name gender:(NSString *)gender age:(NSInteger)age phoneNumber:(NSString*)phoneNumber groupNumber:(NSString *)groupNumber {

    Contact *contact = [[Contact alloc] initWithName:namegender:gender age:age phoneNumber:phoneNumber groupNumber:groupNumber];

    return contact;

}

 

//重定义description方法

- (NSString*)description {

    return [NSString stringWithFormat:@"%@,%@, %ld, %@, %@", _name, _gender, _age, _phoneNumber, _groupName];

}

@end



第二个类 

//

//  ContactManager.h

//  Contact

//

//  Created by  on 15/10/27.

//  Copyright (c) 2015年  . All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import "Contact.h"

 

@interfaceContactManager : NSObject

//这是一个联系人管理类, 主要用于联系人的增, 删, 改, 查等

 

//用于存储所有联系人的字典

@property (nonatomic,retain) NSMutableDictionary *contactDic;

//初始化方法

- (instancetype)init;

 

//添加联系人

- (void)addContact:(Contact*)contact;

 

//根据group获取一组联系人, 按姓名升序

- (NSArray*)getContactForGroupName:(NSString *)groupName;

 

//根据电话号码获取联系人

- (Contact*)getContactForPhoneName:(NSString *)phoneName;

 

//根据性别获取联系人, 按年龄降序

- (NSArray*)getContactForGender:(NSString *)gender;

 

//删除指定姓名的联系人

- (void)removeContactForName:(NSString*)name;

 

//删除指定分组联系人

- (void)removeContactForGroupName:(NSString*)groupName;

 

//显示所有联系人信息

- (void)displayAllContactInfo;

@end

 

*************************


//

//  ContactManager.m

//  Contact

//

//  Created by  on 15/10/27.

//  Copyright (c) 2015年 . All rights reserved.

//

 

#import "ContactManager.h"

 

@implementationContactManager

//初始化方法

- (instancetype)init{

    self = [super init];

    if (self) {

        _contactDic = [NSMutableDictionary dictionaryWithCapacity:1];

    }

    return self;

}

 

//添加联系人

- (void)addContact:(Contact*)contact {

    NSString *name = [contact name];

    NSString *phone = [contact phoneNumber];

    //判断联系人的姓名与电话是否为空

    if ([name isEqualToString:@""] ||[phone isEqualToString:@""] || name == nil || phone == nil) {

        //联系人的姓名或者电话为空

        NSLog(@"亲,你输入的电话不能存储噢!");

        return;

    }

    //联系人姓名和电话不为空

    //获取联系人对象所在分组

    NSString *group = [contact groupName];

    //获取分组下联系人对象数组

    NSMutableArray *contactArray = [_contactDicobjectForKey:group];

    //判断数组是否存在

    if (contactArray == nil) {

        //此时,数组为空

        //创建联系人数组

        contactArray = [NSMutableArray arrayWithCapacity:1];

        //数组创建成功,将联系人添加到数组

        [contactArray addObject:contact];

        //将数组添加到key值对应的分组中

        [_contactDic setObject:contactArray forKey:group];

    } else {

    //此时,数组已经存在,直接将联系人添加到数组中

    [contactArray addObject:contact];

    }

}

 

//根据group获取一组联系人, 按姓名升序

- (NSArray*)getContactForGroupName:(NSString *)groupName {

    //获取联系人数组对象

    NSMutableArray *contactArray = [_contactDicobjectForKey:groupName];

    //升序排序

    [contactArray sortUsingComparator:^NSComparisonResult(idobj1, id obj2) {

        Contact *contact1 = (Contact *)obj1;

        Contact *contact2 = (Contact *)obj2;

        return [[contact1 name] compare:[contact2name]];

 

    }];

    return contactArray;

}

 

//根据电话号码获取联系人

- (Contact*)getContactForPhoneName:(NSString *)phoneName {

    //遍历字典

    for (NSString *key in _contactDic) {

        //根据key 获取value

        NSMutableArray *contactArray =[_contactDic objectForKey:key];

        //遍历数组

        for (Contact *contact in contactArray){

            //判断是否是要找的联系人

            if ([[contact phoneNumber]isEqualToString:phoneName]) {

                return contact;

            }

        }

    }

    //没有找到联系人

    return nil;

}

 

//根据性别获取联系人, 按年龄降序

- (NSArray*)getContactForGender:(NSString *)gender {

    //创建一个数组用来存储同性别的联系人

    NSMutableArray *genderArray =[NSMutableArray arrayWithCapacity:1];

    //遍历字典

    for (NSString *key in _contactDic) {

        //根据key 获取value

        NSMutableArray *contactArray =[_contactDic objectForKey:key];

        //遍历数组

        for (Contact *contact in contactArray){

            //判断性别是否与要求相同

            if ([[contact gender]isEqualToString:gender]) {

                //性别与要求相同,存入genderArray

                [genderArrayaddObject:contact];

            }

        }

    }

    //按年龄降序

    [genderArraysortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

        Contact *contact1 = (Contact *)obj1;

        Contact *contact2 = (Contact *)obj2;

        return -[@([contact1 age]) compare:@([contact2age])];

    }];

    return genderArray;

}

 

//删除指定姓名的联系人

- (void)removeContactForName:(NSString*)name {

    //遍历字典

    for(NSString *key in _contactDic) {

        //根据key 获取value

        NSMutableArray *contactArray =[_contactDic objectForKey:key];

        //将原本传递给副本,在数组遍历时,遍历副本,修改原本(因为for in 循环中不能修改循环中的对象)

        NSMutableArray *array = [NSMutableArrayarrayWithArray:contactArray];

        //遍历数组

        for (Contact *contact in array) {

            //判断联系人是否符合要求

            if ([[contact name]isEqualToString:name]) {

                //符合要求,删除联系人

                [contactArrayremoveObject:contact];

            }

        }

    }

}

 

//删除指定分组联系人

- (void)removeContactForGroupName:(NSString*)groupName {

    [_contactDic removeObjectForKey:groupName];

}

 

//显示所有联系人信息

//显示所有联系人信息

- (void)displayAllContactInfo{

    //遍历字典

    for (NSString *key in _contactDic) {

        //根据key 获取value

        NSMutableArray *contactArray =[_contactDic objectForKey:key];

        //遍历数组

        for (Contact *contact in contactArray){

            //显示信息

            NSLog(@"%@, %@, %ld, %@,%@", [contact name], [contact gender], [contact age], [contactphoneNumber], [contact groupName]);

        }

 

    }

}

 

 

@end

 




0 0