数据结构专题实验3-图形界面的应用(C语言实现)

一、实验概述

实验题目:时间计算器。
实验目的:图形界面的设计。学习使用QT开发框架,后续的几个实验会用到。
实验内容:编写图形界面程序,输入年月日和增加的天数,计算出增加以后的年月日。例如,输入20220901和50,输出20221021。

二、代码结构

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

三、函数讲解

int check(int y,int m,int d)

	判断输入的年月日是否正确
int check(int y,int m,int d){
    int i = 1;
    //判断输入的日期是否正确
    if(m < 1 || m > 12 || d < 1 || d > 31){
        i = 0;
    }
    if(m == 2){
        if(!((y%4 == 0 && y%100 != 0) || y%400 == 0))//判断这一年2月是否有29天
          if(d>=29)
            i = 0;
    }
    return i;
}

int CalculateDate(int y,int m,int d,int num)

	计算日期并输出。
	把天数为31天的月份、天数为30天的月份、天数为29天的月份单独分类,
注意还有天数为28天的月份(判断是否为闰年)。整型变量y、m、d,分别代表
年月日,当跨年时,y自增,m重置为1;当跨月时,y不变,m自增;日期根据输
入的数字改变,同时也随年份、月份的变化而变化。
int CalculateDate(int y,int m,int d,int num){
    if(num == 0)
        return d + m*100 + y*10000;//如果增加天数为零,则输出原日期

    while(num != 0){
        switch(m){
            case 1:case 3:case 5:case 7:case 8:case 10:
            d = d + num;
            if(d > 31){
                m++;
                num = d - 31;//剩余天数
                d = 0;
            }
            else
                num = 0;//不超过该月,则跳出循环
            break;

            case 2:
            d = d + num;
            if((y%4 == 0 && y%100 != 0) || y%400 == 0){//判断是否为闰年
                if(d > 29){
                    m++;
                    num = d - 29;//闰年29天
                    d = 0;
                }
                else
                    num = 0;
            }
            else if(d > 28){
                m++;
                num = d - 28;
                d = 0;
            }
            else
               num = 0;

            break;

            case 4:case 6:case 9:case 11:
            d = d + num;
            if(d > 30){
                m++;
                num = d - 30;
                d = 0;
            }
            else
                num = 0;
            break;

            case 12:
            d = d + num;
            if(d > 31){
                m = 1;
                y++;//超过十二月则到下一年
                num = d - 31;
                d = 0;
            }
            else
                num = 0;
            break;
        }
      }
   return d + m*100 + y*10000;//输出形式为yyyy.MM.dd
}

四、结果演示

	QT部分的代码后续会上传github。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值