三天打鱼,两天晒网程序C++

题目要求

用C或C++语言/java/python实现程序解决问题:从2010年1月1日起开始的某日,问这个人在这天是“打鱼”还是“晒网”。

算法设计

基础要求设计:定义一个date类用来存放年、月、日、判断是否为闰年的变量p(在初始化函数中进行判断)以及初始化函数和计算当年内天数的函数get_day(),接着定义一个计算2010年到当前年份天数的函数get_yearday()。在主函数中建立一个循环进行对函数get_yearday()的调用与get_day()返回值相加,接着对其除5求余在一到三之间为打渔,其它则为晒网。
提高要求设计:添加头文件fstream以便对文件流进行操作。分别用ifstream和ofstream定义对象finfout打开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;
  }
 }
}

运行结果截图

在这里插入图片描述
在这里插入图片描述

提高要求

提高要求

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值