您的位置:首页 > 其它

实现中等通讯录(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;

}

程序结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: