Contact.h
//
// Contact.h
// AddressBook
//
//
#import <Foundation/Foundation.h>
@interface Contact : NSObject
{
// 姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄
NSString *_name;
NSString *_gender;
NSString *_phoneNum;
NSString *_address;
NSString *_groupName;
NSInteger _age;
}
// 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
phoneNum:(NSString *)phoneNum;
- (instancetype)initWithName:(NSString *)name phoneNum:(NSString *)phoneNum
age:(NSInteger)age
gender:(NSString *)gender;
// 显示联系人信息
- (void)displayContact;
#pragma mark getter
- (NSString *)getName;
- (NSString *)getPhone;
- (NSString *)getGender;
- (NSInteger)getAge;
- (NSString *)getGroupName;
// 按照姓名升序排列
- (NSComparisonResult)compareWithName:(Contact *)contact;
//联系人按年龄比较
- (NSComparisonResult)compareByAge:(Contact *)contact;
@end
Contact.m
//
// Contact.m
// AddressBook
//
//
#import "Contact.h"
@implementation Contact
- (instancetype)initWithName:(NSString *)name
phoneNum:(NSString *)phoneNum {
self = [super init];
if (self) {
_name = name;
_phoneNum = phoneNum;
}
return self;
}
- (instancetype)initWithName:(NSString *)name
phoneNum:(NSString *)phoneNum
age:(NSInteger)age
gender:(NSString *)gender {
self = [self initWithName:name phoneNum:phoneNum];
if (self) {
_age = age;
_gender = gender;
_groupName = [_name.capitalizedString substringToIndex:1];
}
return self;
}
// 显示联系人信息
- (void)displayContact {
NSLog(@"name = %@, age = %ld, gender = %@, phoneNum = %@, address = %@", _name, _age, _gender, _phoneNum, _address);
}
#pragma mark getter
- (NSString *)getName {
return _name;
}
- (NSString *)getPhone {
return _phoneNum;
}
- (NSString *)getGender {
return _gender;
}
- (NSInteger)getAge {
return _age;
}
- (NSString *)getGroupName {
return _groupName;
}
// 按照姓名升序排列
- (NSComparisonResult)compareWithName:(Contact *)contact {
return [[self getName] compare:[contact getName]];
}
//联系人按年龄比较
- (NSComparisonResult)compareByAge:(Contact *)contact {
NSInteger myAge = [self getAge];
NSInteger otherAge = [contact getAge];
if (myAge > otherAge) {
return NSOrderedAscending;
}else if (myAge < otherAge){
return NSOrderedDescending;
}else {
return NSOrderedSame;
}
}
@end
AddressBook.h
//
// AddressBook.h
// AddressBook
//
//
#import <Foundation/Foundation.h>
#import "Contact.h"
@interface AddressBook : NSObject
{
// 管理所有的联系人
NSMutableDictionary *_allContactsDict;
}
// 添加联系人
- (void)addContact:(Contact *)contact;
// 显示所有联系人
- (void)displayAllContact;
// 根据分组名获取一组的联系人
- (NSArray *)contactsByGroupName:(NSString *)groupName;
//根据性别,获取联系人
- (NSArray *)contactsForSex:(NSString *)sex;
// 根据电话号码搜索联系人
- (Contact *)contactByPhoneNum:(NSString *)phoneNum;
// 根据姓名删除某个联系人
- (void)removeContact:(NSString *)name;
// 删除某个分组的联系人
- (void)removeContactByGroupName:(NSString *)groupName;
@end
AddressBook.m
//
// AddressBook.m
// AddressBook
//
//
#import "AddressBook.h"
@implementation AddressBook
- (instancetype)init {
self = [super init];
if (self) {
// 初始化字典
_allContactsDict = [NSMutableDictionary dictionary];
for (int i = 65; i < 91; i++) {
char c = i;
NSString *key = [NSString stringWithFormat:@"%c", c];
[_allContactsDict setObject:[NSMutableArray array] forKey:key];
}
}
return self;
}
// 添加联系人
- (void)addContact:(Contact *)contact {
if ([[contact getName] isEqualToString:@""] || [[contact getPhone] isEqualToString:@""]) {
NSLog(@"添加失败");
return;
}
NSString *groupName = [contact getGroupName];
// 把联系人添加到对应的数组中
[[_allContactsDict objectForKey:groupName] addObject:contact];
}
// 显示所有的联系人
- (void)displayAllContact {
NSArray *keyArray = [_allContactsDict allKeys];
keyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)];
for (NSString *key in keyArray) {
NSMutableArray *groupArray = [_allContactsDict objectForKey:key];
NSLog(@"----%@----", key);
for (Contact *contact in groupArray) {
// 显示联系人信息
[contact displayContact];
}
}
}
//根据性别,获取联系人
- (NSArray *)contactsForSex:(NSString *)sex {
NSMutableArray *result = [NSMutableArray array];
for (NSString *key in _allContactsDict) {
NSMutableArray *group = [_allContactsDict objectForKey:key];
for (Contact *contact in group) {
if ([[contact getGender] isEqualToString:sex]) {
[result addObject:contact];
}
}
}
[result sortUsingSelector:@selector(compareByAge:)];
return result;
}
// 根据分组名获取一组的联系人
- (NSArray *)contactsByGroupName:(NSString *)groupName {
NSMutableArray *groupArray = [_allContactsDict objectForKey:groupName];
[groupArray sortUsingSelector:@selector(compareWithName:)];
return groupArray;
}
// 根据电话号码搜索联系人
- (Contact *)contactByPhoneNum:(NSString *)phoneNum {
for (NSString *key in _allContactsDict) {
NSMutableArray *groupArray = [_allContactsDict objectForKey:key];
for (Contact *contact in groupArray) {
if ([[contact getPhone] isEqualToString:phoneNum]) {
return contact;
}
}
}
return nil;
}
- (void)removeContact:(NSString *)name {
NSString *groupName = [name.capitalizedString substringToIndex:1];
NSMutableArray *groupArray = [_allContactsDict objectForKey:groupName];
for (Contact *contact in groupArray) {
if ([[contact getName] isEqualToString:name]) {
[groupArray removeObject:contact];
[_allContactsDict setObject:groupArray forKey:groupName];
return;
}
}
}
// 删除某个分组的联系人
- (void)removeContactByGroupName:(NSString *)groupName {
[_allContactsDict removeObjectForKey:groupName];
}
@end
main.m
//
// main.m
// AddressBook
//
//
#import <Foundation/Foundation.h>
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建联系人
Contact *contact1 = [[Contact alloc] initWithName:@"cuicui" phoneNum:@"182****6188" age:18 gender:@"女"];
Contact *contact2 = [[Contact alloc] initWithName:@"yizhang" phoneNum:@"188****8888" age:16 gender:@"男"];
Contact *contact3 = [[Contact alloc] initWithName:@"junjun" phoneNum:@"157****8872" age:20 gender:@"男"];
Contact *contact4 = [[Contact alloc] initWithName:@"xiaojie" phoneNum:@"183****3553" age:17 gender:@"女"];
Contact *contact5 = [[Contact alloc] initWithName:@"haifeng" phoneNum:@"159****8525" age:24 gender:@"男"];
Contact *contact6 = [[Contact alloc] initWithName:@"shengsheng" phoneNum:@"18248112264" age:38 gender:@"男"];
// 创建通讯录对象
AddressBook *addressBook = [[AddressBook alloc] init];
// 添加联系人
[addressBook addContact:contact1];
[addressBook addContact:contact2];
[addressBook addContact:contact3];
[addressBook addContact:contact4];
[addressBook addContact:contact5];
[addressBook addContact:contact6];
// 显示所有的联系人
[addressBook displayAllContact];
NSLog(@"%@", [addressBook contactsByGroupName:@"Y"]);
Contact *contact = [addressBook contactByPhoneNum:@"18248112264"];
[contact displayContact];
[addressBook removeContact:@"shengsheng"];
[addressBook displayAllContact];
}
return 0;
}