要求描述:用OC语言完成简易通讯录(实现增删改查)功能.(注:使用MRC)

1.创建AddressBook类.

1)使用字典作为容器,字典的Key值为分组名(姓名首字母),value值为数组,数组中存放联系人(Person实例).(5分)

2)添加联系人.要求(20分)

a.判断姓名和电话不能为空否则添加失败.

b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:不能有 重名).

c.添加成功返回YES,姓名为空或者有重名的添加失败返回NO. d.数据使用Person存储.

e.方法:- (BOOL)addPerson:(Person *)aPerson;

3)按照姓名删除联系人.(15分)

a.方法:- (BOOL)deletePersonWithName:(NSString*)aPersonName; b.删除成功返回YES,否则返回NO;

4)删除一个分组.(10分)

a:方法:- (BOOL)deleteGroup:(NSString *)aGroupName;

b.删除成功返回YES,否则返回NO;

5)根据电话查找某个联系人.(10分)

a:方法:-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;

b:如果找到返回该联系人,否则返回nil.

6)根据性别查找联系人,并将查到的联系人按照姓名排序(15分) a:方法:-(NSArray *)findPersonsWithSex:(NSString *)aSex; b:查找到联系人放入数组,排序的时候使用block.

7)根据姓名,更改联系人信息.(10分)

a:方法:-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge; b:找到该联系人并修改该成功返回YES,否则返回NO

8)展示通讯录中的所有联系人(5分)

a:方法:-(void)showAll;

2.使用Person类.(属性:姓名,年龄,性别,电话)

1)重写description方法.(5分)

2)使用便利构造器.(5分)

一、main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) { @autoreleasepool { Person *p1 = [Person personWithName:@"Mike" phoneNum:@"" sex:@"m" age:];
Person *p2 = [Person personWithName:@"Joe" phoneNum:@"" sex:@"m" age:];
Person *p3 = [Person personWithName:@"Kitty" phoneNum:@"" sex:@"n" age:];
Person *p5 = [Person personWithName:@"Andy" phoneNum:@"" sex:@"n" age:]; AddressBook *a = [[AddressBook alloc] init];
// 添加联系人
BOOL b1 = [a addPerson:p1];
BOOL b2 = [a addPerson:p2];
BOOL b3 = [a addPerson:p3];
BOOL b6 = [a addPerson:p5];
NSLog(@"%d %d %d %d",b1,b2,b3,b6);
[a showAll];
// 按照姓名删除联系人
BOOL b4 = [a deletePersonWithName:@"Mike"];
NSLog(@"%d",b4);
// 删除一个分组
BOOL b5 = [a deleteGroup:@"J"];
NSLog(@"%d",b5);
// 根据电话查找某个联系人
Person *p4 = [a findPersonWithPhoneNum:@""];
NSLog(@"%@",p4);
// 根据性别查找某个联系人,并将查到的联系人按照姓名排序
NSArray *arr = [a findPersonWithSex:@"n"];
for (Person *tempPerson in arr) {
NSLog(@"----%@",tempPerson);
}
// 根据姓名,更改联系人信息
BOOL bb = [a changPersonWithName:@"Kitty" phoneNum:@"" sex:@"n" age:];
NSLog(@"%d",bb); NSLog(@"%@",a.addressBook); [a showAll];
[a autorelease];
} return ;
}

二、Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property (nonatomic,copy)NSString *name;
@property (nonatomic,copy)NSString *phoneNum;
@property (nonatomic,copy)NSString *sex;
@property (nonatomic,assign)NSUInteger age; // 初始化方法
- (instancetype)initWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge;
// 便利构造器
+ (instancetype)personWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge; @end

三、Person.m

#import "Person.h"

@implementation Person

// 初始化方法
- (instancetype)initWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge{ if (self = [super init]) {
self.name = name;
self.phoneNum = aNum;
self.sex = aSex;
self.age = aAge;
}
return self;
}
// 便利构造器
+ (instancetype)personWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge{ Person *p = [[Person alloc] initWithName:name phoneNum:aNum sex:aSex age:aAge];
return [p autorelease];
} // 重写description方法
- (NSString *)description{
return [NSString stringWithFormat:@"Name:%@ phoneNum:%@ sex:%@ age:%ld",self.name,self.phoneNum,self.sex,self.age];
}
@end

