您好,登錄后才能下訂單哦!
(注:使用MRC)
一、功能描述:
main函數(shù)中通過使用Person類和AddressBook類,創(chuàng)建對象、調(diào)用方法,實現(xiàn)以下8個功能:
1).使用便利構(gòu)造器創(chuàng)建四個Person類的實例(聯(lián)系人).
姓名:Lucy 性別:女 電話:123 年齡:21
姓名:Joe 性別:男 電話:456 年齡:17
姓名:Baby 性別:女 電話:789 年齡:27
姓名:Linda 性別:女 電話:000 年齡:21
2).創(chuàng)建一個AddressBook類的實例對象(通訊錄).
3).使用AddressBook類中定義的方法實現(xiàn):添加聯(lián)系人,將四個聯(lián)系人添加到通訊錄中.
4).使用AddressBook類中定義的方法實現(xiàn):根據(jù)電話查找聯(lián)系人,并打印(查找電話:456);
5).使用AddressBook類中定義的方法實現(xiàn):根據(jù)性別查找聯(lián)系人,并將查到的聯(lián)系人按照年齡升序排序,并打印(查找性別:女)
6).使用AddressBook類中定義的方法實現(xiàn):根據(jù)姓名,更改聯(lián)系人信息.(修改Linda的信息: 性別:女 電話:012 年齡:25);
7).使用AddressBook類中定義的方法實現(xiàn):按照姓名刪除聯(lián)系人,并展示通信錄中所有人信息.(刪除聯(lián)系人:Baby)
8).使用AddressBook類中定義的方法實現(xiàn):刪除一個分組,并展示通信錄中所有人信息.(刪除L組)
9).使用AddressBook類中定義的方法實現(xiàn):實現(xiàn)3~8之間每個功能后,輸出通訊錄中所有聯(lián)系人信息。
二、功能實現(xiàn)提示:
1、功能一
定義Person類
1)聲明屬性:姓名,年齡,性別,電話,分組。注:年齡是int類型,其余屬性時NSString類型;分組是姓名首字母(大寫),使用提供的類目:NSString+Characters中的方法獲取。(3分)
2)重寫description方法,輸出Person對象的信息。例如: “姓名:張三 性別:男 年齡:22 電話:123456789”.(2分)
3)定義Person類的便利構(gòu)造器方法,方法包含參數(shù):姓名、年齡、性別、電話.(5分)
2、功能二
定義AddressBook類.
1)聲明屬性:allPersonDic(字典類型)。使用聲明的字典作為容器,分組管理通訊錄中所有聯(lián)系人;字典的Key值為分組名(姓名首字母,大寫),value值為數(shù)組,數(shù)組中存放聯(lián)系人(Person實例).(5分)
2)在AddressBook的初始化方法中,初始化allPersonDic。(5分)
3)重寫dealloc方法,在dealloc方法中實現(xiàn)AddressBook類的內(nèi)存管理。(5分)
3、功能三
添加聯(lián)系人.要求(15分)
a.在AddressBook類中定義方法:
- (BOOL)addPerson:(Person *)aPerson;
b.判斷姓名和電話不能為空否則添加失敗.
c.判斷是否已經(jīng)存在分組,存在直接存儲.不存在創(chuàng)建分組后再存儲.(注:聯(lián)系人不能有重名).
d.添加成功返回YES,姓名為空或者有重名的添加失敗返回NO.
e.數(shù)據(jù)使用Person存儲.
4、功能四
根據(jù)電話查找某個聯(lián)系人.(10分)
a:在AddressBook類中定義方法:
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
b:如果找到返回該聯(lián)系人,否則返回nil.
c.忽略電話重復(fù)問題,只返回第一個查找到的聯(lián)系人。
5、功能五
根據(jù)性別查找聯(lián)系人,并將查到的聯(lián)系人按照年齡升序排序(15分)
a:在AddressBook類中定義方法:
-(NSArray *)findPersonsWithSex:(NSString *)aSex;
b:查找到聯(lián)系人放入數(shù)組,排序的時候使用block.
6、功能六
根據(jù)姓名,更改聯(lián)系人信息.(10分)
a:在AddressBook類中定義方法:
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
b:找到該聯(lián)系人并修改該成功返回YES,否則返回NO
c.修改電話、性別、年齡,參數(shù)不能為空。
7、功能七
按照姓名刪除聯(lián)系人.(15分)
a.在AddressBook類中定義方法:
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
b.刪除成功返回YES,否則返回NO;
c.當(dāng)刪除聯(lián)系人后分組為空時,需要刪除該分組。
8、功能八
刪除一個分組.(5分)
a.在AddressBook類中定義方法:
- (BOOL)deleteGroup:(NSString *)aGroupName;
b.刪除成功返回YES,否則返回NO;
9、功能九
展示通訊錄中的所有聯(lián)系人信息(5分)
a:在AddressBook類中定義方法:
-(void)showAll;
b.通過重寫description方法展示聯(lián)系人信息 。
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject //聲明屬性 @property (nonatomic , retain) NSString *name; @property (nonatomic , retain)NSString *gender; @property (nonatomic , assign)int age; @property (nonatomic , retain) NSString *phoneNumber; @property (nonatomic , retain)NSString *groupName; //聲明初始化方法 - (id)initWithPersonName:(NSString *)name age:(int)age gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber groupName:(NSString *)groupName; //便利構(gòu)造器 + (id)personWithName:(NSString *)name age:(int)age gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber groupName:(NSString *)groupName; @end
Person.m
#import "Person.h" @implementation Person - (id)initWithPersonName:(NSString *)name age:(int)age gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber groupName:(NSString *)groupName{ if (self = [super init]) { self.name = name; self.age = age; self.phoneNumber = phoneNumber; self.gender = gender; self.groupName = groupName; } return self; } + (id)personWithName:(NSString *)name age:(int)age gender:(NSString *)gender phoneNumber:(NSString *)phoneNumber groupName:(NSString *)groupName{ Person *person = [[[Person alloc]initWithPersonName:name age:age gender:gender phoneNumber:phoneNumber groupName:groupName] autorelease]; return person; } //重寫父類的方法,默認情況是打印對象的地址。 - (NSString *)description{ return [NSString stringWithFormat:@" 姓名:%@ ,性別:%@ , 年齡:%d , 電話:%@ , 分組名:%@ ", _name , _gender , _age, _phoneNumber , _groupName ]; } - (void)dealloc{ NSLog(@"%s" , __FUNCTION__); [_name release]; [_gender release]; [_phoneNumber release]; [_groupName release]; [super dealloc]; } @end
AddressBook.h
#import <Foundation/Foundation.h> #import "Person.h" @interface AddressBook : NSObject //聲明一個字典,用來存儲聯(lián)系人 @property (nonatomic , retain) NSMutableDictionary *allPersonDic; //初始化方法 - (id)initWithMutableDic:(NSMutableDictionary *)dic; //聲明方法,添加聯(lián)系人 - (BOOL)addPerson:(Person *)aPerson; //按照電話查找某個聯(lián)系人 - (Person *)findPersonWithPhoneNumber:(NSString *)aPhoneNumber; //按性別查找,并且排序 - (NSArray *)findPersonWithSex:(NSString *)sex; //根據(jù)姓名,來修改聯(lián)系人的信息 - (BOOL)changePersonWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber sex:(NSString *)sex age:(int)age; //刪除聯(lián)系人 - (BOOL)deletePersonWithName:(NSString *)name; //刪除分組 - (BOOL)deleteGroupName:(NSString *)aGroupname; //打印所有的人 - (void)showAll; @end
AddressBook.m
#import "AddressBook.h" #import "NSString+Character.h" @implementation AddressBook - (id)initWithMutableDic:(NSMutableDictionary *)dic{ if (self = [super init]) { _allPersonDic = dic; } return self; } - (void)dealloc{ [_allPersonDic release]; [super dealloc]; } //實現(xiàn)添加聯(lián)系人的方法 - (BOOL)addPerson:(Person *)aPerson{ //第一步,先判斷名字和電話 if ((aPerson.name == nil || aPerson.phoneNumber == nil ) || ([aPerson.name isEqualToString:@""] || [aPerson.phoneNumber isEqualToString:@""])) { NSLog(@"信息不完整,添加失敗"); return NO; } //獲取名字的首字母,并且大寫。當(dāng)作字典的key(鍵) NSString *keyStr = [aPerson.name uppercaseFirstLetter]; //通過鍵來查找數(shù)組 NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr]; if (! tempArray) { //給數(shù)組分配空間 tempArray = [[NSMutableArray alloc]init]; //創(chuàng)建鍵值對 [_allPersonDic setObject:tempArray forKey:keyStr]; } //檢查一下是否有重名的 for (int i = 0; i < [tempArray count]; i ++) { if ([aPerson.name isEqualToString:[tempArray[i] name]]) { NSLog(@"有重名的,添加失敗"); return NO; } } //把聯(lián)系人加進創(chuàng)建好的數(shù)組里面 [tempArray addObject:aPerson]; return YES; } //實現(xiàn)按照號碼找人的方法 - (Person *)findPersonWithPhoneNumber:(NSString *)aPhoneNumber{ //第一步,把字典里面的鍵拿出來,通過鍵來取值 for (NSString *keyStr in _allPersonDic) { //通過objectForKey: 這個方法,把字典里面的數(shù)組拿出來 NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr]; //遍歷拿出來的數(shù)組,讓數(shù)組里面每一個人的號碼,和 形參的值進行比較。 for (Person *p in tempArray) { if ([p.phoneNumber isEqualToString:aPhoneNumber]) { NSLog(@"人找到了"); return p; } } } NSLog(@"沒有找到該聯(lián)系人"); return nil; } //實現(xiàn)方法 - (NSArray *)findPersonWithSex:(NSString *)sex{ //聲明數(shù)組,用來儲存性別相同的人 NSMutableArray *mutableArray = [[NSMutableArray alloc]init]; //然后再開始,遍歷字典,拿到鍵值,遍歷數(shù)組 for (NSString *keyStr in _allPersonDic) { NSMutableArray *array = [_allPersonDic objectForKey:keyStr]; for (Person *person in array) { //跟上一方法不同的地方 if ([person.gender isEqualToString:sex]) { [mutableArray addObject:person]; } } } [mutableArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *per1 = (Person *)obj1; Person *per2 = (Person *)obj2; if ( per1.age > per2.age ) { return NSOrderedDescending; } else if (per1.age < per2.age){ return NSOrderedAscending; } return NSOrderedSame; }]; // [mutableArray sortUsingSelector:@selector(compare:)]; return mutableArray; } //實現(xiàn)修改方法 - (BOOL)changePersonWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber sex:(NSString *)sex age:(int)age{ //第一步,先遍歷 for (NSString *keyStr in _allPersonDic) { //通過key來取值 NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr]; //開始遍歷數(shù)組 for (Person *person in tempArray) { if ([person.name isEqualToString:name]) { //找到人后,開始修改,把傳進來的新的信息賦值給這個人 person.phoneNumber = phoneNumber; person.gender = sex; person.age = age; NSLog(@"賦值成功"); return YES; } } } return NO; } - (BOOL)deletePersonWithName:(NSString *)name{ for (NSString *keyStr in _allPersonDic) { NSMutableArray *tempArray = [_allPersonDic objectForKey:keyStr]; //遍歷數(shù)組 for (Person *person in tempArray) { if ([person.name isEqualToString:name]) { [tempArray removeObject:person]; NSLog(@"找到要刪除的人了"); //如果這個人,是分組里面最后一個,就把分組也刪除 if ([tempArray count] == 0) { //在字典里面刪除鍵值對 [_allPersonDic removeObjectForKey:keyStr]; NSLog(@"數(shù)組已經(jīng)被刪除"); } return YES; } } } NSLog(@"沒有找到"); return NO; } //實現(xiàn)刪除分組的方法 - (BOOL)deleteGroupName:(NSString *)aGroupname{ //先判斷,有么有這個分組 for (NSString *keyStr in _allPersonDic) { if ([keyStr isEqualToString:aGroupname]) { //先通過傳進來的鍵,來獲取字典里面的值(數(shù)組) NSMutableArray *tempArray = [_allPersonDic objectForKey:aGroupname]; //刪完這個數(shù)組里面的所有元素 [tempArray removeAllObjects]; //刪除字典里面的鍵值對,通過鍵來刪除 [_allPersonDic removeObjectForKey:aGroupname]; NSLog(@"找到分組,刪除成功"); return YES; } } NSLog(@"沒有這個分組"); return NO; } //打印所有人 - (void)showAll{ for (NSString *key in _allPersonDic) { NSMutableArray *array = [_allPersonDic objectForKey:key]; for (Person *person in array) { NSLog(@"%@" , person); } } } @end
NSString+Character.h
#import <Foundation/Foundation.h> @interface NSString (Character) - (NSString *)uppercaseFirstLetter; @end
NSString+Character.m
@implementation NSString (Character) - (NSString *)uppercaseFirstLetter{ return [[self uppercaseString] substringToIndex:1]; } @end
main.m
#import <Foundation/Foundation.h> #import "Person.h" #import "AddressBook.h" int main(int argc, const char * argv[]) { // 創(chuàng)建三個對象,就是三個人啊 Person *person = [[Person alloc]initWithPersonName:@"Auroua" age:21 gender:@"girl" phoneNumber:@"1352345678" groupName:@"friend"]; NSLog(@"%@" , person); Person *person1 = [[Person alloc]initWithPersonName:@"Lily" age:18 gender:@"girl" phoneNumber:@"18638520107" groupName:@"firend"]; Person *person4 = [[Person alloc]initWithPersonName:@"DaShi" age:18 gender:@"boy" phoneNumber:@"110" groupName:@"fff"]; //聲明完容器類之后,一定給它開辟空間。 AddressBook *addressBook = [[AddressBook alloc]initWithMutableDic:[NSMutableDictionary dictionary]]; //判斷person對象是否加進字典里面 BOOL result = [addressBook addPerson:person]; NSLog(@"result = %@" , result ? @"YES" : @"NO" ); //判斷person1對象是否加進字典里面 BOOL result1 = [addressBook addPerson:person1]; NSLog(@"result1 =%@" , result1 ? @"YES" : @"NO" ); //判斷person11對象是否加進字典里面 BOOL result11 = [addressBook addPerson:person4]; NSLog(@"result11 =%@" , result11 ? @"YES" : @"NO" ); //查找聯(lián)系人 Person *tempPerson = [addressBook findPersonWithPhoneNumber:@"18638520107"]; NSLog(@"%@" , tempPerson); //接收排序結(jié)束后的數(shù)組 NSArray *array = [addressBook findPersonWithSex:@"girl"]; NSLog(@"排序后的結(jié)果"); for (Person *per in array) { NSLog(@"%@" , per); } //改變聯(lián)系人信息,判斷是否改變成功 BOOL result2 = [addressBook changePersonWithName:@"Lily" phoneNumber:@"123" sex:@"boy" age:40]; NSLog(@"%@" , result2 ? @"YES" : @"NO"); //按名字刪除一個聯(lián)系人,刪除了Lily BOOL result3 = [addressBook deletePersonWithName:@"Lily"]; NSLog(@"%@" , result3 ? @"YES" : @"NO"); //剛剛刪除了Lily,現(xiàn)在把Lily加進來 [addressBook addPerson:person1]; //刪除某一個分組 BOOL result5 = [addressBook deleteGroupName:@"D"]; NSLog(@"%@" , result5 ? @"YES" : @"NO"); //展示分組里面的所有的信息 [addressBook showAll]; return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。