OC: 用OC语言完成简易通讯录(实现增删改查)功能.

来源:互联网 发布:淘宝的甲醛测试仪准吗 编辑:程序博客网 时间:2024/05/21 18:46
要求描述:用OC语言完成简易通讯录(实现增删改查)功能.
 (注:使用MRC)
    1.创建AddressBook类.
        1)使用字典作为容器,字典的Key值为分组名(姓名首字母,大写),value值为数组,数组中存放联系人(Person实例).(5分)
        2)添加联系人.要求(20分)
            a.判断姓名和电话不能为空否则添加失败.
            b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人不能有重名).
            c.添加成功返回YES,姓名为空或者有重名的添加失败返回NO.
            d.数据使用Person存储.
            e.方法:- (BOOL)addPerson:(Person *)aPerson;
 
        3)按照姓名删除联系人.(15分)
            a.方法:- (BOOL)deletePersonWithName:(NSString*)aPersonName;
            b.删除成功返回YES,否则返回NO;
            c.当删除联系人后分组为空时,需要删除该分组。
 
        4)删除一个分组.(10分)
            a:方法:- (BOOL)deleteGroup:(NSString *)aGroupName;
            b.删除成功返回YES,否则返回NO;
 
        5)根据电话查找某个联系人.(10分)
            a:方法:-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
            b:如果找到返回该联系人,否则返回nil.
            c.忽略电话重复问题,只返回第一个查找到的联系人。
 
        6)根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)
            a:方法:-(NSArray *)findPersonsWithSex:(NSString *)aSex;
            b:查找到联系人放入数组,排序的时候使用block.
 
        7)根据姓名,更改联系人信息.(10分)
            a:方法:-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
            b:找到该联系人并修改该成功返回YES,否则返回NO
            c.修改电话、性别、年龄,参数不能为空。
 
        8)展示通讯录中的所有联系人信息(5分)
            a:方法:-(void)showAll;
            b.通过重写description方法展示联系人信息 。
 
    2.使用Person类.(属性:姓名,年龄,性别,电话)
        1)重写description方法,输出 “姓名:张三   性别:男   年龄:22   电话:123456789”.(5分)

        2)使用便利构造器创建对象.(5分)


AddressBook.h

#import <Foundation/Foundation.h>#import "Person.h"@interface AddressBook : NSObject// 1.声明一个有可变字典实例变量的属性,用来按组存放通讯录信息@property (nonatomic,retain)NSMutableDictionary * personDic;// 2.添加联系人-(BOOL)addPerson:(Person *)newPerson;// 3.按照姓名删除联系人-(BOOL)deletePersonWithName:(NSString*)aPersonName;// 4.删除一个分组-(BOOL)deleteGroup:(NSString *)aGroupName;// 5.根据电话查找某个联系人-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;// 6.根据性别查找联系人,并将查到的联系人按照姓名排序-(NSArray *)findPersonsWithSex:(NSString *)aSex;// 7.根据姓名,更改联系人的信息-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;// 8.显示通讯录中所有联系人-(void)showAll;@end

AddressBook.m

#import "AddressBook.h"@implementation AddressBook// 重写init方法,给 personDic 在堆区分配一个空间-(id)init{    if (self = [super init]) {        self.personDic = [[NSMutableDictionary alloc]init];    }    return self;}// 2.添加联系人-(BOOL)addPerson:(Person *)newPerson{    // a.判断姓名和电话不能为空否则添加失败.    if (newPerson.name == nil || newPerson.tel == nil) {        NSLog(@"姓名或电话为空,添加失败!");        return NO;    }    // 判断是否有重名,如果有添加失败。    for (NSString *key in _personDic) {        for (Person *person in _personDic[key]) {            if (person.name == newPerson.name) {                NSLog(@"姓名重复,添加失败");                return NO;            }        }    }    // 判断是否存在分组,不存在,创建之后再存储,存在就直接存储。    NSMutableArray *array = _personDic[newPerson.groupName];    if (array == nil) {        array = [[NSMutableArray alloc]init];        [_personDic setValue:array forKey:newPerson.groupName];    }    [array addObject:newPerson];    NSLog(@"添加联系人成功 !!! ");    return YES;}// 3.按照姓名删除联系人- (BOOL)deletePersonWithName:(NSString*)aPersonName{/*        for (NSString *key in _personDic) {//        for (int i = 0; i < [_personDic[key] count]; i++) {//            if ([[_personDic[key][i] name] isEqualToString:aPersonName]) {//                [_personDic[key] removeObject:_personDic[key][i]];//                NSLog(@"delete Person %@ success",aPersonName);//                if ([_personDic[key] count] == 0) {//                    [_personDic removeObjectForKey:key];//                }//                return YES;//            }//        }//    }*/    for (NSString * key in _personDic) {        for (Person * p in _personDic[key]) {            if ([p.name isEqualToString:aPersonName]) {   //p.name == aPersonName 也行 研究下                NSLog(@"删除联系人 %@ 成功",aPersonName);                [_personDic[key] removeObject:aPersonName];                // 如果删除联系人之后分组为空,则把分组删掉。                if ([_personDic[key] count] == 0) {                    [_personDic removeObjectForKey:key];                }                return YES;            }        }    }    NSLog(@"没有这个人,无需删除!");    return NO;}// 4.删除一个分组- (BOOL)deleteGroup:(NSString *)aGroupName{    if (_personDic[aGroupName]) {        [_personDic removeObjectForKey:aGroupName];        NSLog(@"删除分组成功!!!");        return YES;    }    NSLog(@"没有该分组,无需删除 !!!");    return NO;}// 5.根据电话查找某个联系人-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum{    for (NSString *key in _personDic) {        for (Person *person in _personDic[key]) {            if ([person.tel isEqualToString:aPhoneNum]) {                NSLog(@"根据电话号码找到了这个联系人:");                return person;            }        }    }    NSLog(@"根据电话号码没有找到这个人!!!");    return nil;}// 6.根据性别查找联系人,并将查到的联系人按照姓名排序-(NSArray *)findPersonsWithSex:(NSString *)aSex{    NSMutableArray *array = [NSMutableArray array];    for (NSString *key in _personDic) {        for (Person *person in _personDic[key]) {            if ([person.sex isEqualToString:aSex]) {                [array addObject:person];            }        }    }    // [array sortUsingSelector:@selector(compareByAge:)];//    [array sortUsingComparator:^NSComparisonResult(Person* obj1, Person* obj2) {//        return obj1.age>obj2.age;//    }];    [array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {        return obj1>obj2;    }];    return array;}// 7.根据姓名,更改联系人的信息-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge{    for (NSString * key in _personDic) {        for (Person * person in _personDic[key]) {            if ([person.name isEqualToString:name]) {                if (aNum == nil || aSex == nil || aAge == 0) {                    NSLog(@"修改参数为空,添加失败");                    return NO;                }else{                    person.tel = aNum;                    person.sex = aSex;                    person.age = aAge;                    NSLog(@"修改成功");                    return YES;                }            }        }    }    NSLog(@"没有找到该联系人,修改失败");    return NO;}// 8.显示通讯录中所有联系人-(void)showAll{    NSLog(@"%@",_personDic);}@end

