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

⼀一、功能描述:

main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能 :

中.


话:456);

1).使用便利构造器创建四个Person类的实例(联系⼈人).

姓名:Lucy性别:女 电话:123年龄:21姓名:Joe性别:男 电话:456年龄:17姓名:Baby性别:女 电话:789年龄:27姓名:Linda性别:女 电话:000年龄:21

2).创建⼀一个AddressBook类的实例对象(通讯录). 3).使⽤用AddressBook类中定义的⽅方法实现:添加联系人,将四个联系⼈人添加到通讯录

4).使用AddressBook类中定义的⽅法实现:根据电话查找联系人,并打印(查找电

5).使用AddressBook类中定义的⽅法实现:根据性别查找联系人,并将查到的联系人

按照年龄升序排序,并打印(查找性别:⼥女)

6).使⽤AddressBook类中定义的方法实现:根据姓名,更改联系人信息.(修改Linda的 信息:性别:女 电话:012年龄:25)

7).使用AddressBook类中定义的方法实现:按照姓名删除联系人,并展⽰通信录中所 有人信息.(删除联系人:Baby)

8).使用AddressBook类中定义的方法实现:删除一个分组,并展⽰通信录中所有人信

息.(删除L组)所有联系⼈人信息。

9).使用AddressBook类中定义的方法实现:实现3~8之间每个功能后,输出通讯录中

⼆二、功能实现提⽰示:

1、功能⼀一 定义Person类

1)声明属性:姓名,年龄,性别,电话,分组。注:年龄是int类型,其余属性时NSString类型;分组是姓名首字母(大写),使用提供的类目:NSString+Characters中的方法获取。(3分)

2)重写description⽅方法,输出Person对象的信息。例如:“姓名:张三 性别:男 年龄:22电话:123456789”.(2分)

3)定义Person类的便利构造器⽅法,方法包含参数:姓名、年龄、性别、电话.(5分)

2、功能⼆二 定义AddressBook类.

1)声明属性:allPersonDic(字典类型)。使⽤用声明的字典作为容器,分组管理通讯录中 所有联系人;字典的Key值为分组名(姓名首字母,⼤写),value值为数组,数组中存放联系人(Person实例).(5分)

2)在AddressBook的初始化方法中,初始化allPersonDic。(5分)3)重写dealloc⽅法,在dealloc⽅法中实现AddressBook类的内存管理。(5分)

3、功能三 添加联系⼈.要求(15分)

不能有重名).

a.在AddressBook类中定义⽅法:
- (BOOL)addPerson:(Person*)aPerson;

b.判断姓名和电话不能为空否则添加失败. c.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人

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

4、功能四 根据电话查找某个联系人.(10分)

a:在AddressBook类中定义⽅方法:
-(Person*)findPersonWithPhoneNum:(NSString*)aPhoneNum;

b:如果找到返回该联系人,否则返回nil. c.忽略电话重复问题,只返回第一个查找到的联系人。

5、功能五

根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)a:在AddressBook类中定义方法:

-(NSArray*)findPersonsWithSex:(NSString*)aSex; b:查找到联系⼈人放⼊入数组,排序的时候使⽤用block.

6、功能六 根据姓名,更改联系人信息.(10分)

a:在AddressBook类中定义⽅方法:-(BOOL)changePersonWithName:(NSString*)name phoneNum:

(NSString*)aNum sex:(NSString*)aSex age:(NSUInteger) aAge; b:找到该联系人并修改该成功返回YES,否则返回NO

c.修改电话、性别、年龄,参数不能为空。

7、功能七 按照姓名删除联系人.(15分)

a.在AddressBook类中定义⽅方法:
- (BOOL)deletePersonWithName:(NSString*)aPersonName;

b.删除成功返回YES,否则返回NO; c.当删除联系人后分组为空时,需要删除该分组。

8、功能八 删除⼀个分组.(5分)

a.在AddressBook类中定义⽅方法:
- (BOOL)deleteGroup:(NSString*)aGroupName;

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

9、功能九 展⽰示通讯录中的所有联系人信息(5分)

a:在AddressBook类中定义方法:-(void)showAll;

