//
// 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