时间计算器
一、实验概述
实验题目:时间计算器。
实验目的:图形界面的设计。学习使用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。