实现中等难度通讯录。需求:

1、定义联系⼈人类Contact。实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写)、性别、电话号码、
住址、分组名称、年龄。⽅方法:⾃自定义初始化⽅方法(姓名、电话号码)、显⽰示联系⼈人信息


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


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


4、获取某个分组名称下所有联系⼈人,并且按照姓名升序排列。


5、从通讯录中根据电话号码搜索联系⼈人。


 6、获取所有⼥女性的联系⼈人,并且按照年龄的降序排列。


 7、根据姓名删除某个联系⼈人。


8、删除某个分组的全部联系⼈人。

Contact.h

#import

@interface Contact
: NSObject

@property (nonatomic, retain)NSString *name;

@property (nonatomic, assign)NSInteger age;

@property (nonatomic, retain)NSString *sex;

@property (nonatomic, retain)NSString *phoneNumber;

@property (nonatomic, retain)NSString *addr;

@property (nonatomic, retain)NSString *group;

- (id)initWithName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone;

+ (id)contactWithName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone

addr:(NSString *)addr;

- (NSComparisonResult)sortContactByAge:(Contact *)otherCont;

- (NSComparisonResult)sortContactByName:(Contact *)otherCont;

- (void)info;

@end


Contact.m

#import "Contact.h"

@implementation Contact

- (id)initWithName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone

{

self =
[super init];

if (self)
{

_name =
name;

_age = age;

_sex = sex;

_phoneNumber =
phone;

}

return self;

}

+ (id)contactWithName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone

addr:(NSString *)addr

{

Contact *con =
[[Contact alloc]initWithName:name age:age sex:sex phoneNumber:phone];

con.addr =
addr;

con.group =
[[con.]uppercaseString];

return con;

}

- (NSComparisonResult)sortContactByAge:(Contact *)otherCont

{

if (self.age >
otherCont.age) {

return NSOrderedDescending;

}

else if (self.age <
otherCont.age){

return NSOrderedAscending;

}

else

return NSOrderedSame;

}

- (NSComparisonResult)sortContactByName:(Contact *)otherCont

{

if ([self.name compare:otherCont.name]
> ) {

return NSOrderedAscending;

}

else if ([self.name compare:otherCont.name]
< ){

return NSOrderedDescending;

}

else

return NSOrderedSame;

}

- (void)info

