溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

用OC語言完成簡易通訊錄(實現(xiàn)增刪改查)功能.

發(fā)布時間:2020-07-28 00:41:09 來源:網(wǎng)絡(luò) 閱讀:998 作者:Fan小柒 欄目:開發(fā)技術(shù)

(注:使用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;
}


向AI問一下細節(jié)

免責(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)容。

AI