美文网首页程序员
【OC】根据某个练习题做简单的通讯录

【OC】根据某个练习题做简单的通讯录

作者: 游城十代2dai | 来源:发表于2016-05-28 17:17 被阅读183次

    笔者不会用代码格式展现,将就一下吧各位~~~

    /**

    *练习:完成以下需求:

    1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息。

    2、在main.m中定义字典,分组管理所有联系人。分组名为26个大写的英文字母。

    3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。

    4、删除某个分组的全部联系人。

    */

    main.m:

    //创建联系人

    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];

    //创建通讯录

    AddressBook *addBook = [[AddressBook alloc] init];

    //添加联系人

    [addBook addContact: Anni];

    [addBook addContact: Anna];

    [addBook addContact: Bobo];

    [addBook addContact: Coco];

    //删除指定联系人或全部联系人

    [addBook delContact: Coco.name];

    [addBook delAllContacts:@"ajk"];//特意对组名没有写单个字母

    //展示指定组或全部通讯录的联系人

    [addBook showDic:@"cou"];//特意对组名没有写单个字母

    [addBook showAll];


    Contact.h&Contact.m:

    @interface  Contact :NSObject

    //定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息。

    @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;

    }

    //内部方法,用来提取字符串中的首字母大写

    -(NSString*)firstNameUpper:(NSString*)string

    {

    return [[string substringToIndex:1]uppercaseString];

    }

    //添加联系人

    -(void)addContact:(Contact*)contact

    {

    if(contact.name==nil|| contact.telNumber==nil) {

    NSLog(@"添加失败");

    }

    else

    {

    //获取与分组名相对应的数组

    NSMutableArray  *arrayOfContacts = [self.addBook  objectForKey:contact.group];

    //如果数组为空,说明字典内不存在此分区

    if(arrayOfContacts ==nil) {

    //创建数组

    arrayOfContacts = [NSMutableArray  arrayWithObject:contact];

    //将数组添加到字典内

    [_addBook  setObject:arrayOfContacts  forKey:contact.group];

    }else{

    //直接添加

    [arrayOfContacts  addObject:contact];

    }

    }

    }

    //删除某组的所有联系人

    -(void)delAllContacts:(NSString*)group

    {

    //获取与指定分组名相对应的数组

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

    //移除该组的数组中所有元素(联系人)

    [arraryOfContacts  removeAllObjects];

    }

    -(void)delContact:(NSString*)name

    {

    //获取与指定联系人分组名相对应的数组

    NSMutableArray *arrayOfContacts = [self.addBook  objectForKey:[self firstNameUpper:name]];

    //创建一个接收要删除的联系人的数组,为了后面removeObjectsInArray的使用,因为数组的remove方法中只有移除本数组中的元素方法,以及移除和本数组中与其他数组元素相同内容的方法,故创建一个数组来接收要删除联系人和同名的联系人

    NSMutableArray *arrayOfPerson = [NSMutableArray  array];

    //遍历通讯录某组所有联系人

    for(Contact *per in arrayOfContacts) {

    //判断某组中是否有相同名字的,有则存入arrayOfPerson

    if([per.name  isEqualToString:name]) {

    [arrayOfPerson  addObject:per];

    }

    }

    //删除arrayOfPerson组的所有联系人

    [arrayOfContacts  removeObjectsInArray:arrayOfPerson];

    }

    //展示某组的所有联系人

    -(void)showDic:(NSString*)group

    {

    //创建一个数组用来接收所有联系人,因为在遍历的过程中不能对被遍历数组进行操作

    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]) {

    //将联系人存入数组

    [name addObject:per];

    //对联系人进行升序排序

    [name sortUsingSelector:@selector(compareWithName:)];

    NSLog(@"%@", name);

    }

    }

    }

    }

    //展示通讯录组与所有联系人

    -(void)showAll

    {

    NSLog(@"通讯录:");

    for(id key in self.addBook) {

    NSLog(@"%@组:", key);

    for(id per in[self.addBook objectForKey:key]) {

    NSLog(@"%@", per);

    }

    }

    }

    @end

    相关文章

      网友评论

        本文标题:【OC】根据某个练习题做简单的通讯录

        本文链接:https://www.haomeiwen.com/subject/qkjirttx.html