问题描述
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,
问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:
1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:
1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,
程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
程序
#include<iostream>
using namespace std;
class Date
{
public:
Date(); //构造函数
int year, month,day,sum,rem,mday[12]; //sum为总天数,rem为余数
int set_date(Date); //设定合法日期的成员函数声明
int judge(Date); //判断平闰年并计算余数的成员函数声明
};
Date::Date()
{
year=month=day=sum=rem=0;
mday[0]=31; mday[1]=31; mday[2]=31; mday[3]=31; mday[4]=31; mday[5]=31;
mday[6]=31; mday[7]=31; mday[8]=31; mday[9]=31;mday[10]=31; mday[11]=31;
}
int Date::set_date(Date d)
{
int i;
cout<<"请输入年:"<<endl;
cin>>d.year;
if(d.year<2010||d.year>2019)
{cout<<"输入年份错误";return 0; }
else
{
cout<<"请输入月:"<<endl;
cin>>d.month;
}
if(d.month<1||d.month>12)
{cout<<"输入月份错误";return 0;}
cout<<"请输入日"<<endl;
cin>>d.day;
if(d.month!=2)
for( i=0;i<12;i++)
if(d.month==i+1&&d.day>mday[i])
{cout<<"输入日期错误++"<<endl;return 0; }
else
{
if(d.year%4==0&&d.year%100!=0||d.year%400==0)
if (d.day>29)
{cout<<"输入日期错误--"<<endl;return 0; }
else if(d.day>28)
{cout<<"输入日期错误**"<<endl;
return 0; }
}
}
int Date::judge(Date d)
{ int sum=0,i;
if(d.year%4==0&&d.year%100!=0||d.year%400==0) //判断是否为闰年
d.mday[1]=28;
else
d.mday[1]=29;
for(i=2010;i<d.year;i++)
{
if(d.year%4==0&&d.year%100!=0||d.year%400==0)
d.sum+=366;
else
d.sum+=365;
}
for(i=1;i<d.month;i++)
{
if(d.month==2)
{
if(d.year%4==0&&d.year%100!=0||d.year%400==0)
d.sum+=29;
else
d.sum+=28;
}
else
d.sum+=d.mday[i-1];
}
d.sum+=d.day;
d.rem=d.sum%5;
if(d.rem>0&&d.rem<4)
cout<<"打鱼";
else
cout<<"晒网";
return 0;
}
int main()
{
Date d1;
int a;
d1.set_date(d1);
d1.judge(d1);
return 0;
}