C++问题 定义一个类,用于输入并验证日期
答案:3 悬赏:60
解决时间 2021-01-04 00:43
- 提问者网友:晨熙污妖王
- 2021-01-03 14:04
求高手详细给出程序,先谢谢,急用!
最佳答案
- 二级知识专家网友:我们只是兮以城空
- 2021-01-03 15:21
#include "iostream.h"
class date
{
public:
date();
date(date &d);
int setdate(int y, int m, int d);
inline int getyear(){return year;}
inline int getmonth(){return month;}
inline int getday(){return day;}
private:
int Reasonable(int y, int m, int d);
int year;
int month;
int day;
};
class qdate : public date
{
public:
int Query();
};
date::date()
{
year=1900; month=1; day=1;
}
date::date(date &d)
{
year=d.getyear(); month=d.getmonth(); day=d.getday();
}
int date::setdate(int y, int m, int d)
{
switch (Reasonable(y,m,d))
{
case 1:
printf("month is wrong! Retry, format yyyy-mm-dd:");
return 0;
case 2:
printf("day is wrong! Retry, format yyyy-mm-dd:");
return 0;
}
year=y; month=m; day=d;
return 1;
}
int date::Reasonable(int y, int m, int d)
{
int count[]={31,28,31,30,31,30,31,31,30,31,30,31};
int status=0;
if(m<1 || m>12) status=1;
if((y%4==0&&y%100!=0)||(y%400==0) && m==2) count[1]++;
if(d<1 || d>count[m-1]) status=2;
return status;
}
int qdate::Query()
{
int d=getday(),m=getmonth(),y=getyear();
if(m<3) m+=12;
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
void main()
{
char str[7][10]={"Monday","Tuesday","Wednesday","Thirsday","Friday","Saturday","Sunday"};
int d,m,y;
qdate week;
printf("Input date, format yyyy-mm-dd:");
do
{
scanf("%d-%d-%d",&y,&m,&d);
}
while(!week.setdate(y,m,d));
printf("%04d-%02d-%02d is %s",y,m,d,str[week.Query()]);
}
class date
{
public:
date();
date(date &d);
int setdate(int y, int m, int d);
inline int getyear(){return year;}
inline int getmonth(){return month;}
inline int getday(){return day;}
private:
int Reasonable(int y, int m, int d);
int year;
int month;
int day;
};
class qdate : public date
{
public:
int Query();
};
date::date()
{
year=1900; month=1; day=1;
}
date::date(date &d)
{
year=d.getyear(); month=d.getmonth(); day=d.getday();
}
int date::setdate(int y, int m, int d)
{
switch (Reasonable(y,m,d))
{
case 1:
printf("month is wrong! Retry, format yyyy-mm-dd:");
return 0;
case 2:
printf("day is wrong! Retry, format yyyy-mm-dd:");
return 0;
}
year=y; month=m; day=d;
return 1;
}
int date::Reasonable(int y, int m, int d)
{
int count[]={31,28,31,30,31,30,31,31,30,31,30,31};
int status=0;
if(m<1 || m>12) status=1;
if((y%4==0&&y%100!=0)||(y%400==0) && m==2) count[1]++;
if(d<1 || d>count[m-1]) status=2;
return status;
}
int qdate::Query()
{
int d=getday(),m=getmonth(),y=getyear();
if(m<3) m+=12;
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
void main()
{
char str[7][10]={"Monday","Tuesday","Wednesday","Thirsday","Friday","Saturday","Sunday"};
int d,m,y;
qdate week;
printf("Input date, format yyyy-mm-dd:");
do
{
scanf("%d-%d-%d",&y,&m,&d);
}
while(!week.setdate(y,m,d));
printf("%04d-%02d-%02d is %s",y,m,d,str[week.Query()]);
}
全部回答
- 1楼网友:陪衬角色
- 2021-01-03 17:48
就是验证数据是否为日期类型
- 2楼网友:瘾与深巷
- 2021-01-03 16:30
#include
#include
typedef struct date
{
int year;
int month;
int day;
}date;
int getday(date date1, date date2)
{ // 1 2 3 4 5 6 7 8 9 10 11
int mon[11]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
int i;
long temp1=date1.day, temp2=date2.day;//day
for(i=date1.month-2; i>=0; i--)
{
temp1+=mon[i];
}
for(i=date2.month-2; i>=0; i--)
{
temp2+=mon[i];
}//month
temp1+=((date1.year-1)*365)+(date1.year/4);
temp2+=((date2.year-1)*365)+(date2.year/4);//year
return temp2-temp1;
}
void main()
{
date date1, date2;
date1.year=2010;
date1.month=5;
date1.day=20;
date2.year=2011;
date2.month=5;
date2.day=25;
printf("这两个日期之间的天数为:%d", getday(date1, date2));
getch();
}
这里 算法很巧妙,符合我的风格
不过有很多漏洞的,比如日期的格式,还有计算两个日子之间的天数可能有负数
建议使用面向对象的思想
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |