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;


该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值