四、AddressBook.h

#import <Foundation/Foundation.h>
@class Person;
@interface AddressBook : NSObject
@property (nonatomic,retain)NSMutableDictionary *addressBook; // 获取首字母
- (NSString *)firstChar:(NSString *)str; // 添加联系人
- (BOOL)addPerson:(Person *)aPerson; // 按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString *)aPersonName; // 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName; // 根据电话朝找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum; // 根据性别查找某个联系人,并将查到的联系人按照姓名排序
- (NSArray *)findPersonWithSex:(NSString *)aSex; // 根据姓名,更改联系人信息
- (BOOL)changPersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge; // 展示所有联系人
- (void)showAll;
@end

五、AddressBook.m

#import "AddressBook.h"
#import "Person.h"
@implementation AddressBook
// 重写初始化方法
- (instancetype)init
{
self = [super init];
if (self) {
self.addressBook = [NSMutableDictionary dictionary];
}
return self;
} // 获取首字母
- (NSString *)firstChar:(NSString *)str{
return [str substringWithRange:NSMakeRange(, )];
} // 添加联系人
- (BOOL)addPerson:(Person *)aPerson{ BOOL flat = NO;
if (aPerson.name.length != ) {
if (aPerson.phoneNum.length != ) {
NSString *firstC = [self firstChar:aPerson.name];
if (self.addressBook[firstC] != nil) {
for (Person *tempPerson in self.addressBook[firstC]) {
if ([tempPerson.name isEqualToString:aPerson.name]) {
flat = NO;
break;
}else{
flat = YES;
}
}
if (flat == YES) {
[self.addressBook[firstC] addObject:aPerson];
}
}else{
NSMutableArray *tempArray = [NSMutableArray arrayWithObject:aPerson];
[self.addressBook setObject:tempArray forKey:firstC];
flat = YES;
}
}
}
return flat;
} // 按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString *)aPersonName{ BOOL flat = NO;
if (aPersonName.length != ) {
NSString *firstC = [self firstChar:aPersonName];
if (self.addressBook[firstC] != nil) {
for (Person *tempPerson in self.addressBook[firstC]) {
if ([tempPerson.name isEqualToString:aPersonName]) {
flat = YES;
if ([self.addressBook[firstC] count] == ) {
[self.addressBook removeObjectForKey:firstC];
}else{
[self.addressBook[firstC] removeObject:tempPerson];
}
}
}
}
}
return flat;
} // 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName{ BOOL flat = NO;
if (aGroupName.length != ) {
if (self.addressBook[aGroupName] != nil) {
for (NSString *tempKey in self.addressBook) {
if ([tempKey isEqualToString:aGroupName]) {
flat = YES;
[self.addressBook removeObjectForKey:tempKey];
break;
}
}
}
}
return flat;
} // 根据电话朝找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum{ if (aPhoneNum.length != ) {
BOOL flat = NO;
Person *p = [[Person alloc] init];
[p autorelease];
NSArray *allValue = [self.addressBook allValues];
if (allValue != nil) {
for (NSArray *tempArray in allValue) {
for (Person *tempPerson in tempArray) {
if ([tempPerson.phoneNum isEqualToString:aPhoneNum]) {
flat = YES;
p = tempPerson;
break;
}
}
}
if (flat == YES) {
return p;
}else{
return nil;
}
}else{
return nil;
}
}else{
return nil;
}
} // 根据性别查找某个联系人,并将查到的联系人按照姓名排序
- (NSArray *)findPersonWithSex:(NSString *)aSex{ if (aSex.length != ) {
BOOL flat = NO;
NSArray *allValue = [self.addressBook allValues];
NSMutableArray *receiveArray = [NSMutableArray array];
// [receiveArray autorelease];
if (allValue != nil) {
for (NSArray *tempArray in allValue) {
for (Person *tempPerson in tempArray) {
if ([aSex isEqualToString:tempPerson.sex]) {
flat = YES;
[receiveArray addObject:tempPerson];
}
}
}
if (flat == YES) {
NSSortDescriptor *arrayAsceding = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *reternArray = [receiveArray sortedArrayUsingDescriptors:@[arrayAsceding]];
return [reternArray autorelease];
}else{
return nil;
}
}else{
return nil;
}
}else{
return nil;
}
} // 根据姓名,更改联系人信息
- (BOOL)changPersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge{ BOOL flat = NO;
if (name.length != ) {
NSString *firstC = [self firstChar:name];
if (self.addressBook[firstC] != nil) {
for (Person *tempPerson in self.addressBook[firstC]) {
if ([tempPerson.name isEqualToString:name]) {
flat = YES;
tempPerson.phoneNum = aNum;
tempPerson.sex = aSex;
tempPerson.age = aAge;
break;
}
}
}
}
return flat;
} // 展示所有联系人
- (void)showAll{
for (NSString *tempKey in self.addressBook) {
for (Person *tempPerson in self.addressBook[tempKey]) {
NSLog(@"%@",tempPerson);
}
}
}

