蓝欧iOS3G学院OC课后作业练习----实现中等难度通讯录

一.需求:

  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

三.具体实现效果: 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值