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 ...
随机推荐
- docker 换更优秀的 文件系统 比如 OverlayFS(centos7 overlay2)
内容摘自:http://www.projectatomic.io/blog/2015/06/notes-on-fedora-centos-and-docker-storage-drivers/ doc ...
- hdu1505
the main algorithm as the 1506 #include <stdio.h> #include <iostream> #include <strin ...
- tostring格式化输出
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...
- linux修改登陆后进入的默认目录
如将root登陆后进入的路径由/root改为/opt/FriendlyARM/linux/u-boot-mini6410修改/etc/pssswd 修改行 root:x:0:0:root:/root: ...
- 字符串匹配KMP算法
1. 字符串匹配的KMP算法 2. KMP算法详解 3. 从头到尾彻底理解KMP
- SQLServer中用户 'sa' 登录失败解决办法
今天下午,很奇怪的网站突然就打不开了,报错如下: “/”应用程序中的服务器错误. 用户 'sa' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...
- 在peopletools里面测试文件上传
Using the PeopleTools Test Utilities Page Select selectPeopleTools, then selectUtilities, then selec ...
- PHPExcel导出导入excel、csv等格式数据
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); //物资发料单明细 class Read_writ ...
- FaceBook微光闪烁---第三方开源--shimmer-android
Android上的微光闪烁shimmer效果,实现的手段不少,其中比较好的是facebook做的开源库:shimmer-android,其在github上的项目主页是:https://github.c ...
- PHP请求页面
< ?php $file_contents = file_get_contents('http://www.ccvita.com/'); echo $file_contents; ?> 有 ...