【OC】根據(jù)某個練習題做簡單的通訊錄

筆者不會用代碼格式展現(xiàn),將就一下吧各位~~~

/**

*練習:完成以下需求:

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

{

//獲取與分組名相對應的數(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

{

//獲取與指定分組名相對應的數(shù)組

NSMutableArray ?*arraryOfContacts = [self.addBook objectForKey:[self firstNameUpper:group]];

//移除該組的數(shù)組中所有元素(聯(lián)系人)

[arraryOfContacts ?removeAllObjects];

}

-(void)delContact:(NSString*)name

{

//獲取與指定聯(lián)系人分組名相對應的數(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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容