OC-通讯录
要求描述:用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-通讯录的更多相关文章
- OC通讯录选择封装
ContactsService.h代码 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> //block返回选 ...
- OC:通讯录实战
实战(使用OC的知识制作一个简易通讯录) //语法糖.笑笑语法 // NSString * string = [NSString stringWithFormat:@"string" ...
- (一〇一)集成静态库RHAddressBook实现OC访问通讯录
使用官方的AddressBook框架仅能使用C语言访问通讯录,十分不便,这里介绍集成第三方框架RHAddressBook的方法,该框架可以通过OC访问和操作通讯录. 该框架是一个静态库,集成比较复杂. ...
- OC语言实现中等难度通讯录
实现中等难度通讯录.需求: 1.定义联系⼈人类Contact.实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写).性别.电话号码. 住址.分组名称.年龄.⽅方法:⾃自定义初始化⽅方法(姓名.电话号码).显⽰示 ...
- iOS通讯录整合,兼容iOS789写法,附demo
苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化 ...
- iOS学习之Object-C语言简单的通讯录管理系统
用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 * 需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...
- Swift 简单的通讯录
Swift 通讯录实战 1.功能需求 整个项目由三个界面构成:首页面(全部联系人),添加联系人界面和联系人详情界面 整个项目使用纯代码编程 数据处理方面使用一个工具类,处理所有数据的增删改查. 首页由 ...
- OC Foundation框架—集合
Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...
- iOS 修改通讯录联系人地址(address)崩溃原因分析
目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行 ...
- iOS通讯录(纯纯的干货)
一.iOS8.0 1.访问用户通讯录的两个框架 (1)AddressBookUI.framework 提供了联系人列表界面.联系人详情界面.添加联系人界面等,一般用于选择联系人 (2)AddressB ...
随机推荐
- HTML中解决双击会选中文本的问题
HTML中解决双击会选中文本的问题 <div unselectable="on" style="-moz-user-select:none;" onsel ...
- 【转】怎样提高VR渲染速度
怎样提高VR渲染速度分析!<经验之谈>!!!VR的基本渲染方法掌握起来并不难,但是最迫切需要解决的问题是VR的出图速度问题.动则需要数小时的渲染时间真的是很难以接受,我们从三个影响速度的参 ...
- vim的.vimrc文件设置
set nocompatibleset autowriteset autoreadset nobackupset noswapfile " --- syntax and indent --- ...
- sql关联excel查询
select * from 表名 where 字段名 in (SELECT excel列名 FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data S ...
- Linux下切换用户
0x01 使用命令[su username] 这种方法能切换普通用户和root用户 0x02 从普通用户切换到root用户,还可以使用命令[sudo su] 0x03 su 是switch user的 ...
- C/C++下Netbeans的配置
目录 目录1 1 netbeans开发环境搭建2 2 netbeans工程管理2 2.1 采用IDE自动生成Makefile2 3 netbeans工程配置2 3.1 编译工具链3 3.1.1 添加配 ...
- mq队列管理器命令
dspmq: 队列管理器显示 QMCIPSA-------队列管理器 runmqsc QMSAA 运行查找Q队列名 运行MQ命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名 ...
- Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.
Unable to add App ID because the '10' App ID limit in '7' days has been exceeded. 官方的原因是对bundle iden ...
- 【风马一族_C】c语言版,在2到n中寻找出所有的素数
#include <iostream> #include <stdio.h> #include <math.h> /* run this program using ...
- C#winform初试报表
步骤1.新建一个窗口,拖一个ReportViewer控件上去,设置该控件的Dock为Fill. 步骤2.添加一个报表文件,如:Report1.rdlc,设置其中的参数,这里设置的参数和下面的代码里面的 ...