iOS开发通讯录实现(新手向系列,OC阶段)

//通过c,oc语言完成以下需求 需求:

//    1、定义联系类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄

//      方法: 定义初始化方法(姓名、电话号码)、显示联系人信息。

//    2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。

//    3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。

//    4、删除某个分组的全部联系人。

思路:  先拟定一个空的通讯录,当你需要输入一位联系人时,此时需要一个字典对应你的分组,字典key为你的分组名,value为一个存放这个分组的对象的数组.当再建立一个联系人的时候如果没有分组(if判断  取出所有key是否包含你要建立的对象的分组) 如果有,则加入该分组,如果没有,建立新的key(分组名)及value(新的数组存放该对象). 建立通讯录后,实现查看(遍历字典信息)和删除功能(查看是否有这个分组,然后执行删除)  整个过程建立一个界面,界面需要一直循环使用,直到选择退出.所以外层添加一个while死循环, 用退出 break结束.内部个个功能可以分别实现所以使用switch分支语句......下面是解题过程: (.h文件.m文件在前) 

  创建Contact类

Contact.h

//定义属性

@property(nonatomic, copy)NSString *name;

@property(nonatomic, copy)NSString *gender;

@property(nonatomic, copy)NSString *phoneNumber;

@property(nonatomic, copy)NSString *address;

@property(nonatomic, copy)NSString *groupName;

@property(nonatomic, assign)NSInteger age;

//初始化

- (instancetype)initWithName:(NSString *)name

Gender:(NSString *)gender

PhoneNumber:(NSString *)phoneNumber

Address:(NSString *)address

GroupName:(NSString *)groupName

Age:(NSInteger)age;

//便利构造器

+ (instancetype)contactWithName:(NSString *)name

Gender:(NSString *)gender

PhoneNumber:(NSString *)phoneNumber

Address:(NSString *)address

GroupName:(NSString *)groupName

Age:(NSInteger)age;

//自我介绍

- (void)introduce;


Contact.m



-(void)dealloc              //释放

{

[_name release];

[_gender release];

[_phoneNumber release];

[_address release];

[_gender release];

[super dealloc];

}

//初始化实现

-(instancetype)initWithName:(NSString *)name Gender:(NSString *)gender PhoneNumber:(NSString *)phoneNumber Address:(NSString *)address GroupName:(NSString *)groupName Age:(NSInteger)age

{

self = [super init];

if (self) {

_name = name;

_gender = gender;

_phoneNumber = phoneNumber;

_address = address;

_groupName = groupName;

_age = age;

}

return self;

}

//便利构造器实现

+(instancetype)contactWithName:(NSString *)name Gender:(NSString *)gender PhoneNumber:(NSString *)phoneNumber Address:(NSString *)address GroupName:(NSString *)groupName Age:(NSInteger)age

{

return [[[Contact alloc]initWithName:name Gender:gender PhoneNumber:phoneNumber Address:address GroupName:groupName Age:age]autorelease];

}

//自我介绍实现

-(void)introduce

{

NSLog(@"%@-%@-%@-%@-%@-%ld", _name, _gender, _phoneNumber, _address, _groupName, _age);

}


main.m

@autoreleasepool {              //自动释放池

//创建可变字典存放联系人:

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

NSInteger flag = 0;//循环控制

while (YES) {                   

printf("/---------------/\n");         //   构建简单界面

printf("/------菜单-----/\n");

printf("/-----1.添加----/\n");

printf("/-----2.查看----/\n");

printf("/-----3.删除----/\n");

printf("/-----0.退出----/\n");

printf("/---------------/\n");

//提示用户输入:

printf("请输入您想要的操作");

NSInteger number = 0;

scanf("%ld", &number);

switch (number) {

//添加练习人,创建联系对象:

case 1:

{

char name[30];//姓名

char gender[2];//性别

char phoneNumber[20];//电话

char address[50];//住址

char groupName[2];//分组

NSInteger age = 0;//年龄

printf("请输入一个联系人信息");

scanf("%s%s%s%s%s%ld", name, gender, phoneNumber, address, groupName, &age);

NSString *sc_name = [NSString stringWithUTF8String:name];

NSString *sc_gender = [NSString stringWithUTF8String:gender];

NSString *sc_phoneNumber = [NSString stringWithUTF8String:phoneNumber];

NSString *sc_address = [NSString stringWithUTF8String:address];

NSString *sc_groupName = [NSString stringWithUTF8String:groupName];

//根据输入信息创建联系人信息

Contact *c = [Contact contactWithName:sc_name Gender:sc_gender PhoneNumber:sc_phoneNumber Address:sc_address GroupName:sc_groupName Age:age];

//判断用户名和电话是否为空

if ([c.name isEqualToString:@""] || [c.phoneNumber isEqualToString:@""]) {

printf("用户名和电话不能为空!");

}

else

{

//判断字典里有没有当前练习人的分组:

if ([dic.allKeys containsObject:c.groupName]) {

//添加到对应数组里:

[[dic objectForKey:c.groupName] addObject:c];

}

else

{

//没有对应的key,需要创建

NSMutableArray *array = [NSMutableArray array];

//添加联系人到数组

[array addObject:c];

//将数组设置为c.groupName对应的value

[dic setObject:array forKey:c.groupName];

}

}

}

break;

//打印通讯录信息

case 2:

{

//遍历详细信息

for (NSString *key in dic) {

NSMutableArray *array = [dic objectForKey:key];

for (Contact *c in array) {

[c introduce];

}

}

}

break;

//按照给定分组删除某分组

case 3:

{

printf("请输入一个分组名(大写)");

char c_groupName = 0;

scanf("%c", &c_groupName);

NSString *sc_groupName = [NSString stringWithFormat:@"%c", c_groupName];

//判断字典里有没有这个分组

if ([dic.allKeys containsObject:sc_groupName]) {

//删除该分组

[dic removeObjectForKey:sc_groupName];

}

else{

printf("无此分组");

}

}

break;

case 0:{

//结束死循环

printf("谢谢使用");

flag = 1;

}

break;

default:

printf("你输入的操作有问题!!!");

break;

}

//判断标识符flag

if (flag == 0) {

continue;

}

else

{

break;

}

}

NSLog(@"结束了while循环");

}

你可能感兴趣的:(iOS开发通讯录实现(新手向系列,OC阶段))