AressCard地址簿的制作

1、地址簿的制作(控制台应用程序)

•定义类AddressCard表示联系人名片,联系人信息包括姓名、email、手机号码;定义初始化函数对名片进行初始化,初始化时需要验证emial和手机号码的有效性;
•定义类AddressBook表示地址簿,地址簿中使用NSMutableArray数组存放所有的联系人名片,定义方法实现地址簿中名片的添加、删除、查找(根据姓名查找)、排序(按姓名升序排列)、打印所有联系人信息的功能。
•将地址簿进行归档。
导航:
--AdressCard.h
--AdressCard.h
--AdressBook.h
--AdressBook.h
--main.m

//AdressCard.h

#import <Foundation/Foundation.h>

@interface AddressCard : NSObject<NSCoding>


//

//属性的参数说明(参见博客内的其他文章),深浅拷贝

@property (nonatomic,copy) NSString *name;

@property (nonatomic,copy) NSString *email;

@property (nonatomic,copy) NSString *number;


//

-(AddressCard *)initWith:(NSString *)_name Email:(NSString *)_email Number:(NSString *)_number;

-(BOOL)judgeEmail:(NSString *)_email;

-(BOOL)judgeNumber:(NSString *)_number;

@end


//AdressCard.m

#import "AddressCard.h"


@implementation AddressCard


@synthesize name;

@synthesize email;

@synthesize number;


//对象的归档,系统对象,自定义对象(参见博客内的其他文章

//编码

-(void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeObject:self.email forKey:@"email"];

    [aCoder encodeObject:self.number forKey:@"number"];

}


//解码

-(id)initWithCoder:(NSCoder *)aDecoder{

    self.name=[aDecoder decodeObjectForKey:@"name"];

    self.email=[aDecoder decodeObjectForKey:@"email"];

    self.number=[aDecoder decodeObjectForKey:@"number"];

    return self;

}


//初始化

-(AddressCard *)initWith:(NSString *)_name Email:(NSString *)_email Number:(NSString *)_number{

    self=[super init];

    if ([self judgeEmail:_email]&&[self judgeNumber:_number]) {

        self.name=_name;

        self.email=_email;

        self.number=_number;

    }

    else{

        if ([self judgeEmail:_email]==NO) {

            NSLog(@"%@:邮箱不符合规范",_email);

        }

        if ([self judgeNumber:_number]==NO) {

            NSLog(@"%@:号码不符合规范",_number);

        }

    }

    return self;

}


//正则表达式(参见博客内的其他文章)

//判断email是否符合要求

-(BOOL)judgeEmail:(NSString *)_email{

    NSString *emailCheck=@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTest=[NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailCheck];

    return [emailTest evaluateWithObject:_email];

}


//判断number是否符合要求

-(BOOL)judgeNumber:(NSString *)_number{

    NSString *phoneCheck=@"^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";

    NSPredicate *phonelTest=[NSPredicate predicateWithFormat:@"SELF MATCHES%@",phoneCheck];

    return [phonelTest evaluateWithObject:_number];


}


// 重写用于输出自定义对象的成员

-(NSString *)description{

    return [NSString stringWithFormat:@"%@,%@,%@",self.name,self.email,self.number];

}

@end


//AdressBook.h

#import <Foundation/Foundation.h>

#import "AddressCard.h"


@interface AddressBook : NSObject<NSCoding>


@property (nonatomic,retain)NSMutableArray *books;


-(void)addCard:(id)_card;

-(void)deletCard:(id)_card;


-(void)findCard:(id)_card;


-(void)sortBooks;

-(id)initAddressBooks;

@end


//AdressBook.m

#import "AddressCard.h"


@implementation AddressCard

@synthesize name;

@synthesize email;

@synthesize number;


//对象的归档,系统对象,自定义对象(参见博客内的其他文章

//编码

-(void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeObject:self.email forKey:@"email"];

    [aCoder encodeObject:self.number forKey:@"number"];

}


