三天打渔两天晒网 C++基本功能实现

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。现用C++语言程序解决问题。

#include<iostream>
#include<fstream>
using namespace std;
class Time//时间类 
{
   private:
        int year;
        int month;
        int day;
   public:
       Time(int,int,int);
       void set();//输入函数
       int judge();//判断函数
       void count();//计算函数
};

//构造函数
Time::Time(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;

}

//输入函数
void Time::set()
{
    cin>>year>>month>>day;

}

//判断函数
int Time::judge()
{
    int ju1,ju2,ju3,ju4;

    //判断输入的年份是否正确

    if(year>=2010)
    {
        ju1=1;
    }
    else
    {
        ju1=0;
        printf("您输入的年份有误!年份要大于2010年!");
    }

    //判断输入的月份是否正确

    if(month>=1 && month<=12)
        ju2=1;
    else
    {
        ju2=0;
        printf("您输入的月份有误!月份不能超过12月,不能小于1月!");
    }

   //判断输入的日期是否在对应月份的范围内

    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
        if(day>31)
        {
            ju4=0;
            printf("您输入的日期有误!%d月不能超过31天!",month);
        }

        else
            ju4=1;
    }

    else if(month!=2)
        if(day>30)
        {
            ju4=0;
            printf("您输入的日期有误!%d月不能超过30天!",month);
        }
        else
            ju4=1;

        else if(((year%4==0 && year%100!=0 )|| year%400==0))//当输入2月份时,平年与闰年天数不同,借此判断输入的数据是否正确
        {
            if(day>29)
            {
                ju3=0;
                printf("您输入的日期有误!当前年份为闰年,二月不能超过29天!");
            }
            else
                ju3=1;
        }
        else 
        {
            if(day>28)
            {
                ju3=0;
                printf("您入的日期有误!当前年份为平年,二月不能超过28天!");
            }
            else
                ju3=1;
        }

    return 0;
}

//计算函数
void Time::count()
{

   int day1=0;//2010年开始,今年为止。多少年
   int day2=0;//今年开始,今天到此为止。多少天
   int day3=0;//今天为止,当前月份过了多少天
   int Day=0;
   int i=year-2010;
   int k=month-1;
   int d;
   int monthday1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
   int monthday2[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//计算2010年开始,今年为止,过了多少天
   for(int j=0;j<i;j++)
   {

       if(((2010+j)%4==0 && (2010+j)%100!=0 )|| (2010+j)%400==0)//判断是闰年还是平年(闰年366天,平年365天)
           day1+=366;
       else
           day1+=365;
   }
//计算今年开始,今天为止,过了多少天
    for(int p=0;p<k;p++)
    {

       if((year%4==0 && year%100!=0 )|| year%400==0)
           day2+=monthday1[p];//如果是闰年,月份采用第一个月份数组
       else
           day2+=monthday2[p];//如果是平年,月份采用第二个月份数组
    }
   day3=day;
   Day=day1+day2+day3;//计算总天数
   d=Day%5;//总天数取余,余数为1,2,3当天在打渔,为4,0当天在晒网       
   if(d<=3 && d>=1)
       cout<<"今天打渔"<<endl;
   else
       cout<<"今天晒网"<<endl;
}

//主函数
int main()
{

    int i;//判断次数
    cout<<"请输入需要测试日期的个数:"<<endl;
    cin>>i;
    for(int n=1;n<=i;n++)
    {
        cout<<"第"<<n<<"个:"<<endl; 

       for(int j=0;j<n;j++ )
       {
        cout<<"请输入年 月 日\n注意:起始时间2010年1月1日\n格式: 2010 1 1\n"<<endl;
        Time t1(0,0,0);
        t1.set();//输入
        t1.judge();//判断
        t1.count();//计算总天数
       }
    }
    return 0;
}

如图,输入错误数据后会有具体提示
如图,输入数据错误后会有具体提示

猜你喜欢

转载自blog.csdn.net/asd1508010219/article/details/82289810
今日推荐