{

NSLog(@"name:%@, age:%ld, sex:%@,
phone:%@, addr:%@, group:%@", _name, _age, _sex, _phoneNumber, _addr, _group);

}

@end


AddressBook.h

//

//  AddressBook.h

//  07_字典实现通讯录

//

//  Created by zhangzhipeng on 15/4/15.

//  Copyright (c) 2015年 www.lanou3g.com蓝欧3G.
All rights reserved.

//

#import

#import "Contact.h"

@interface AddressBook
: NSObject

@property (nonatomic, retain) NSMutableDictionary *conDic;

- (id)init;

- (void)addContactPersonName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone

addr:(NSString *)addr;

- (void)getAllContactByGroupAndSortByNameAsceding:(NSString*)group;

- (void)searchContactByPhoneNumber:(NSString *)phoneNumber;

- (void)getAllContactBySexAndSortByNameDescding:(NSString *)sex;

- (void)deleteContactByName:(NSString *)name;

- (void)deleteContactByGroup:(NSString *)group;

- (void)listAllContact;

@end


AddressBook.m

//

//  AddressBook.m

//  07_字典实现通讯录

//

//  Created by zhangzhipeng on 15/4/15.

//  Copyright (c) 2015年 www.lanou3g.com蓝欧3G.
All rights reserved.

//

#import "AddressBook.h"

@implementation AddressBook

- (id)init

{

self =
[super init];

if (self)
{

self.conDic =
[NSMutableDictionary dictionary];

}

return self;

}

- (void)addContactPersonName:(NSString *)name

age:(NSInteger)age

sex:(NSString *)sex

phoneNumber:(NSString *)phone

addr:(NSString *)addr

{

if (name
== nil ||
[name isEqualToString:@" "] || phone ==nil ||
[phone isEqualToString:@" "]) {

NSLog(@"增加联系人失败");

}

else

{

Contact *con =
[Contact contactWithName:name age:age sex:sex phoneNumber:phone addr:addr];

NSMutableArray *conArr
= [self.conDicvalueForKey:con.group];

if (conArr
== nil) {

conArr =
[NSMutableArray array];

[conArr addObject:con];

[self.conDic setObject:conArr forKey:con.group];

}

else{

[conArr addObject:con];

}

}

}

- (void)getAllContactByGroupAndSortByNameAsceding:(NSString*)group

{

NSMutableArray *mArr
= [self.conDic valueForKey:group];

[mArr sortUsingSelector:@selector(sortContactByName:)];

for (Contact *cont in mArr)
{

[cont info];

}

}

- (void)searchContactByPhoneNumber:(NSString *)phoneNumber

{

NSMutableArray *arrPhoneNumber
= [NSMutableArray array];

for (NSString *key in self.conDic)
{

NSMutableArray *mArr
= [self.conDic objectForKey:key];

for (Contact *cont in mArr)
{

if ([cont.phoneNumber isEqualToString:phoneNumber])
{

[arrPhoneNumber addObject:cont];

}

}

}

for (Contact *cont in arrPhoneNumber)
{

[cont info];

}

}

- (void)getAllContactBySexAndSortByNameDescding:(NSString *)sex

{

NSMutableArray *arrSex
= [NSMutableArray array];

for (NSString *key in self.conDic)
{

NSMutableArray *arr
= [self.conDic valueForKey:key];

for (Contact *cont in arr)
{

if ([cont.sex isEqualToString:sex])
{

[arrSex addObject:cont];

}

}

}

[arrSex sortUsingSelector:@selector(sortContactByAge:)];

for (Contact *cont in arrSex)
{

[cont info];

}

}

- (void)deleteContactByName:(NSString *)name

{

NSMutableArray *arrDelete
= [NSMutableArray array];

for ( NSString *key in self.conDic)
{

NSMutableArray *arr
= [self.conDic valueForKey:key];

for (Contact *cont in arr)
{

if ([cont.name isEqualToString:name])
{

[arrDelete addObject:cont];

}

}

[arr removeObjectsInArray:arrDelete];

}

}

- (void)deleteContactByGroup:(NSString *)group

{

[self.conDic removeObjectForKey:group];

}

- (void)listAllContact

{

for (NSString *key in self.conDic)
{

NSMutableArray *mArr
= [self.conDic valueForKey:key];

for (Contact *con in mArr)
{

[con info];

}

}

}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

OC语言实现中等难度通讯录的更多相关文章

  1. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  2. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  3. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

  4. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  5. OC语言前期准备

    OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...

  6. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  7. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  8. OC语言构造方法

    OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...

  9. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

随机推荐

  1. ACM 畅通工程2

    Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到 ...

  2. Node.js 流

    稳定性: 2 - 不稳定 流是一个抽象接口,在 Node 里被不同的对象实现.例如request to an HTTPserver 是流,stdout 是流.流是可读,可写,或者可读写.所有的流是 E ...

  3. Docker的Etcd项目

    etcd 是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目,在这一章里面,我们将介绍该项目的目标,安装和使用,以及实现的技术. Docker的etcd ...

  4. JavaScript 对象JavaScript 对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. 所有事物都是对象 JavaScript 提供多个内建对象,比如 String. ...

  5. Gradle 1.12用户指南翻译——第五十章. 依赖管理

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

  6. Android 性能优化(一)内存篇

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...

  7. proc文件系统探索 之 以数字命名的目录

    在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid.其内的目录和文件给出了一些关于该进程的信息. niutao@niutao-desktop:/proc/6584$ l ...

  8. Android ocr识别文字介绍(文字识别)

    最近在做身份证号码识别,在网上搜索的一番后发现目前开源的OCR中tesseract-ocr算是比较强大的了,它由HP于1985年到1995年间开发,后来由google直接负责,经过谷歌进一步开发后,目 ...

  9. android MultiDex multidex原理原理下遇见的N个深坑(二)

    android MultiDex 原理下遇见的N个深坑(二) 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑. 不了解的可以先看上篇文章:android MultiDex multi ...

  10. RunLoop总结:RunLoop的应用场景(三)

    今天要讲的RunLoop的应用场景可能太简单了,所以东西比较少.因为跟UITableView.UICollectionView等的滑动优化有关,就顺便总结一下会影响UITableView.UIColl ...