一.需求:
1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
3、可以添加联系⼈人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。
4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人,并且按照年龄的降序排列。
7、根据姓名删除某个联系人。
8、删除某个分组的全部联系人。
二.具体实现:
1.main.m文件:
#import <Foundation/Foundation.h>
#import "Contact.h"
int main(int argc, const char *argv[]) {
@autoreleasepool {
//创建字典
NSMutableDictionary *contactDic = [NSMutableDictionary dictionaryWithCapacity:0];
while (YES) {
NSLog(@"请输入对应的操作1(添加联系人), 2(获取某个分组下得联系人), 3(按电话查找), 4(获取女性联系人), 5(按姓名删除联系人), 6(按分区删除联系人)");
int number = 0;
scanf("%d", &number);
switch (number) {
case 1:
{
NSLog(@"请输入联系人姓名");
char name[20] = {0};
scanf("%s", name);
NSString *nameC = [NSString stringWithUTF8String:name];
NSLog(@"请输入联系人性别");
char gender[10] = {0};
scanf("%s", gender);
NSString *genderC = [NSString stringWithUTF8String:gender];
NSLog(@"请输入联系人电话");
char tel[12] = {0};
scanf("%s", tel);
NSString *telC = [NSString stringWithUTF8String:tel];
NSLog(@"请输入联系人地址");
char address[100] = {0};
scanf("%s", address);
NSString *addressC = [NSString stringWithUTF8String:address];
NSLog(@"请输入联系人年龄");
int age = 0;
scanf("%d", &age);
//获取姓名首字母
NSString *firstName = [nameC substringToIndex:1];
//将首字母大写
firstName = [firstName uppercaseString];
//判断电话或姓名是否为空
if ([nameC length] != 0 && [telC length] != 0) {
//创建联系人对象
Contact *contact = [[Contact alloc]initWithName:nameC gender:genderC telephone:telC address:addressC groupName:firstName age:age];
//获取字典中所有的键
NSArray *keys = [contactDic allKeys];
//判断是否存在对应的分区
if ([keys containsObject:firstName]) {
//去除该分区的联系人列表
NSMutableArray *contactList = [contactDic objectForKey:firstName];
[contactList addObject:contact];
}else {
//创建联系人列表
NSMutableArray*contactList = [NSMutableArray arrayWithCapacity:0];
[contactList addObject:contact];
[contactDic setObject:contactList forKey:firstName];
}
}
break;
}
case 2:
{
NSLog(@"请输入需要查找的分区名称");
char group[10] = {0};
scanf("%s", group);
NSString *groupC = [NSString stringWithUTF8String:group];
NSString *groupN = [groupC substringToIndex:1];
//首字母大写
groupN = [groupN uppercaseString];
//查找对应分区
NSMutableArray *contactList = [contactDic objectForKey:groupN];
//数组升序排序
for (int i =0; i < [contactList count] - 1;i++) {
for (int j =0; j < [contactList count] - i - 1; j++) {
Contact *con1 = [contactList objectAtIndex:j];
Contact *con2 = [contactList objectAtIndex:j + 1];
if ([[con1 name] compare:[con2name]] > 0) {
[contactList replaceObjectAtIndex:j withObject:con2];
[contactList replaceObjectAtIndex:j + 1 withObject:con1];
}
}
}
if ([contactList count] !=0) {
for (Contact*con in contactList) {
[con intruduction];
}
}else {
NSLog(@"对不起无此分区");
}
break;
}
case 3:
{
NSLog(@"请输入查找的联系人电话");
char tel[20] = {0};
scanf("%s", tel);
NSString *telC = [NSString stringWithUTF8String:tel];
for (NSString*key in contactDic) {
NSMutableArray *contactList = [contactDic objectForKey:key];
//遍历联系人列表
for (Contact*con in contactList) {
if ([[con telephone] isEqualToString:telC]) {
[con intruduction];
}
}
}
break;
}
case 4:
{
//定义数组存储所有女性联系人
NSMutableArray*contactF = [NSMutableArray arrayWithCapacity:0];
for (NSString*key in contactDic) {
NSMutableArray *contactList = [contactDic objectForKey:key];
//遍历联系人列表
for (Contact*con in contactList) {
if ([[con gender] isEqualToString:@"f"]) {
[contactF addObject:con];
}
}
}
//按照年龄降序排序
for (int i =0; i < [contactF count] - 1;i++) {
for (int j =0; j < [contactF count] - i - 1; j++) {
Contact *con1 = [contactF objectAtIndex:j];
Contact *con2 = [contactF objectAtIndex:j + 1];
if ([con1 age] < [con2 age]) {
[contactF replaceObjectAtIndex:j withObject:con2];
[contactF replaceObjectAtIndex:j + 1 withObject:con1];
}
}
}
break;
}
case 5:
{
NSLog(@"请输入需要删除的联系人姓名");
char name[20] = {0};
scanf("%s", name);
NSString *nameC = [NSString stringWithUTF8String:name];
//获取姓名首字母
NSString *firstName = [nameC substringFromIndex:1];
firstName = [firstName uppercaseString];
//获取对应的分区的联系人列表
NSMutableArray *contactList = [contactDic objectForKey:firstName];
NSMutableArray *tempA = [NSMutableArray arrayWithArray:contactList];
for (Contact*con in contactList) {
if ([[con name] isEqualToString:nameC]) {
[tempA removeObject:con];
}
}
//临时数组替换列表中数据
[contactList removeAllObjects];
if ([tempA count] != 0) {
[contactList addObjectsFromArray:tempA];
}else {
//如果对应分区无联系人此时删除对应分区
[contactDic removeObjectForKey:firstName];
}
break;
}
case 6:
{
NSLog(@"请输入需要删除的分区名称");
char group[10] = {0};
scanf("%s", group);
NSString *groupC = [NSString stringWithUTF8String:group];
//获取首字母
NSString *firstName = [groupC substringToIndex:1];
firstName = [firstName uppercaseString];
//删除对应分区
[contactDic removeObjectForKey:firstName];
break;
}
default:
break;
}
}
}
return 0;
}
2. Contact.h文件:
#import <Foundation/Foundation.h>
@interface Contact : NSObject
{
NSString *_name;
NSString *_gender;
NSString *_telephone;
NSString *_address;
NSString *_groupName;
NSInteger _age;
}
- (instancetype)initWithName:(NSString *)name
gender:(NSString *)gender
telephone:(NSString *)telephone
address:(NSString *)address
groupName:(NSString *)groupName
age:(NSInteger)age;
- (void)intruduction;
- (NSString *)name;
- (NSString *)telephone;
- (NSString *)gender;
- (NSInteger)age;
@end
3. Contact.m文件:
#import "Contact.h"
@implementation Contact
- (instancetype)initWithName:(NSString *)name
gender:(NSString *)gender
telephone:(NSString *)telephone
address:(NSString *)address
groupName:(NSString *)groupName
age:(NSInteger)age {
self = [super init];
if (self) {
_name = name;
_gender = gender;
_address = address;
_telephone = telephone;
_groupName = groupName;
_age = age;
}
return self;
}
- (void)intruduction {
NSLog(@"name:%@, gender:%@, age:%ld, telephone:%@", _name, _gender, _age, _telephone);
}
- (NSString *)name {
return _name;
}
- (NSString *)gender {
return _gender;
}
- (NSString *)telephone {
return _telephone;
}
- (NSInteger)age {
return _age;
}
@end
三.具体实现效果: