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循环");

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容