题目要求
用C或C++语言/java/python实现程序解决问题:从2010年1月1日起开始的某日,问这个人在这天是“打鱼”还是“晒网”。
算法设计
基础要求设计:定义一个date类用来存放年、月、日、判断是否为闰年的变量p(在初始化函数中进行判断)以及初始化函数和计算当年内天数的函数get_day(),接着定义一个计算2010年到当前年份天数的函数get_yearday()。在主函数中建立一个循环进行对函数get_yearday()的调用与get_day()返回值相加,接着对其除5求余在一到三之间为打渔,其它则为晒网。
提高要求设计:添加头文件fstream以便对文件流进行操作。分别用ifstream和ofstream定义对象fin与fout打开int.txt、out.txt。对提取的日期进行判断接着把结果输出至out.txt中。
程序代码
#include <iostream>
#include <fstream>
using namespace std;
static month_[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年每月分的天数
/*Date类用于存放用户输入的日期,以及对天数的计算*/
class Date
{
public:
int year,month,day,p;/*年,月,日,p的值判断是否为闰年*/
int get_day();/*用于计算此年到该天的天数*/
void set_date();/*用于获取用户输入的日期*/
Date();/*年,月,日,默认初始值为0,12,0*/
};
int get_yearday(Date d)
{
int i,p;
p=d.year%4==0&&d.year%100!=0||d.year%400==0;//判断是否是闰年p=0是平年,非零为闰年
for(i=1;i<d.month;i++)
d.day+=month_[i];
return d.day+d.p;
}
int Date::get_day()
{
int day_=day,i;
if(month>2)
{
for(i=1;i<month;i++)
day_=day_+month_[i];
return day_+=p;
}
else
{
for(i=1;i<month;i++)
day_+=month_[i];
return day_;
}
}
void Date::set_date()
{
cout<<"请输入年,月,日:"<<endl;
cin>>year;
cin>>month;
cin>>day;
p=year%4==0&&year%100!=0||year%400==0;
}
Date::Date()
{
year=0;month=12;day=31;
p=year%4==0&&year%100!=0||year%400==0;//判断是否是闰年p=0是平年,非零为闰年
}
int main()
{
Date date,term;
int a;
cout<<"请选择:"<<endl;
cout<<"1、自行输入"<<endl;
cout<<"2、文件输入"<<endl;
cin>>a;
if(a==2)
{
cout<<"请去out.txt文件查看。"<<endl;
ifstream fin("in.txt",ios::in); //打开文件 in.txt
ofstream fout("out.txt",ios::out | ios::trunc); //打开文件 out.txt 准备输出
while(!fin.eof()) //循环,直到in.txt文件读取完成 输入形式若为 2011 01 01或2011/01/01 可以实现,20110101不行
{
fin>>date.year;
if (fin.fail()) {
fin.clear();
break;
}
fin>>date.month;
fin>>date.day;
//cout << date.year << " " << date.month << " " << date.day << endl;
if(date.year<2010) //判断输入日期是否正确
{
fout<<"输入年份错误!"<<endl;
}
else if(date.month>12||date.month<1)
{
fout<<"输入月份错误!"<<endl;
}
else if(date.day>month_[date.month]+date.p||date.day<1)
{
fout<<"输入日期错误!"<<endl;
}
else
{
int yearday=0,day;
for(term.year=2010;term.year<date.year;term.year++)
yearday=get_yearday(term);
yearday+=date.get_day();
day=yearday%5; //求余数
if(day>0&&day<4) //打印结果
fout<<"他在打鱼。"<<endl;
else
fout<<"他在晒网。"<<endl;
yearday=day=0;
}
}
fin.close();
fout.close();
return 0;
}
else
{
date.set_date(); //用户输入日期
if(date.year<2010) //判断输入日期是否正确
cout<<"输入年份错误!"<<endl;
else if(date.month>12||date.month<1)
cout<<"输入月份错误!"<<endl;
else if(date.day>month_[date.month]+date.p||date.day<1)
{
cout<<"输入日期错误!"<<endl;
return 0;
}
else
{
int yearday=0,day;
for(term.year=2010;term.year<date.year;term.year++)
yearday=get_yearday(term);
yearday+=date.get_day();
day=yearday%5; //求余数
if(day>0&&day<4) //打印结果
cout<<"他在打鱼。"<<endl;
else
cout<<"他在晒网。"<<endl;
return 0;
}
}
}
运行结果截图