OC-通讯录的更多相关文章

  1. OC通讯录选择封装

    ContactsService.h代码 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> //block返回选 ...

  2. OC:通讯录实战

    实战(使用OC的知识制作一个简易通讯录) //语法糖.笑笑语法 // NSString * string = [NSString stringWithFormat:@"string" ...

  3. (一〇一)集成静态库RHAddressBook实现OC访问通讯录

    使用官方的AddressBook框架仅能使用C语言访问通讯录,十分不便,这里介绍集成第三方框架RHAddressBook的方法,该框架可以通过OC访问和操作通讯录. 该框架是一个静态库,集成比较复杂. ...

  4. OC语言实现中等难度通讯录

    实现中等难度通讯录.需求: 1.定义联系⼈人类Contact.实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写).性别.电话号码. 住址.分组名称.年龄.⽅方法:⾃自定义初始化⽅方法(姓名.电话号码).显⽰示 ...

  5. iOS通讯录整合,兼容iOS789写法,附demo

    苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化 ...

  6. iOS学习之Object-C语言简单的通讯录管理系统

    用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 *  需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...

  7. Swift 简单的通讯录

    Swift 通讯录实战 1.功能需求 整个项目由三个界面构成:首页面(全部联系人),添加联系人界面和联系人详情界面 整个项目使用纯代码编程 数据处理方面使用一个工具类,处理所有数据的增删改查. 首页由 ...

  8. OC Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  9. iOS 修改通讯录联系人地址(address)崩溃原因分析

    目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行 ...

  10. iOS通讯录(纯纯的干货)

    一.iOS8.0 1.访问用户通讯录的两个框架 (1)AddressBookUI.framework 提供了联系人列表界面.联系人详情界面.添加联系人界面等,一般用于选择联系人 (2)AddressB ...

随机推荐

  1. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  2. mem中需找特定字符

    memstr //find 'substr' from a fixed-length buffer //('full_data' will be treated as binary data buff ...

  3. maven auto-config 多环境自动打包

    摘自:http://doc.okbase.net/bjhecwq/archive/118121.html maven有许多优秀的插件,最近在研究打包中替换多重环境的配置,同事介绍使用阿里的auto-c ...

  4. my vimrc

    runtime! debian.vim "设置编码 ,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 ,ucs-bom,chinese "语言 ...

  5. Android IOS WebRTC 音视频开发总结(九)-- webrtc入门001

    下面这篇介绍webrtc的文章不错,我花了大半天翻译了一下. 翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 本文主要介绍webrtc的信令,stun ...

  6. 为什么for in循环不适合用于数组

    首先一点无关的,使用(var i in a) 而不是( i in a),除非你想创建全局变量. 第二点,for in 循环会忽略空的数组 var a = []; a[5] = 5; // Perfec ...

  7. C#中判断文件夹中存在某个txt文本

    strFileName="D:\\strarray.txt"; if (File.Exists(strFileName))//判断文件是否存在 { }

  8. 通过bind实现activity与service的交互

    先点bind按钮实现onCreate,在点击start给service传值(get方法) xml: <RelativeLayout xmlns:android="http://sche ...

  9. 编写高质量代码改善C#程序的157个建议

    1.使用StringBuilder或者使用string.Format("{0}{1}{2}{3}", a, b, c, d)拼接字符串. 2.使用默认转型方法,比如使用类型内置的P ...

  10. [FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?

    原文位於 http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/09/msdn_string_stringbuilder.aspx [FAQ]St ...