作业帮 > 综合 > 作业

定义一个名为Date的类,用于输入并验证日期,类中的数据成员和成员函数应满足以下规则;在主函数中编写相

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/05/01 23:58:11
定义一个名为Date的类,用于输入并验证日期,类中的数据成员和成员函数应满足以下规则;在主函数中编写相
定义一个名为Date的类,用于输入并验证日期,类中的数据成员和成员函数应满足以下规则;在主函数中编写相
Date();
Date(Date &d);
Date(const char *input);
Date(int y,int m=2,int d=29);
void setDate(const char *input);
void printDate();
private:
int year;
int month;
int day;
bool pass;
bool checkFormat(const char* input);
void validate();
};
//默认构造函数
Date::Date() :year(2006),month(1),day(1)
{
validate();
}
//拷贝构造函数
Date::Date(Date &date)
{
year = date.year;
month = date.month;
day = date.day;
pass = date.pass;
validate();
}
//带参数构造函数
Date::Date(const char *input)
{
setDate(input);
}
//带默认参数构造函数
Date::Date(int y,int m,int d) :year(y),month(m),day(d)
{
validate();
}
//private checkFormat
bool Date::checkFormat(const char * input)
{
unsigned int length=strlen(input);
if(length!=10)
return false;
else
{
for(unsigned int i=0;i<4;i++)
if((unsigned int)input[i]<47 || (unsigned int)input[i]>57)
return false;
if(input[4]!=':')
return false;
for(unsigned int i=5;i<7;i++)
if((unsigned int)input[i]<47 || (unsigned int)input[i]>57)
return false;
if(input[7]!=':')
return false;
for(unsigned int i=8;i<10;i++)
if((unsigned int)input[i]<47 || (unsigned int)input[i]>57)
return false;
}
return true;
}
//private validate
void Date::validate()
{
pass=true;
if(month<0 || month>12)
{
pass=false;
return ;
}
//这里没有考虑闰年
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
if(day<0 || day>31)
pass=false;
break;
case 2:
if(day<0 || day>28)
pass=false;
break;
case 4:case 6:case 9:case 11:
if(day<0 || day>30)
pass=false;
break;
default:
pass=false;
break;
}
}
//public setDate
void Date::setDate(const char * input)
{
if(checkFormat(input))
{
char temp[5];
memcpy(temp,input,4);
temp[4]='\0';
year = atoi(temp);
memcpy(temp,input+5,2);
temp[2]='\0';
month = atoi(temp);
memcpy(temp,input+8,2);
temp[2]='\0';
day = atoi(temp);
validate();
}
else
pass=false;
}
//public printDate
void Date::printDate()
{
if(pass)
{
if(day<10)
{
if(month<10)
printf("today is %d:0%d:0%d",year,month,day);
else
printf("today is %d:%d:0%d",year,month,day);
}
else
{
if(month<10)
printf("today is %d:0%d:%d",year,month,day);
else
printf("today is %d:%d:%d",year,month,day);
}
}
}
int main()
{
Date c;
Date d("2007:02:12");
Date e=d;
Date f(2008);
f.setDate("2006:04:24");
f.printDate();
return 0;
}