筆者不會用代碼格式展現(xiàn)樱调,將就一下吧各位~~~
/**
*練習(xí):完成以下需求:
1约素、定義聯(lián)系人類Contact。實例變量:姓名(拼音笆凌,首字母大寫)圣猎、性別、電話號碼乞而、住址送悔、分組名稱、年齡爪模。方法:自定義初始化方法(姓名欠啤、電話號碼)、顯示聯(lián)系人信息屋灌。
2洁段、在main.m中定義字典,分組管理所有聯(lián)系人共郭。分組名為26個大寫的英文字母祠丝。
3、可以添加聯(lián)系人對象除嘹,如果姓名或電話號碼為空写半,添加失敗。添加聯(lián)系人到匹配的分組憾赁。
4污朽、刪除某個分組的全部聯(lián)系人。
*/
main.m:
//創(chuàng)建聯(lián)系人
Contact *Anni = [[Contact alloc]initWithName:@"Anni" andTelNumber:@13000000000];
Contact *Anna = [[Contact alloc]initWithName:@"Anna" andTelNumber:@12000000000];
Contact *Bobo = [[Contact alloc]initWithName:@"Bobo" andTelNumber:@13100000000];
Contact *Coco = [[Contact alloc]initWithName:@"Coco" andTelNumber:@18600000000];
//創(chuàng)建通訊錄
AddressBook *addBook = [[AddressBook alloc] init];
//添加聯(lián)系人
[addBook addContact: Anni];
[addBook addContact: Anna];
[addBook addContact: Bobo];
[addBook addContact: Coco];
//刪除指定聯(lián)系人或全部聯(lián)系人
[addBook delContact: Coco.name];
[addBook delAllContacts:@"ajk"];//特意對組名沒有寫單個字母
//展示指定組或全部通訊錄的聯(lián)系人
[addBook showDic:@"cou"];//特意對組名沒有寫單個字母
[addBook showAll];
Contact.h&Contact.m:
@interface ?Contact :NSObject
//定義聯(lián)系人類Contact龙考。實例變量:姓名(拼音蟆肆,首字母大寫)、性別晦款、電話號碼炎功、住址、分組名稱缓溅、年齡蛇损。方法:自定義初始化方法(姓名、電話號碼)、顯示聯(lián)系人信息淤齐。
@property(nonatomic,retain)NSString *name;
@property(nonatomic,retain)NSString *gender;
@property(nonatomic,assign)NSNumber *telNumber;
@property(nonatomic,retain)NSString *address;
@property(nonatomic,retain)NSString *group;
@property(nonatomic,assign)NSNumber *age;
-(instancetype)initWithName: (NSString *)name andTelNumber:(NSNumber *)telNumber ;
+(instancetype)ContactWithName:(NSString *)name andTelNumber:(NSNumber *)telNumber;
-(NSComparisonResult)compareWithName:(Contact *)per;
@end
@implementationContact
-(instancetype)initWithName: (NSString*)name andTelNumber:(NSNumber*)telNumber
{
self = [?super init];
if( self) {
_name = name;
_telNumber = telNumber;
_group = [_name substringToIndex:1].uppercaseString;
}
return self;
}
- (NSString*)description
{
return ?[NSString stringWithFormat:@"name: %@, phoneNumber: %@",_name,_telNumber];
}
+(instancetype)ContactWithName:(NSString*)name andTelNumber:(NSNumber*)telNumber
{
Contact *person = [[Contact alloc]initWithName:name andTelNumber:telNumber];
return person;
}
//使對象按照升序排列
-(NSComparisonResult)compareWithName:(Contact*)per
{
return [self.name compare:per.name];
}
@end
AddressBook.h&AddressBook.m
@classContact;
@interface AddressBook :NSObject
@property(nonatomic,retain)NSMutableDictionary *addBook;
-(instancetype)init;
-(NSString*)firstNameUpper:(NSString*)string;
-(void)addContact:(Contact *)contact;//添加
-(void)delContact:(NSString *)name;//刪除指定
-(void)delAllContacts:(NSString *)group;//刪除所有
-(void)showDic:(NSString *)group;//展示指定組
-(void)showAll;//展示所有
@end
#import"Contact.h"
@implementationAddressBook
//重寫初始化
-(instancetype)init
{
if(self== [superinit]) {
self.addBook= [NSMutableDictionary ?dictionary];
}
return ?self;
}
//內(nèi)部方法股囊,用來提取字符串中的首字母大寫
-(NSString*)firstNameUpper:(NSString*)string
{
return [[string substringToIndex:1]uppercaseString];
}
//添加聯(lián)系人
-(void)addContact:(Contact*)contact
{
if(contact.name==nil|| contact.telNumber==nil) {
NSLog(@"添加失敗");
}
else
{
//獲取與分組名相對應(yīng)的數(shù)組
NSMutableArray ?*arrayOfContacts = [self.addBook ?objectForKey:contact.group];
//如果數(shù)組為空,說明字典內(nèi)不存在此分區(qū)
if(arrayOfContacts ==nil) {
//創(chuàng)建數(shù)組
arrayOfContacts = [NSMutableArray ?arrayWithObject:contact];
//將數(shù)組添加到字典內(nèi)
[_addBook ?setObject:arrayOfContacts ?forKey:contact.group];
}else{
//直接添加
[arrayOfContacts ?addObject:contact];
}
}
}
//刪除某組的所有聯(lián)系人
-(void)delAllContacts:(NSString*)group
{
//獲取與指定分組名相對應(yīng)的數(shù)組
NSMutableArray ?*arraryOfContacts = [self.addBook objectForKey:[self firstNameUpper:group]];
//移除該組的數(shù)組中所有元素(聯(lián)系人)
[arraryOfContacts ?removeAllObjects];
}
-(void)delContact:(NSString*)name
{
//獲取與指定聯(lián)系人分組名相對應(yīng)的數(shù)組
NSMutableArray *arrayOfContacts = [self.addBook ?objectForKey:[self firstNameUpper:name]];
//創(chuàng)建一個接收要刪除的聯(lián)系人的數(shù)組更啄,為了后面removeObjectsInArray的使用稚疹,因為數(shù)組的remove方法中只有移除本數(shù)組中的元素方法,以及移除和本數(shù)組中與其他數(shù)組元素相同內(nèi)容的方法祭务,故創(chuàng)建一個數(shù)組來接收要刪除聯(lián)系人和同名的聯(lián)系人
NSMutableArray *arrayOfPerson = [NSMutableArray ?array];
//遍歷通訊錄某組所有聯(lián)系人
for(Contact *per in arrayOfContacts) {
//判斷某組中是否有相同名字的内狗,有則存入arrayOfPerson
if([per.name ?isEqualToString:name]) {
[arrayOfPerson ?addObject:per];
}
}
//刪除arrayOfPerson組的所有聯(lián)系人
[arrayOfContacts ?removeObjectsInArray:arrayOfPerson];
}
//展示某組的所有聯(lián)系人
-(void)showDic:(NSString*)group
{
//創(chuàng)建一個數(shù)組用來接收所有聯(lián)系人,因為在遍歷的過程中不能對被遍歷數(shù)組進行操作
NSMutableArray ?*name = [NSMutableArray array];
for(id key in self.addBook) {
//組名是否滿足
//firstNameUpper是為了防止用戶輸入組名的時候過多輸入(即不是屬于一個字母)
if([key isEqualToString:[self firstNameUpper:group]]) {
NSLog(@"%@組:", key);
for(id per in [self.addBook objectForKey:key]) {
//將聯(lián)系人存入數(shù)組
[name addObject:per];
//對聯(lián)系人進行升序排序
[name sortUsingSelector:@selector(compareWithName:)];
NSLog(@"%@", name);
}
}
}
}
//展示通訊錄組與所有聯(lián)系人
-(void)showAll
{
NSLog(@"通訊錄:");
for(id key in self.addBook) {
NSLog(@"%@組:", key);
for(id per in[self.addBook objectForKey:key]) {
NSLog(@"%@", per);
}
}
}
@end