//解码

-(id)initWithCoder:(NSCoder *)aDecoder{

    self.name=[aDecoder decodeObjectForKey:@"name"];

    self.email=[aDecoder decodeObjectForKey:@"email"];

    self.number=[aDecoder decodeObjectForKey:@"number"];

    return self;

}


//初始化

-(AddressCard *)initWith:(NSString *)_name Email:(NSString *)_email Number:(NSString *)_number{

    self=[super init];

    if ([self judgeEmail:_email]&&[self judgeNumber:_number]) {

        self.name=_name;

        self.email=_email;

        self.number=_number;

    }

    else{

        if ([self judgeEmail:_email]==NO) {

            NSLog(@"%@:邮箱不符合规范",_email);

        }

        if ([self judgeNumber:_number]==NO) {

            NSLog(@"%@:号码不符合规范",_number);

        }

    }

    return self;

}


//判断email是否符合要求

-(BOOL)judgeEmail:(NSString *)_email{

    NSString *emailCheck=@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTest=[NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailCheck];

    return [emailTest evaluateWithObject:_email];

}


//判断number是否符合要求

-(BOOL)judgeNumber:(NSString *)_number{

    NSString *phoneCheck=@"^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";

    NSPredicate *phonelTest=[NSPredicate predicateWithFormat:@"SELF MATCHES%@",phoneCheck];

    return [phonelTest evaluateWithObject:_number];


}


// 重写用于输出自定义对象的成员

-(NSString *)description{

    return [NSString stringWithFormat:@"%@,%@,%@",self.name,self.email,self.number];

}

@end


//main.m

#import <Foundation/Foundation.h>

#import "AddressBook.h"

#import "AddressCard.h"

int main(int argc, const char * argv[])

{


    @autoreleasepool {

        

        // insert code here...

        //

        NSString *name=@"gaole";

        NSString *email=@"848218486@qq.com";

        NSString *number=@"18051481079";

        

        NSString *name1=@"gao";

        NSString *email1=@"18486@qq.com";

        NSString *number1=@"18752007721";

        

        NSString *name2=@"Neo";

        NSString *email2=@"gaoneo@hotmail.com";

        NSString *number2=@"18051481077";

        

        //

        NSString *name3=@"Neo";

        NSString *email3=@"gaoneohotmail.com";

        NSString *number3=@"180514810";

        

        AddressCard *card1=[[AddressCard alloc]initWith:name Email:email Number:number];

        AddressCard *card2=[[AddressCard alloc]initWith:name1 Email:email1 Number:number1];

        AddressCard *card3=[[AddressCard alloc]initWith:name2 Email:email2 Number:number2];

        AddressCard *card4=[[AddressCard alloc]initWith:name3 Email:email3 Number:number3];

        AddressBook *book1=[[AddressBook alloc]initAddressBooks];

        

        //添加

        [book1 addCard:card1];

        [book1 addCard:card2];

        [book1 addCard:card3];

        [book1 addCard:card4];

         NSLog(@"%@",book1);


        //删除

        [book1 deletCard:card3];

        NSLog(@"%@",book1);

        

        //查找

        [book1 findCard:card1];

        

        //排序

        [book1 sortBooks];

        NSLog(@"%@",book1);

    

        //归档

        if([NSKeyedArchiver archiveRootObject:book1 toFile:@"book1"]){

            NSLog(@"归档成功");

        }

        else{

            NSLog(@"归档失败");

        }

        //OC中的文件操作(参见博客内的其他文章)

        //取档

        NSFileManager *manager=[NSFileManager defaultManager];

        NSMutableArray *book2=[[NSMutableArray alloc]init];

        //判断文件是否存在

        if([manager fileExistsAtPath:@"book1"]){

            book2=[NSKeyedUnarchiver unarchiveObjectWithFile:@"book1"];

            NSLog(@"取档成功");

        }

        NSLog(@"%@",book2);

        

    }

    return 0;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值