简易程序2014年11月14至2015年1月16日一共多少天?
你好,为你用C++编写了一个计算天数的简易程序;已将首天和末天设为
2014年11月14和2015年1月16日;
代码如下:
#include <iostream>
using namespace std;
class date //声明DATE类
{
int year;//声明类成员year
int month;//声明类成员month
int day;//声明类成员day
public://以下为公有属性
date(int y, int m, int d) //构造函数,传入参数y,m,d
{
year = y; month = m; day = d; //分别赋值给类成员year,month,day
}
void disp()//显示年月日函数
{
cout << year << "." << month << "." << day << endl;//分别显示年月日,格式为年.月.日
}
friend int count_day(date &d, int); //声明友元函数 count_day 天数双向计算函数,方向由传入的int是否为0决定
friend int leap(int year);//声明友元函数leap 判断传入的year是否是闰年
friend int subs(date d1, date d2);//声明友元函数subs 计算两个传入的date对象d1和d2相差多少天
};
int count_day(date &d, int flag) //count_day实现
{
static int day_tab[2][12] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; //每月天数数组,下标0为非闰年各月天数,下标1为闰年
int p, i, s;//声明变量p,i,s
if (leap(d.year))//如果传入对象d的year成员为闰年
p = 1; //则取数组下标为1
else
p = 0;//否则取0
if (flag)//如果传入的flag变量非0
{
s = d.day;//s等于当月的天数
for (i = 1; i<d.month; i++) //循环,加上之前每月的天数
s += day_tab[p][i - 1];
}
else //否则,当flag=0
{
s = day_tab[p][d.month] - d.day; //s=该月天数减去d的日数(也就是日期d离本月结束还有多少天)
for (i = d.month + 1; i <= 12; i++) //循环,加上该月之后每月的天数
s += day_tab[p][i - 1];
}
return(s);//返回s
}
int leap(int year)//闰年判断函数,是闰年返回1,否则返回0
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return 1;
else
return 0;
}
int subs(date d1, date d2) //计算d1和d2相距多少天
{
int days, day1, day2, y;
if (d1.year<d2.year) //如果d2年份大于d1
{
days = count_day(d1, 0); //计算d1距年底还有多少天
for (y = d1.year + 1; y<d2.year; y++) //计算d1年份的之后一年到d2的年份的之前一年中间相隔多少天
if (leap(y)) //是闰年就加366天
days += 366L;
else
days += 365L;//否则加365天
days += count_day(d2, 1); //计算d2所在年到d2所在日有多少天
}
else if (d1.year == d2.year) //如果年份相等
{
day1 = count_day(d1, 1);//计算d1距年初有多少天
day2 = count_day(d2, 1);//计算d2距年初有多少天
days = day2 - day1;//相减即为相隔天数
}
else//否则,即如果d1年份大于d2,反向计算,过程基本同第一个if
{
days = count_day(d2, 0);
for (y = d2.year + 1; y<d1.year; y++)
if (leap(y))
days += 366L;
else
days += 365L;
days += count_day(d1, 1);
}
return days;
}
void main()//主函数
{
date d1(2014, 11, 14), d2(2015, 1, 16);
int ds = subs(d1, d2);//调用函数subs计算天数,赋值给ds
cout << "日期d1:"; d1.disp(); //显示日期d1
cout << "日期d2:"; d2.disp();//显示日期d2
cout << "d1至d2一共" << ds << "天(注:d1不计算在内而d2计算在内)" << endl;//输出天数ds
}
运行结果如下:
即2014年11月14日至2015年1月16日一共64天(2014年11月14日不计算在内而2015年1月16日计算在内)。