b.通过重写description⽅法展⽰示联系人信息 。
#import <Foundation/Foundation.h>
#import "Person.h"
@interface AddressBook : NSObject
@property (nonatomic ,retain)NSMutableDictionary *allPersonDic;
- (instancetype)init;
// 添加联系人
- (BOOL)addPerson:(Person *)aPerson;
// 根据电话查找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
// 根据性别查找联系人,并将查到的联系人按照年龄升序排序
- (NSArray *)findPersonsWithSex:(NSString *)aSex;
// 根据姓名,更改联系人信息
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSInteger) aAge;
// 按照姓名删除联系⼈
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName;
// 展示通讯录中的所有联系人信息
- (void)showAll;
@end
-------------------------------------------------------------------------------
//  AddressBook.m
- (void)dealloc
{
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.allPersonDic = [NSMutableDictionary dictionary];
}
return self;
}
//添加新联系人
- (BOOL)addPerson:(Person *)aPerson
{
if (aPerson.name == nil ||aPerson.telephone == nil) {
NSLog(@"添加失败");
return NO;
}else
{
NSMutableArray *group = [_allPersonDic objectForKey:[aPerson GroupName]];
if (group.count > 0) {
[group addObject:aPerson];
}else
{
NSMutableArray *group = [NSMutableArray array];
[group addObject:aPerson];
[_allPersonDic setObject:group forKey:[aPerson GroupName]];
}
NSLog(@"添加成功");
return YES;
}
}
//根据电话查找某个联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
Person *p = nil;
for (NSString *key in _allPersonDic) {
NSArray *arr = [_allPersonDic objectForKey:key];
for (Person *p1 in arr) {
if ([p1.telephone isEqualToString:aPhoneNum]) {
p = p1;
}
}
}
return p;
}
//根据性别查找联系人,并将查到的联系人按照年龄升序排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex
{
NSMutableArray *arr = [NSMutableArray array];
for (NSString *key in _allPersonDic) {
NSArray *array = [_allPersonDic objectForKey:key];
for (Person *p1 in array) {
if ([p1.sex isEqualToString:aSex]) {
[arr addObject:p1];
}
}
}
if (arr != nil) {
[arr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Person *p1 = (Person *)obj1;
Person *p2 = (Person *)obj2;
if (p1.age > p2.age) {
return NSOrderedAscending;
}else if(p1.age < p2.age){
return NSOrderedDescending;
}else
{
return NSOrderedSame;
}
}];
}
return arr;
}
//根据姓名,更改联系⼈信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSInteger) aAge
{
Person *p1 = nil;
for (NSString *key in _allPersonDic) {
NSArray *arr = _allPersonDic[key];
for (Person *p in arr) {
if ([p.name isEqualToString:name]) {
p1 = p;
}
}
}
if (p1 != nil) {
[p1 setTelephone:aNum];
[p1 setSex:aSex];
[p1 setAge:aAge];
return YES;
}else
{
return NO;
}
}
//按照姓名删除联系⼈
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
Person *p1 = [[[Person alloc]init] autorelease];
for (NSString *key in _allPersonDic) {
NSArray *arr = _allPersonDic[key];
for (Person *p in arr) {
if ([p.name isEqualToString:aPersonName]) {
p1 = p;
}
}
}
NSMutableArray *value = [_allPersonDic objectForKey:p1.GroupName];
if (value.count > 1) {
[value removeObject:p1];
}else
{
[_allPersonDic removeObjectForKey:[p1 GroupName]];
}
NSLog(@"删除成功");
return YES;
}
//删除⼀个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
[_allPersonDic removeObjectForKey:aGroupName];
NSLog(@"删除成功");
return YES;
}
//展示通讯录中的所有联系人信息
-(void)showAll
{
NSLog(@"%@",_allPersonDic);
}

OC试题 ——通讯录(AddressBook)相关推荐

  1. 手机通讯录AddressBook的使用

    通过使用两个框架:AddressBook.framework和AddressBookUI.framework,我们可以在程序中访问并显示iPhone数据库中的联系人信息. 1.AddressBookU ...

  2. 基于C++实现(控制台+界面)通讯录管理系统【100010012】

    个人通讯录管理系统 问题描述: 主要内容: 个人通讯录是记录了同学(包含一起上学的学校名称).同事(包含共事的单位名称).朋友(包含认识的地点).亲戚(包含称呼)等与本人有关人员的数据集. 具体要求: ...

  3. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总...

    iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...

  4. 短信、邮件、通讯录、蓝牙、社交、Game Center、应用内购买、iClould、Passbook

    来源于:http://www.cocoachina.com/ios/20150129/11068.html iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会 ...

  5. 基于C++和QT实现的个人通讯录管理系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85722043 资源下载地址:https://download.csdn.net/downl ...

  6. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook详解

    代码改变世界 Posts - 69, Articles - 0, Comments - 812 Cnblogs Dashboard Login Home Contact Gallery RSS Ken ...

  7. iOS开发系列--通讯录、蓝牙、

    iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...

  8. 微信小程序查看通讯录 联系人

    通讯录 addressBook() {//通讯录操作 wx.chooseContact({ success: function (res) { // console.log(res, '成功回调') ...

  9. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总,icloudpassbook...

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  10. iOS通讯录,蓝牙,内购等开发系列

    –系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系 ...

最新文章

  1. 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
  2. IBatis.Net学习笔记六--再谈查询
  3. 30. 多线程编程之threading模块
  4. php ob静态缓存
  5. 工业工程专业C语言,工欲善其事必先利其器——工业工程课程设置及其核心专业课简介...
  6. python3.6字典有序_Python如何按值对字典进行排序?
  7. 字体类形:font-family, font-style
  8. 【Python】IDE环境Pycharm运行虚拟环境Django
  9. HTML5新特征、窍门和技术(16~20)
  10. Redis工作笔记-spring-data-redis的基本使用
  11. DAY3 scp,rsync,chmod,chown,setfacl
  12. python基础系列教程——python中的字符串和正则表达式全解
  13. eclipse导入javaWeb项目
  14. 苹果ipad怎么刷机_苹果手机:iOS12刷机iOS12正式版刷机教程
  15. webmax函数高级教程整理集2
  16. 帆软日期格式转换_FineReport中日期时间函数使用总结
  17. Samsung SENS R60plus
  18. matlab 空集判定,在使用matlab 符号运算中的solve函数时,为啥计算的结果是空集?该怎么办?...
  19. matlab 类型强制转换,关于数据类型强制转换的分析和应用
  20. 微软2016校园招聘4月在线笔试2-403 Forbidden

热门文章

  1. 阿里巴巴与山东省人民政府签署战略合作协议
  2. HTML5高级之position(定位)
  3. 装修行业怎么找精准客户?有那些获客渠道?
  4. 腾讯云认证考试考点列表有哪些?
  5. S32K144_新建KEIL工程
  6. Oracle 12c中的MGMTDB
  7. 赛前练习(百度之星资格赛及初赛真题+Codeforces(div2级别))
  8. 矩阵论极简笔记(1):如何降维度打击
  9. c语言电子表格复制数据错误循环冗余检查,xp系统提示“数据错误(循环冗余检查)”如何解决...
  10. 宿主机无法访问虚拟机web服务器,宿主机无法访问虚拟机中的docker容器怎么办_网站服务器运行维护,宿主机,虚拟机,docker...