OC语言写通讯录.docx
《OC语言写通讯录.docx》由会员分享,可在线阅读,更多相关《OC语言写通讯录.docx(13页珍藏版)》请在冰豆网上搜索。
OC语言写通讯录
//
//AddressContact.h
//通讯录练习
//
//Createdbyxaloon15/10/6.
//Copyright(c)2015年xalo.Allrightsreserved.
//
//实例变量:
姓名(拼⾳,⾸字⺟大写)、性别、电话号码、住址、分组名称、年龄。
方法:
⾃定义初始化方法(姓名、电话号码)、显示联系⼈信息
#import
@interfaceAddressContact:
NSObject
{
NSString*_name;
NSString*_gender;
NSString*_number;
NSString*_address;
NSString*_groupName;
NSString*_age;
}
@property(nonatomic,retain)NSString*name,*gender,*number,*address,*groupName,*age;
-(id)initWithName:
(NSString*)namegender:
(NSString*)gendernumber:
(NSString*)numberaddress:
(NSString*)addressgroupName:
(NSString*)groupNameage:
(NSString*)age;
-(id)initWithName:
(NSString*)namenumber:
(NSString*)numbergroupName:
(NSString*)groupName;
+(id)addressContactWithName:
(NSString*)namegender:
(NSString*)gendernumber:
(NSString*)numberaddress:
(NSString*)addressgroupName:
(NSString*)groupNameage:
(NSString*)age;
-(void)contactInformation;
//按姓名排
-(NSComparisonResult)compareByName:
(AddressContact*)aContact;
//按照年龄
-(NSComparisonResult)compareByAge:
(AddressContact*)aContact;
-(NSString*)description;
@end
#import"AddressContact.h"
@implementationAddressContact
//@synthesizename=_name,gender=_gender,address=_address,groupName=_groupName,number=_number,age=_age;
-(id)initWithName:
(NSString*)namegender:
(NSString*)gendernumber:
(NSString*)numberaddress:
(NSString*)addressgroupName:
(NSString*)groupNameage:
(NSString*)age{
self=[superinit];
if(self){
_name=name;
_groupName=groupName;
_gender=gender;
_address=address;
_age=age;
_number=number;
}
returnself;
}
-(id)initWithName:
(NSString*)namenumber:
(NSString*)numbergroupName:
(NSString*)groupName{
self=[superself];
if(self){
_name=name;
_number=number;
_groupName=groupName;
}
returnself;
}
+(id)addressContactWithName:
(NSString*)namegender:
(NSString*)gendernumber:
(NSString*)numberaddress:
(NSString*)addressgroupName:
(NSString*)groupNameage:
(NSString*)age{
AddressContact*p=[[AddressContactalloc]initWithName:
namegender:
gendernumber:
numberaddress:
addressgroupName:
groupNameage:
age];
returnp;
}
-(void)contactInformation{
NSLog(@"%@%@%@%@%@%@",_name,_gender,_number,_address,_groupName,_age);
}
//按姓名排
-(NSComparisonResult)compareByName:
(AddressContact*)aContact
{
return[_namecompare:
[aContactname]];
}
//按照年龄
-(NSComparisonResult)compareByAge:
(AddressContact*)aContact
{
if(_age<[aContactage]){
returnNSOrderedDescending;
}elseif(_age==[aContactage]){
returnNSOrderedSame;
}else{
returnNSOrderedAscending;
}
}
-(NSString*)description{
return[NSStringstringWithFormat:
@"%@%@%@%@%@%@",_name,_gender,_number,_address,_groupName,_age];
}
@end
#import
#import"AddressContact.h"
@interfaceAddressBook:
NSObject
{
NSMutableDictionary*_addressBook;
}
@property(nonatomic,retain)NSMutableDictionary*addressBook;
//添加联系人到_addressBook中
-(void)addContact:
(AddressContact*)aContact;
//获取某个分组的所有联系人并且按姓名升序排序
-(NSArray*)contactsWithGroupName:
(NSString*)groupName;
//根据电话搜索联系人
-(AddressContact*)searhContactByPhoneNum:
(NSString*)phoneNum;
//按性别找人
-(NSArray*)contactsWithGender:
(NSString*)gender;
//删除某个分组的全部联系人。
-(NSMutableDictionary*)RemoveGropPerson:
(NSString*)strGrup;
//根据姓名删除某个联系人。
-(NSMutableDictionary*)removeOneContact:
(AddressContact*)oneContact;
@end
#import"AddressBook.h"
@implementationAddressBook
-(id)init
{
self=[superinit];
if(self){
//将字典初始化,
_addressBook=[NSMutableDictionarydictionary];
}
returnself;
}
#pragmamark添加联系人
-(void)addContact:
(AddressContact*)aContact
{
//判断名字,电话号是否为空
if((aContact.name==nil)||(aContact.number==nil)){
NSLog(@"联系人添加失败");
return;
}else{
//取首字母,当做key值
NSString*first=[aContact.namesubstringToIndex:
1];
//判断首字母
if([_addressBookobjectForKey:
first]==nil){
//如果通过first在字典中取不到Value说明没有这个分组存在,那么创建一个分组
//创建可变数组,添加首字母相同的person到数组中
NSMutableArray*tempArr=[[NSMutableArrayalloc]init];
tempArr=[NSMutableArrayarrayWithObject:
aContact];
//添加到字典中,以首字母当做Key值,可变数组当做Value,存入管理字典中
[_addressBooksetObject:
tempArrforKey:
first];
}else{
//如果存在这个分组的Value,那么直接添加。
//直接添加联系人
[[_addressBookobjectForKey:
first]addObject:
aContact];
}
}
}
//获取某个分组的所有联系人并且按姓名升序排序,【这里面可以改为用block排序】
-(NSArray*)contactsWithGroupName:
(NSString*)groupName
{
NSArray*temp=[_addressBookobjectForKey:
groupName];
//排序compareByName方法已经在联系人类中实现
return[tempsortedArrayUsingSelector:
@selector(compareByName:
)];
}
//通过电话号码查找联系人。
返回一个联系人的对象。
【改为用block排序】
-(AddressContact*)searhContactByPhoneNum:
(NSString*)phoneNum
{
//这里的group就是遍历Key的值。
for(NSString*groupin_addressBook){
//AddressContact对象遍历数组[_addressBookobjectForKey:
group]
NSArray*arr=[_addressBookobjectForKey:
group];
for(AddressContact*cinarr){
//判断电话
if([phoneNumisEqualToString:
[cnumber]]){
returnc;
}
}
}
//没有返回nil
returnnil;
}
//按性别找人
-(NSArray*)contactsWithGender:
(NSString*)gender{
//定义可变数组
NSMutableArray*arr=[NSMutableArrayarray];
for(NSString*groupin_addressBook){
for(AddressContact*cin[_addressBookobjectForKey:
group]){
//判断性别
if([genderisEqualToString:
[cgender]]){
[arraddObject:
c];
}
}
}
//排序方法compareByAge已经写在了AddressContact中。
[arrsortUsingSelector:
@selector(compareByAge:
)];
returnarr;
}
-(NSMutableDictionary*)RemoveGropPerson:
(NSString*)strGrup
{
NSArray*temp=[_addressBookallKeys];
for(NSString*keyintemp)
{
if([keyisEqualToString:
strGrup])
{
[_addressBookremoveObjectForKey:
key];
}
}
return_addressBook;
}
-(NSMutableDictionary*)removeOneContact:
(AddressContact*)oneContact{
for(NSString*keyin_addressBook){
NSMutableArray*arr=[_addressBookobjectForKey:
key];
for(AddressContact*oneinarr){
if([one.nameisEqualToString:
oneContact.name]){
[arrremoveObject:
one];
}
}
}
return_addressBook;
}
@end
#import
#import"AddressBook.h"
#import"NSString+Characters.h"
/*
作业:
实现中等难度通讯录。
需求:
1、定义联系⼈人类AddressContact。
实例变量:
姓名(拼⾳,⾸字⺟大写)、性别、电话号码、住址、分组名称、年龄。
方法:
⾃定义初始化方法(姓名、电话号码)、显示联系⼈信息
2、在main.m中定义字典,分组管理所有联系人。
分组名为26个⼤写的英⽂字⺟。
3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。
添加联系⼈到匹配的分组。
4、获取某个分组名称下所有联系⼈,并且按照姓名升序排列。
5、从通讯录中根据电话号码搜索联系人。
6、获取所有女性的联系人,并且按照年龄的降序排列。
7、根据姓名删除某个联系人。
8、删除某个分组的全部联系人。
*/
/*
实现通讯录,需求:
1、创建联系人类AddressPerson,联系人可以存储姓名、地址、邮箱、电话号码。
2、创建通讯录AddressBook类。
3、通讯录可以添加联系人。
姓名不能为空。
4、通讯录输出所有联系人。
按照姓名首字母分组,使用字典按首字母存储信息。
5、可以按照姓名、电话号码进行联系人搜索。
6、联系人按姓名排序,要求使用block。
*/
intmain(intargc,constchar*argv[]){
@autoreleasepool{
//A组
AddressContact*per1=[AddressContactaddressContactWithName:
@"啊呀"gender:
@"f"number:
@"1111"address:
@"sdsd"groupName:
@"A"age:
@"13"];
AddressContact*per1_2=[AddressContactaddressContactWithName:
@"Andongni"gender:
@"f"number:
@"22222"address:
@"sdsd"groupName:
@"A"age:
@"15"];
AddressContact*per1_3=[AddressContactaddressContactWithName:
@"AoNil"gender:
@"m"number:
@"1111"address:
@"sdsd"groupName:
@"A"age:
@"20"];
AddressContact*per2=[AddressContactaddressContactWithName:
@"Bibo"gender:
@"f"number:
@"1414"address:
@"sdsd"groupName:
@"B"age:
@"9"];
AddressContact*per3=[AddressContactaddressContactWithName:
@"Cady"gender:
@"f"number:
@"1313"address:
@"sdsd"groupName:
@"C"age:
@"7"];
#pragmamark一、:
以下为存储的示例代码:
【我们通讯录的存储思想就是这样的^_^】
//第一步:
将同一分组的人添加到一个数组中
NSMutableArray*groupA=[NSMutableArrayarray];
//添加组名为A的数据到数组groupA中
[groupAaddObject:
per1];
[groupAaddObject:
per1_2];
[groupAaddObject:
per1_3];
//添加组名为B的数据到数组groupB中
NSMutableArray*groupB=[NSMutableArrayarray];
[groupBaddObject:
per2];
//添加组名为C的数据到数组groupC中
NSMutableArray*groupC=[NSMutableArrayarray];
[groupCaddObject:
per3];
//第二步:
//将各个数组中的值作为Value,分组名groupName作为Key值,存入字典中
NSMutableDictionary*contactDict=[NSMutableDictionarydictionary];
//[contactDictsetObject:
groupAforKey:
per1.groupName];
[contactDictsetObject:
groupAforKey:
@"A"];//跟上面一样;
[contactDictsetObject:
groupBforKey:
@"B"];
[contactDictsetObject:
groupCforKey:
@"C"];
//NSLog(@"contactDict=%@",contactDict);
#pragmamark二、我们开始封装添加,查找,删除,联系人的方法。
创建AdressBook类用来管理我们操作通讯录的方法。
//AddressBook是一个管理类,他负责对通讯录的操作,和信息的存取。
AddressBook*book=[[AddressBookalloc]init];
AddressContact*per4=[AddressContactaddressContactWithName:
@"Docter"gender:
@"f"number:
@"1212"address:
@"sgfhd"groupName:
@"D"age:
@"12"];
//存入通讯录。
[bookaddContact:
per4];
[bookaddContact:
per1];
[bookaddContact:
per1_2];
[bookaddContact:
per1_3];
[bookaddContact:
per2];
[bookaddContact:
per3];
//NSLog(@"%@",book.addressBook);
NSArray*ww=[bookcontactsWithGroupName:
@"A"];
NSLog(@"======%@",ww);
NSLog(@"C==%@",[contactDictobjectForKey:
@"C"]);
//通过电话号码查找联系人
AddressContact*dd=[booksearhContactByPhoneNum:
@"1111"];
NSLog(@"dd==%@",dd);
//按性别排序
AddressContact*per5=[AddressContactaddressContactWithName:
@"Demaxiya"gender:
@"f"number:
@"888888"address:
@"sgfhd"groupName:
@"D"age:
@"12"];
[bookaddContact:
per5];
NSArray*a=[bookcontactsWithGender:
@"f"];
NSLog(@"a==%@",a);
//获取某个分组的所有联系人并且按姓名升序排序
//NSArray*name=[bookcontactsWithGroupName:
per5.groupName];
NSArray*name1=[bookcontactsWithGroupName:
@"A"];
NSLog(@"%@",name1);
//NSMutableDictionary*dct=[bookRemoveGroupPerson:
@"D"];
//NSLog(@"dct=%@",dct);
NSMutableDictionary*d=[bookremoveOneContact:
per5];
NSLog(@"%@",d);
NSMutableDictionary*t=[bookRemoveGropPerson:
@"D"];
NSLog(@"%@",t);
}
return0;
}