中易网

C++问题 定义一个类,用于输入并验证日期

答案:3  悬赏:60  
解决时间 2021-01-04 00:43
求高手详细给出程序,先谢谢,急用!
最佳答案
#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()]);
}
全部回答
就是验证数据是否为日期类型
#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(); } 这里 算法很巧妙,符合我的风格 不过有很多漏洞的,比如日期的格式,还有计算两个日子之间的天数可能有负数 建议使用面向对象的思想
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
DNF:装备打造的先后顺序,为什么B套大佬还不
澤厚的意思是什么?澤厚的释义是什么啊?
授方的意思是什么?授方的释义是什么啊?
如果六位数()5493()能被55整除,这个六位数可
芸鉏的意思是什么?芸鉏的释义是什么啊?
广西师范大学离桂林航院远不远
骾骨的意思是什么?骾骨的释义是什么啊?
知制诰的意思是什么啊?请解释下!
一个c语言问题(关于union)
贤劳的意思是什么?贤劳的释义是什么啊?
vivo手机数据线怎么连接不上
纷呈的意思是什么?纷呈的释义是什么啊?
在Word中要删除某一页的页眉怎么不弄
欣贵龙复合人参浓浆的人参有什么 作用?
厲心的意思是什么?厲心的释义是什么啊?
推荐资讯
东风日产奇骏做保养不在买车店保去别家行不
如何把自己的php文件发布到互联网上?
男朋友要求我晚上陪他,从此以后我就讨厌男性
侵争的意思是什么?侵争的释义是什么啊?
哪所大学招收围棋特长生?08年的,可现在除了复
卫生间贴瓷砖是用全磁还是半瓷
从四惠站到双井桥坐公交车怎么走
顾惜的意思是什么?顾惜的释义是什么啊?
第五加油站地址在哪,我要去那里办事
人众的意思是什么?人众的释义是什么啊?
发兆的意思是什么?发兆的释义是什么啊?
我想自学珠宝设计 什么门路都没有 教材也不知
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?