Person.h

#import <Foundation/Foundation.h>@interface Person : NSObject// 声明属性(包含姓名、年龄、性别、电话)@property (nonatomic,copy)NSString *name;@property (nonatomic,assign)NSInteger age;@property (nonatomic,copy)NSString *sex;@property (nonatomic,copy)NSString *tel;// 声明属性(分组名)@property(nonatomic,copy)NSString * groupName;//初始化方法-(id)initWithName:(NSString *)name              age:(NSInteger)age              sex:(NSString *)sex              tel:(NSString *)tel;// 2.2 便利构造器+(Person *)personWithName:(NSString *)name                      age:(NSInteger)age                      sex:(NSString *)sex                      tel:(NSString *)tel;// 2.1 重写description-(NSString *)description;// 通过年龄进行排序-(NSComparisonResult)compareByAge:(Person *)person;@end

Person.m

#import "Person.h"@implementation Person-(id)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex tel:(NSString *)tel{    if ([super init]) {        _name = name;        _age = age;        _sex = sex;        _tel = tel;        _groupName = [[name substringToIndex:1]uppercaseString];    }    return self;}+(Person *)personWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex tel:(NSString *)tel{    Person *per = [[Person alloc]initWithName:name age:age sex:sex tel:tel];    return per ;}-(NSString *)description{    return [NSString stringWithFormat:@"name: %@ age: %ld sex: %@ tel: %@",self.name,self.age,self.sex,self.tel];}//通过年龄进行排序-(NSComparisonResult)compareByAge:(Person *)person{    if (self.age > person.age) {        return 1;    }else if (self.age < person.age){        return -1;    }else    {        return 0;    }}@end

main.m

#import <Foundation/Foundation.h>#import "Person.h"#import "AddressBook.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        //创建通讯录        AddressBook *newPersonBook = [[AddressBook alloc]init];        //创建联系人        Person *p1 = [Person personWithName:@"Zhangsan" age:22 sex:@"m" tel:@"158"];        Person *p2 = [Person personWithName:@"Lisi" age:18 sex:@"f" tel:@"131"];        Person *p3 = [Person personWithName:@"Wangwu" age:19 sex:@"m" tel:@"187"];        Person *p4 = [Person personWithName:@"Zhaoliu" age:21 sex:@"f" tel:@"167"];        Person *p5 = [Person personWithName:@"Qianqi" age:20 sex:@"f" tel:@"199"];        Person *p6 = [Person personWithName:@"Wangwang" age:17 sex:@"m" tel:@"101"];        Person *p7 = [Person personWithName:@"Hejiu" age:18 sex:@"m" tel:@"103"];        Person *p8 = [Person personWithName:@"Jan" age:20 sex:@"m" tel:@"102"];                // 2.添加联系人到通讯录        [newPersonBook addPerson:p1];        [newPersonBook addPerson:p2];        [newPersonBook addPerson:p3];        [newPersonBook addPerson:p4];        [newPersonBook addPerson:p5];        [newPersonBook addPerson:p6];        [newPersonBook addPerson:p7];        [newPersonBook addPerson:p8];                // 3.按照姓名删除某个联系人        [newPersonBook deletePersonWithName:@"Lisi"];                // 4.删除某个分组        [newPersonBook deleteGroup:@"Z"];                // 5.根据电话查找某个联系人        Person *findper =  [newPersonBook findPersonWithPhoneNum:@"102"];        NSLog(@"%@",findper);                // 6.根据性别查找联系人,并将查到的联系人按照年龄升序排序        NSLog(@"%@",[newPersonBook findPersonsWithSex:@"f"]);                // 7.修改联系人信息        [newPersonBook changePersonWithName:@"Wangwu" phoneNum:@"100" sex:@"m" age:99];                // 8.显示全部        [newPersonBook showAll];            }    return 0;}


1 0
原创粉丝点击