实现中等通讯录(OC)
2015-11-13 16:53
281 查看
//实现中等难度通讯录。需求:
//1、定义联系⼈类Contact。实例变量:姓名(拼⾳音,首字母⼤大写)、性别、电话号码、 住址、分组名称、年龄。方法:⾃定义初始化方法(姓名、电话号码)、显示联系人信息
//2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
//3、可以添加联系⼈对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分 组。
//4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
//5、从通讯录中根据电话号码搜索联系人。
//6、获取所有⼥女性的联系人,并且按照年龄的降序排列。
//7、根据姓名删除某个联系人。 8、删除某个分组的全部联系人。
Person.h
//
// Person.h
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
NSString *_sex;
NSString *_address;
NSString *_tel;
NSString *_group;
NSInteger _age;
}
//初始化方法
-(instancetype)initWithName:(NSString *)name
sex:(NSString *)sex
address:(NSString *)address
tel:(NSString *)tel;
//setter
-(void)setName:(NSString *)name;
-(void)setSex:(NSString *)sex;
-(void)setAddress:(NSString *)address;
-(void)setTel:(NSString *)tel;
-(void)setGroup:(NSString *)group;
-(void)setAge:(NSInteger)age;
//getter
-(NSString *)name;
-(NSString *)sex;
-(NSString *)address;
-(NSString *)tel;
-(NSString *)group;
-(NSInteger )age;
//方法
//按姓名排序,得到分组下的联系人
-(NSComparisonResult)sortUsingName:(Person *)aperson;
Person.m
//
// Person.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import "Person.h"
@implementation Person
//初始化方法
-(instancetype)initWithName:(NSString *)name
sex:(NSString *)sex
address:(NSString *)address
tel:(NSString *)tel
{
if(self = [super init])
{
_name = name;
_sex = sex;
_address = address;
_tel = tel;
}
return self;
}
//setter
-(void)setName:(NSString *)name
{
_name = name;
}
-(void)setSex:(NSString *)sex;
{
_sex = sex;
}
-(void)setAddress:(NSString *)address
{
_address =address;
}
-(void)setTel:(NSString *)tel
{
_tel = tel;
}
-(void)setGroup:(NSString *)group
{
_group = group;
}
-(void)setAge:(NSInteger)age
{
_age = age;
}
//getter
-(NSString *)name
{
return _name;
}
-(NSString *)sex
{
return _sex;
}
-(NSString *)address
{
return _address;
}
-(NSString *)tel
{
return _tel;
}
-(NSString *)group
{
return _group;
}
-(NSInteger )age
{
return _age;
}
//重写父类的description方法 --->
- (NSString *)description
{
NSString *s = [[NSString alloc]initWithFormat:@"name:%@,sex:%@,address:%@,tel:%@,group:%@,age:%ld",_name,_sex,_address,_tel,_group,_age];
return s;
}
//方法
//按姓名排序,得到分组下的联系人
-(NSComparisonResult)sortUsingName:(Person *)aperson
{
//aperson 是我们外部传入的参数 [self name]是我们自身的
if([[self name] compare:[aperson name]]==NSOrderedSame){//aperson是传进来的参数
return NSOrderedSame;
}else if ([[self name]compare:[aperson name]]==NSOrderedDescending){//NSOrderedDescending 降序
return NSOrderedDescending;
}else {
return NSOrderedAscending;
}
}
@end
PhoneBook.h
//
// PhoneBook.h
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Person;
@interface PhoneBook : NSObject
{
//
NSMutableDictionary *_phoneBookDict;
}
-(instancetype)initWithPhoneBookDict:(NSMutableDictionary *)phoneBookDict;
//setter
-(void)setPhoneBookDict:(NSMutableDictionary *)phoneBookDict;
//getter
-(NSMutableDictionary *)phineBookDict;
//添加联系人
-(void)addPerson:(Person *)aperson;
//显示联系人
-(void)allShow;
//对姓名升序排列
-(void)sortByName:(Person *)aperson;
//根据电话号码搜索联系人
-(void)personByTel:(NSString *)tel;
//根据性别搜索联系人
-(void)personBySex:(NSString *)sex;
//根据姓名删除联系人
-(void)removePersonByName:(NSString *)name;
//删除某个分组
-(void)removeBygroup:(NSString *)group;
@end
PhoneBook.m
///
// PhoneBook.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import "PhoneBook.h"
#import "Person.h"
@implementation PhoneBook
//初始化
-(instancetype)initWithPhoneBookDict:(NSMutableDictionary *)phoneBookDict
{
if(self = [super init]){
_phoneBookDict = phoneBookDict;
}
return self;
}
//setter
-(void)setPhoneBookDict:(NSMutableDictionary *)phoneBookDict
{
_phoneBookDict = phoneBookDict;
}
//getter
-(NSMutableDictionary *)phineBookDict;
{
return _phoneBookDict;
}
//添加联系人
-(void)addPerson:(Person *)aperson
{
BOOL flag1 =[[aperson name] isEqualTo:nil];
BOOL flag2 = [[aperson tel] isEqualTo:nil];
if(flag1 || flag2){
NSLog(@"添加失败");
}else{
NSString *str = [aperson name];
//截取首字母
NSString *firstChar = [str substringWithRange:NSMakeRange(0, 1)];
if(![_phoneBookDict objectForKey:firstChar]){
//建立一个空的数组,装下联系人
NSMutableArray *arr = [NSMutableArray arrayWithObject:aperson];
//将我们数组名为firstChar的数组放到字典中
[_phoneBookDict setObject:arr forKey:firstChar];
}else{
//如果已经存在分组,将名字放到对应的数组当中
[[_phoneBookDict objectForKey:firstChar] addObject:aperson];
}
}
NSLog(@"添加成功!!");
}
//显示联系人
-(void)allShow
{
NSLog(@"显示联系人");
for (NSString *key in _phoneBookDict) {
NSLog(@"分组%@",key);
for (Person *p in [_phoneBookDict objectForKey:key]) {
NSLog(@"%@",p);
}
}
}
//对姓名升序排列
-(void)sortByName:(Person *)aperson;
{
NSLog(@"对姓名排序");
NSString *str= [aperson name];
//获取首字母
NSString *firstChar = [str substringWithRange:NSMakeRange(0, 1)];
[[_phoneBookDict objectForKey:firstChar] sortUsingSelector:@selector(sortUsingName:)];//这里的sortUsingName: 是一个方法名,不能写东西
for (str in [_phoneBookDict objectForKey:firstChar]) {
NSLog(@"姓名排序:%@",str);
}
}
//根据电话号码搜索联系人
-(void)personByTel:(NSString *)tel
{
NSLog(@"根据电话搜索联系人:%@",tel);
for (NSString *k in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:k]) {
if([p.tel isEqualToString:tel]){
NSLog(@"%@",p);
}
}
}
}
//根据性别搜索联系人
-(void)personBySex:(NSString *)sex
{
NSLog(@"根据性别搜索联系人:%@",sex);
for (NSString *k in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:k]) {
if([p.sex isEqualToString:sex]){
NSLog(@"%@",p);
}
}
}
}
//根据姓名删除联系人
-(void)removePersonByName:(NSString *)name
{
NSLog(@"根据姓名删除联系人:%@",name);
//这里
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];
Person *p1 = nil;
for (NSString *n in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:n]) {
if ([p.name isEqualToString:name]) {
arr = [_phoneBookDict objectForKey:n];
p1 = p;
}
}
}
[arr removeObject:p1];
}
//删除某个分组
-(void)removeBygroup:(NSString *)group
{
NSLog(@"删除%@分组",group);
[_phoneBookDict removeObjectForKey:group];
}
@end
main.m
//
// main.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
#import <Foundation/Foundation.h>
#import "Person.h"
#import "PhoneBook.h"
int main(int argc, const char * argv[]) {
Person *p1 = [[Person alloc]initWithName:@"zhangsan" sex:@"man" address:@"shandong" tel:@"1111111"];
Person *p2 = [[Person alloc]initWithName:@"lisi" sex:@"man" address:@"shandong" tel:@"2222222"];
Person *p3 = [[Person alloc]initWithName:@"wangwu" sex:@"man" address:@"shandong" tel:@"3333333"];
Person *p4 = [[Person alloc]initWithName:@"maliu" sex:@"man" address:@"shandong" tel:@"4444444"];
Person *p5 = [[Person alloc]initWithName:@"zhangsi" sex:@"man" address:@"shandong" tel:@"5555555"];
Person *p6 = [[Person alloc]initWithName:@"wangqi" sex:@"man" address:@"shandong" tel:@"6666666"];
//创建一个空的字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//初始化空字典
PhoneBook *phoneB = [[PhoneBook alloc]initWithPhoneBookDict:dict];
//添加联系人
[phoneB addPerson:p1];
[phoneB addPerson:p2];
[phoneB addPerson:p3];
[phoneB addPerson:p4];
[phoneB addPerson:p5];
[phoneB addPerson:p6];
//显示所有联系人
[phoneB allShow];
NSLog(@"------------------------------------------");
//对姓名进行排序
[phoneB sortByName:p1];
NSLog(@"------------------------------------------");
[phoneB personByTel:@"1111111"];
NSLog(@"------------------------------------------");
[phoneB personBySex:@"man"];
NSLog(@"------------------------------------------");
[phoneB removePersonByName:@"wangqi"];
NSLog(@"------------------------------------------");
[phoneB removeBygroup:@"m"];
NSLog(@"------------------------------------------");
[phoneB allShow];
return 0;
}
程序结果如下:
//1、定义联系⼈类Contact。实例变量:姓名(拼⾳音,首字母⼤大写)、性别、电话号码、 住址、分组名称、年龄。方法:⾃定义初始化方法(姓名、电话号码)、显示联系人信息
//2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
//3、可以添加联系⼈对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分 组。
//4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
//5、从通讯录中根据电话号码搜索联系人。
//6、获取所有⼥女性的联系人,并且按照年龄的降序排列。
//7、根据姓名删除某个联系人。 8、删除某个分组的全部联系人。
Person.h
//
// Person.h
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
NSString *_sex;
NSString *_address;
NSString *_tel;
NSString *_group;
NSInteger _age;
}
//初始化方法
-(instancetype)initWithName:(NSString *)name
sex:(NSString *)sex
address:(NSString *)address
tel:(NSString *)tel;
//setter
-(void)setName:(NSString *)name;
-(void)setSex:(NSString *)sex;
-(void)setAddress:(NSString *)address;
-(void)setTel:(NSString *)tel;
-(void)setGroup:(NSString *)group;
-(void)setAge:(NSInteger)age;
//getter
-(NSString *)name;
-(NSString *)sex;
-(NSString *)address;
-(NSString *)tel;
-(NSString *)group;
-(NSInteger )age;
//方法
//按姓名排序,得到分组下的联系人
-(NSComparisonResult)sortUsingName:(Person *)aperson;
Person.m
//
// Person.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import "Person.h"
@implementation Person
//初始化方法
-(instancetype)initWithName:(NSString *)name
sex:(NSString *)sex
address:(NSString *)address
tel:(NSString *)tel
{
if(self = [super init])
{
_name = name;
_sex = sex;
_address = address;
_tel = tel;
}
return self;
}
//setter
-(void)setName:(NSString *)name
{
_name = name;
}
-(void)setSex:(NSString *)sex;
{
_sex = sex;
}
-(void)setAddress:(NSString *)address
{
_address =address;
}
-(void)setTel:(NSString *)tel
{
_tel = tel;
}
-(void)setGroup:(NSString *)group
{
_group = group;
}
-(void)setAge:(NSInteger)age
{
_age = age;
}
//getter
-(NSString *)name
{
return _name;
}
-(NSString *)sex
{
return _sex;
}
-(NSString *)address
{
return _address;
}
-(NSString *)tel
{
return _tel;
}
-(NSString *)group
{
return _group;
}
-(NSInteger )age
{
return _age;
}
//重写父类的description方法 --->
- (NSString *)description
{
NSString *s = [[NSString alloc]initWithFormat:@"name:%@,sex:%@,address:%@,tel:%@,group:%@,age:%ld",_name,_sex,_address,_tel,_group,_age];
return s;
}
//方法
//按姓名排序,得到分组下的联系人
-(NSComparisonResult)sortUsingName:(Person *)aperson
{
//aperson 是我们外部传入的参数 [self name]是我们自身的
if([[self name] compare:[aperson name]]==NSOrderedSame){//aperson是传进来的参数
return NSOrderedSame;
}else if ([[self name]compare:[aperson name]]==NSOrderedDescending){//NSOrderedDescending 降序
return NSOrderedDescending;
}else {
return NSOrderedAscending;
}
}
@end
PhoneBook.h
//
// PhoneBook.h
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Person;
@interface PhoneBook : NSObject
{
//
NSMutableDictionary *_phoneBookDict;
}
-(instancetype)initWithPhoneBookDict:(NSMutableDictionary *)phoneBookDict;
//setter
-(void)setPhoneBookDict:(NSMutableDictionary *)phoneBookDict;
//getter
-(NSMutableDictionary *)phineBookDict;
//添加联系人
-(void)addPerson:(Person *)aperson;
//显示联系人
-(void)allShow;
//对姓名升序排列
-(void)sortByName:(Person *)aperson;
//根据电话号码搜索联系人
-(void)personByTel:(NSString *)tel;
//根据性别搜索联系人
-(void)personBySex:(NSString *)sex;
//根据姓名删除联系人
-(void)removePersonByName:(NSString *)name;
//删除某个分组
-(void)removeBygroup:(NSString *)group;
@end
PhoneBook.m
///
// PhoneBook.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
//
#import "PhoneBook.h"
#import "Person.h"
@implementation PhoneBook
//初始化
-(instancetype)initWithPhoneBookDict:(NSMutableDictionary *)phoneBookDict
{
if(self = [super init]){
_phoneBookDict = phoneBookDict;
}
return self;
}
//setter
-(void)setPhoneBookDict:(NSMutableDictionary *)phoneBookDict
{
_phoneBookDict = phoneBookDict;
}
//getter
-(NSMutableDictionary *)phineBookDict;
{
return _phoneBookDict;
}
//添加联系人
-(void)addPerson:(Person *)aperson
{
BOOL flag1 =[[aperson name] isEqualTo:nil];
BOOL flag2 = [[aperson tel] isEqualTo:nil];
if(flag1 || flag2){
NSLog(@"添加失败");
}else{
NSString *str = [aperson name];
//截取首字母
NSString *firstChar = [str substringWithRange:NSMakeRange(0, 1)];
if(![_phoneBookDict objectForKey:firstChar]){
//建立一个空的数组,装下联系人
NSMutableArray *arr = [NSMutableArray arrayWithObject:aperson];
//将我们数组名为firstChar的数组放到字典中
[_phoneBookDict setObject:arr forKey:firstChar];
}else{
//如果已经存在分组,将名字放到对应的数组当中
[[_phoneBookDict objectForKey:firstChar] addObject:aperson];
}
}
NSLog(@"添加成功!!");
}
//显示联系人
-(void)allShow
{
NSLog(@"显示联系人");
for (NSString *key in _phoneBookDict) {
NSLog(@"分组%@",key);
for (Person *p in [_phoneBookDict objectForKey:key]) {
NSLog(@"%@",p);
}
}
}
//对姓名升序排列
-(void)sortByName:(Person *)aperson;
{
NSLog(@"对姓名排序");
NSString *str= [aperson name];
//获取首字母
NSString *firstChar = [str substringWithRange:NSMakeRange(0, 1)];
[[_phoneBookDict objectForKey:firstChar] sortUsingSelector:@selector(sortUsingName:)];//这里的sortUsingName: 是一个方法名,不能写东西
for (str in [_phoneBookDict objectForKey:firstChar]) {
NSLog(@"姓名排序:%@",str);
}
}
//根据电话号码搜索联系人
-(void)personByTel:(NSString *)tel
{
NSLog(@"根据电话搜索联系人:%@",tel);
for (NSString *k in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:k]) {
if([p.tel isEqualToString:tel]){
NSLog(@"%@",p);
}
}
}
}
//根据性别搜索联系人
-(void)personBySex:(NSString *)sex
{
NSLog(@"根据性别搜索联系人:%@",sex);
for (NSString *k in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:k]) {
if([p.sex isEqualToString:sex]){
NSLog(@"%@",p);
}
}
}
}
//根据姓名删除联系人
-(void)removePersonByName:(NSString *)name
{
NSLog(@"根据姓名删除联系人:%@",name);
//这里
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];
Person *p1 = nil;
for (NSString *n in _phoneBookDict) {
for (Person *p in [_phoneBookDict objectForKey:n]) {
if ([p.name isEqualToString:name]) {
arr = [_phoneBookDict objectForKey:n];
p1 = p;
}
}
}
[arr removeObject:p1];
}
//删除某个分组
-(void)removeBygroup:(NSString *)group
{
NSLog(@"删除%@分组",group);
[_phoneBookDict removeObjectForKey:group];
}
@end
main.m
//
// main.m
// 中级通讯录(OC版)
//
// Created by lanou3g on 15/11/12.
// Copyright (c) 2015年 SH. All rights reserved.
#import <Foundation/Foundation.h>
#import "Person.h"
#import "PhoneBook.h"
int main(int argc, const char * argv[]) {
Person *p1 = [[Person alloc]initWithName:@"zhangsan" sex:@"man" address:@"shandong" tel:@"1111111"];
Person *p2 = [[Person alloc]initWithName:@"lisi" sex:@"man" address:@"shandong" tel:@"2222222"];
Person *p3 = [[Person alloc]initWithName:@"wangwu" sex:@"man" address:@"shandong" tel:@"3333333"];
Person *p4 = [[Person alloc]initWithName:@"maliu" sex:@"man" address:@"shandong" tel:@"4444444"];
Person *p5 = [[Person alloc]initWithName:@"zhangsi" sex:@"man" address:@"shandong" tel:@"5555555"];
Person *p6 = [[Person alloc]initWithName:@"wangqi" sex:@"man" address:@"shandong" tel:@"6666666"];
//创建一个空的字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//初始化空字典
PhoneBook *phoneB = [[PhoneBook alloc]initWithPhoneBookDict:dict];
//添加联系人
[phoneB addPerson:p1];
[phoneB addPerson:p2];
[phoneB addPerson:p3];
[phoneB addPerson:p4];
[phoneB addPerson:p5];
[phoneB addPerson:p6];
//显示所有联系人
[phoneB allShow];
NSLog(@"------------------------------------------");
//对姓名进行排序
[phoneB sortByName:p1];
NSLog(@"------------------------------------------");
[phoneB personByTel:@"1111111"];
NSLog(@"------------------------------------------");
[phoneB personBySex:@"man"];
NSLog(@"------------------------------------------");
[phoneB removePersonByName:@"wangqi"];
NSLog(@"------------------------------------------");
[phoneB removeBygroup:@"m"];
NSLog(@"------------------------------------------");
[phoneB allShow];
return 0;
}
程序结果如下:
相关文章推荐
- grep命令详解
- c里面关于变参数函数的理解
- shell循环
- windows 安装 配置 gvim
- 常用的 DOCTYPE 声明
- java实现邮箱验证码
- 杭电1038 Biker's Trip Odometer
- 调用系统拍照和相册的集成工具类(包含Popwindow的使用)
- sql查询时使用临时表的速度问题
- 安装Eclipse Maven插件
- Unity3d调用android里的.so
- WinPcap笔记(4):打开适配器并捕获数据包
- JS使用JSON格式数据详解
- Android开发之IntentService和HandlerThread分析
- android数据库的简单Demo(原生版+Google版)
- php的curl封装类
- 全查 外键查询 外键的非主键查询
- 【注:学习作者坚持的精神!】聊聊这五年我做网络运营的这些事 差的究竟差的是什么呢?
- 自定义Interpolator
- 自定义Interpolator