C++编程1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分
1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分析和判断其他任意一天(年、月、日)是星期几,并输出判断结果。有关说明如下:(1)满足下述...
1、若已知具体某一天(年、月、日,如2018年1月1日)为星期几,利用该已知信息分析和判断其他任意一天(年、月、日)是星期几,并输出判断结果。有关说明如下:
(1)满足下述条件之一均为闰年:年份数可被400整除;年份数可被4整除但不能被100整除。
(2)闰年的天数比非闰年(平年)多1天(闰年366天,非闰年365天)。1~12月的各月份的天数依次为31、28(闰年为29)、31、30、31、30、31、31、30、31、30、31。
很急 展开
(1)满足下述条件之一均为闰年:年份数可被400整除;年份数可被4整除但不能被100整除。
(2)闰年的天数比非闰年(平年)多1天(闰年366天,非闰年365天)。1~12月的各月份的天数依次为31、28(闰年为29)、31、30、31、30、31、31、30、31、30、31。
很急 展开
展开全部
#include<iostream>
using namespace std;
class Date
{
public:
Date(int y,int m,int d,int w=-1)
{
this->y=y;
this->m=m;
this->d=d;
this->w=w;
}
//判断这一年是不是闰年
static bool isLeapYear(int year)
{
return (0==year%400 || (0==year%4 && 0!=year%100));
}
void setDate(int y,int m,int d)
{
this->y=y;
this->m=m;
this->d=d;
}
void outputDateString() const
{
cout<<y<<"年"<<m<<"月"<<d<<"日"<<getWeekString()<<endl;
}
//计算今天是这一年的第多少天
int calculateDays() const
{
static const int Days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,s;
s=d;
for(i=0;i<m-1;i++)
s+=Days[i];
if(m>2 && Date::isLeapYear(y))
s+=1;
return s;
}
//通过另一个有有效的星期部分的日期对象,计算今天是星期几
void calculateWeek(const Date &date1)
{
int i,sum,sum1,cha;
if(-1==date1.w)
cout<<"calculateWeek:参数错误!参数须有有效的星期部分。"<<endl;
else
{
sum=calculateDays();
sum1=date1.calculateDays();
//cout<<"sum="<<sum<<";sum1="<<sum1<<endl;
if(y==date1.y)
{
cha=sum-sum1;
//cout<<"cha:"<<cha<<endl;
if(cha>=0)
setWeek((date1.w+cha%7)%7);
else
{
cha=-cha;
setWeek((7+date1.w-cha%7)%7);
}
}
else
{
cha=0;
if(date1.y<y)
{
cha=(date1.isLeapYear(date1.y) ? 366 : 365)-sum1;
for(i=date1.y+1;i<y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum;
//cout<<"cha:"<<cha<<endl;
setWeek((date1.w+cha%7)%7);
}
else
{
cha=(isLeapYear(y) ? 366 : 365)-sum;
for(i=y+1;i<date1.y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum1;
//cout<<"cha:"<<cha<<endl;
setWeek((7+date1.w-cha%7)%7);
}
}
}
}
string getWeekString() const
{
static const string WK[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
if(-1!=w)
return WK[w];
else
return "星期未设定!";
}
void setWeek(int w)
{
if(w>=0 && w<=6)
this->w=w;
else
cout<<"setWeek:参数错误!星期只能设置成0到6的数字。"<<endl;
}
private:
int y,m,d,w;
};
int main()
{
int y,m,d,w;
//测试用//
/*Date dt1(2018,4,11,3);
Date dt2(0,0,0);
while(true)
{
cout<<"请输入年、月、日(输入-1退出测试):";
cin>>y;
if(-1==y)
break;
cin>>m>>d;
dt2.setDate(y,m,d);
dt2.calculateWeek(dt1);
dt2.outputDateString();
}*/
//测试用//
cout<<"请输入年、月、日、星期几(用数字表示,0-星期日,1-星期一,以此类推):";
cin>>y>>m>>d>>w;
Date d1(y,m,d,w);
cout<<"请输入年、月、日:";
cin>>y>>m>>d;
Date d2(y,m,d);
d2.calculateWeek(d1);
d2.outputDateString();
return 0;
}
using namespace std;
class Date
{
public:
Date(int y,int m,int d,int w=-1)
{
this->y=y;
this->m=m;
this->d=d;
this->w=w;
}
//判断这一年是不是闰年
static bool isLeapYear(int year)
{
return (0==year%400 || (0==year%4 && 0!=year%100));
}
void setDate(int y,int m,int d)
{
this->y=y;
this->m=m;
this->d=d;
}
void outputDateString() const
{
cout<<y<<"年"<<m<<"月"<<d<<"日"<<getWeekString()<<endl;
}
//计算今天是这一年的第多少天
int calculateDays() const
{
static const int Days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,s;
s=d;
for(i=0;i<m-1;i++)
s+=Days[i];
if(m>2 && Date::isLeapYear(y))
s+=1;
return s;
}
//通过另一个有有效的星期部分的日期对象,计算今天是星期几
void calculateWeek(const Date &date1)
{
int i,sum,sum1,cha;
if(-1==date1.w)
cout<<"calculateWeek:参数错误!参数须有有效的星期部分。"<<endl;
else
{
sum=calculateDays();
sum1=date1.calculateDays();
//cout<<"sum="<<sum<<";sum1="<<sum1<<endl;
if(y==date1.y)
{
cha=sum-sum1;
//cout<<"cha:"<<cha<<endl;
if(cha>=0)
setWeek((date1.w+cha%7)%7);
else
{
cha=-cha;
setWeek((7+date1.w-cha%7)%7);
}
}
else
{
cha=0;
if(date1.y<y)
{
cha=(date1.isLeapYear(date1.y) ? 366 : 365)-sum1;
for(i=date1.y+1;i<y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum;
//cout<<"cha:"<<cha<<endl;
setWeek((date1.w+cha%7)%7);
}
else
{
cha=(isLeapYear(y) ? 366 : 365)-sum;
for(i=y+1;i<date1.y;i++)
{
cha+=365;
if(Date::isLeapYear(i))
cha+=1;
}
cha+=sum1;
//cout<<"cha:"<<cha<<endl;
setWeek((7+date1.w-cha%7)%7);
}
}
}
}
string getWeekString() const
{
static const string WK[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
if(-1!=w)
return WK[w];
else
return "星期未设定!";
}
void setWeek(int w)
{
if(w>=0 && w<=6)
this->w=w;
else
cout<<"setWeek:参数错误!星期只能设置成0到6的数字。"<<endl;
}
private:
int y,m,d,w;
};
int main()
{
int y,m,d,w;
//测试用//
/*Date dt1(2018,4,11,3);
Date dt2(0,0,0);
while(true)
{
cout<<"请输入年、月、日(输入-1退出测试):";
cin>>y;
if(-1==y)
break;
cin>>m>>d;
dt2.setDate(y,m,d);
dt2.calculateWeek(dt1);
dt2.outputDateString();
}*/
//测试用//
cout<<"请输入年、月、日、星期几(用数字表示,0-星期日,1-星期一,以此类推):";
cin>>y>>m>>d>>w;
Date d1(y,m,d,w);
cout<<"请输入年、月、日:";
cin>>y>>m>>d;
Date d2(y,m,d);
d2.calculateWeek(d1);
d2.outputDateString();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询