weixin_46087264 2020-05-26 19:17 采纳率: 33.3%
浏览 1273
已采纳

定义一个日期类CDate 包含三个私有成员

定义一个日期类CDate,包含三个私有成员:year(年),month(月),day(日);有一个构造函数可以为其三个成员赋初值,以及一个友元函数Dis,可以计算两个日期相差的天数。在main函数中定义两个日期对象,计算两个日期相差的天数并输出完成测试。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-27 00:46
    关注
    #include<iostream>
    using namespace std;
    class Date{
        int day,month,year;
        public:
        Date(int y,int m,int d):year(y),month(m),day(d){}
        friend int count_day(Date &da,int flag);
        friend int leap(int year);
        friend int subs(Date &d1,Date &d2);
    };
    int leap(int  year){
        //int year = da.year;
        if(year%4!=0)
            return 0;
        if(year%100!=0)
            return 1;
        if(year%400==0)
            return 1;
        return 0;
    }
    int count_day(Date &da,int flag){
        int year = da.year;
        int temp = leap( year),sum=0;
        if(flag==1){
            for (int i = 1; i < da.month;i++){
                if(i==2){
                    if(temp)
                        sum += 29;
                    else
                        sum += 28;
                    continue;
                }
             switch(i){
                 case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
                    sum += 31;
                    break;
                case 4 : case 6 : case 9 : case 11 :
                    sum += 30;
                    break;
             }
    
            }
            sum += da.day;
        }else{
          for (int i = 12; i >=da.month;i--){
                if(i==2){
                    if(temp)
                        sum += 29;
                    else
                        sum += 28;
                    continue;
                }
             switch(i){
                 case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
                    sum += 31;
                    break;
                case 4 : case 6 : case 9 : case 11 :
                    sum += 30;
                    break;
             }
    
            }
            sum -= da.day;
        }
        return sum;
    }
    
    int subs(Date &d1,Date &d2){
        int sum = 0;
        sum += count_day(d1, 0) + count_day(d2, 1);
        if((d1.year-d2.year)==0){
            int flag = leap(d1.year);
            if(flag)
                sum -= 366;
            else
                sum -= 365;
            return sum;
        }
        if((d2.year-d1.year)>=2){
            for (int i = d1.year + 1; i <=d2.year - 1;i++){
                if(leap(i))
                    sum += 366;
                else
                    sum += 365;
            }
        }
        return sum;
    }
    int main() {
        int d11, d22, m1, m2, y1, y2;
        cin >> y1 >> m1 >> d11 >> y2 >> m2 >> d22;
        if((y2-y1)<0||(m2-m1)<0||(d22-d11)<0){
            cout << "time error!" << endl;
        }else{
            Date d1(y1, m1, d11),d2(y2,m2,d22);
            cout << subs(d1, d2)<<endl;
        }
        //char kkk = getchar();
    }   
    

    https://www.cnblogs.com/pluie/p/12952812.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序