//通过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循环");
}