1、地址簿的制作(控制台应用程序)
//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
#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
#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
#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;