OC语言实现中等难度通讯录
实现中等难度通讯录。需求:
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语言实现中等难度通讯录的更多相关文章
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
- swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者
Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...
- OC语言前期准备
OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- OC语言@property @synthesize和id
OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...
- OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- OC语言类的本质和分类
OC语言类的深入和分类 一.分类 (一)分类的基本知识 概念:Category 分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...
随机推荐
- 转:函数signal()
from:http://blog.sina.com.cn/s/blog_4b226b92010119l5.html 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收 ...
- JAVA中的枚举类
某些情况下一个类的对象是有限而且固定的,例如性别就只有两个类(考虑大众情况).因此这种实例有限而且固定的类,java里面叫枚举类.枚举类的关键字是enum,一些基本的命名规则和文件命名等细节和一般的类 ...
- Docker的Fig 项目
在你的应用里面添加一个 fig.yml 文件,并指定一些简单的内容,执行 fig up 它就能帮你快速建立起一个容器 快速搭建基于 Docker 的隔离开发环境 使用 Dockerfile 文件指定你 ...
- 剑指Offer——知识点储备-常用算法
剑指Offer--知识点储备-常用算法 快速排序 注:若排序是有序的,采用快排,则退化为冒泡排序. 解决这个问题,采用两个选取基准的方法 (1)随机选取基数(在这个区间内随机取一个数) 出现的恶劣情况 ...
- Android TV开发总结(五)TV上屏幕适配总结
前言:前面几篇总结一些TV上的小Sample,开源到GitHub:https://github.com/hejunlin2013/TVSample, 点击链接,可以持续关注.今天总结下TV上屏幕适配. ...
- django-redis
linuxapt-get install redis-serverpip install django-redis vim /etc/redis/redis.conf maxmemory 20mb s ...
- android面试手册
1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚 ...
- Android之Animation动画的使用(一)
我们在使用一些控件时候,难免会设置一些进入和退出的动画效果,比如popupwindow.listview的item动画.按钮.图片等等,要使这些控件有动画效果,当然需要用到Animation了. 下面 ...
- Struts 1之DispatchAction
DispatchAction是struts 1 的内置通用分发器 import org.apache.struts.actions.DispatchAction; public class UserA ...
- 15 Actionbar的显示和隐藏
ActionBar 显示隐藏方法: 在布局文件中设置 theme主题 <?xml version="1.0" encoding="utf-8"?> ...