#include <iostream>
using namespace std;
class Data{ //日期类
private:
int years;
int month;
int day;
public:
Data(int year,int mont,int da)
{
years=year;
month=mont;
day=da;
}
Data()
{
years=2010;
month=1;
day=1;
}
//设置数据值
void set(int year,int mont,int da)
{
years=year;
month=mont;
day=da;
}
//获取数据值
void get()
{
cout<<years<<"年"<<month;cout<<"月"<<day<<"日";
}
//计算并返回天数
int Days()
{
int i,days=0,j=1;//j是判断月日是否出错的标志变量
if(years<2010)
{
cout<<"年份要在2010年或以后"<<endl;
return 0;
}
for(i=2010;i<years;i++)//给所要求的天数加上当年的1月1号之前到2010年1月1号的天数
{
days+=365;
if(i%400==0||(i%4==0&&i%100!=0))
{
days++;
}
}
switch(month)//给所要求的天数加上当年的天数
{
case 1:days=days+0;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 2:days=days+31;break;
case 3:days=days+59;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 4:days=days+90;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 5:days=days+120;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 6:days=days+151;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 7:days=days+181;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 8:days=days+212;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 9:days=days+243;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 10:days=days+273;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 11:days=days+304;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 12:days=days+334;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
default:
printf("月份错误\n");j=0;break;
}
days+=day;
if(years%400==0||(years%4==0&&years%100!=0))
{
days++;
if(day>29)
{
printf("日错误\n");
j=0;
}
}
else
{
if(day>28)
{
printf("日错误\n");
j=0;
}
}
if(!j)
days=0;
return days;
}
//判断这天是打鱼还是晒网
void yuORwang(int days)
{
//判断数据是否出错
if(days)
{
int i=days%5;
get();
if(i==0||i==4)
cout<<"这天晒网!"<<endl;
else
cout<<"这天打鱼!"<<endl;
}
}
};
int main(void)
{
Data s;
int a,b,c;
int choose=1;
while(choose)
{
cout<<"请输入年月日:";
cin>>a>>b>>c;
s.set(a,b,c);
s.yuORwang(s.Days());
cout<<"继续输入1结束请输入0:";
cin>>choose;
}
return 0;
using namespace std;
class Data{ //日期类
private:
int years;
int month;
int day;
public:
Data(int year,int mont,int da)
{
years=year;
month=mont;
day=da;
}
Data()
{
years=2010;
month=1;
day=1;
}
//设置数据值
void set(int year,int mont,int da)
{
years=year;
month=mont;
day=da;
}
//获取数据值
void get()
{
cout<<years<<"年"<<month;cout<<"月"<<day<<"日";
}
//计算并返回天数
int Days()
{
int i,days=0,j=1;//j是判断月日是否出错的标志变量
if(years<2010)
{
cout<<"年份要在2010年或以后"<<endl;
return 0;
}
for(i=2010;i<years;i++)//给所要求的天数加上当年的1月1号之前到2010年1月1号的天数
{
days+=365;
if(i%400==0||(i%4==0&&i%100!=0))
{
days++;
}
}
switch(month)//给所要求的天数加上当年的天数
{
case 1:days=days+0;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 2:days=days+31;break;
case 3:days=days+59;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 4:days=days+90;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 5:days=days+120;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 6:days=days+151;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 7:days=days+181;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 8:days=days+212;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 9:days=days+243;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 10:days=days+273;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
case 11:days=days+304;
if(day>30)
{
printf("日错误\n");
j=0;
}
break;
case 12:days=days+334;
if(day>31)
{
printf("日错误\n");
j=0;
}
break;
default:
printf("月份错误\n");j=0;break;
}
days+=day;
if(years%400==0||(years%4==0&&years%100!=0))
{
days++;
if(day>29)
{
printf("日错误\n");
j=0;
}
}
else
{
if(day>28)
{
printf("日错误\n");
j=0;
}
}
if(!j)
days=0;
return days;
}
//判断这天是打鱼还是晒网
void yuORwang(int days)
{
//判断数据是否出错
if(days)
{
int i=days%5;
get();
if(i==0||i==4)
cout<<"这天晒网!"<<endl;
else
cout<<"这天打鱼!"<<endl;
}
}
};
int main(void)
{
Data s;
int a,b,c;
int choose=1;
while(choose)
{
cout<<"请输入年月日:";
cin>>a>>b>>c;
s.set(a,b,c);
s.yuORwang(s.Days());
cout<<"继续输入1结束请输入0:";
cin>>choose;
}
return 0;
}
关于判断输入月的天数的代码繁琐了
/*
int p[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年的每月天数
int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年的每月天数
int *d=p
if(years%400==0||(years%4==0&&years%100!=0))
{
d=r;
}
if(day<0||day>d[month])
{
cout>>"输入月的天数错误">>endl;
}
else{
继续进行所有天数的计算
}