class 日期相差
/*許巧慧---B09902147---資工一丙*
*--------日期算天數-----------*
元素:
年year,月month,日day
星期 week
方法:
int sum; -->回傳相差的天數
setData(int,int,int); --> 設定日期一
setData2(int,int,int); --> 設定日期二
setyear(int); --> 設定時間點年(一)
setmonth(int); --> 設定時間點年(二)
setday(int); --> 設定日(一)
setyear2(int); --> 設定日(二)
setmonth2(int);--> 設定月(一)
setday2(int); --> 設定月(二)
getData(); --> 取得第一個日期
LeapYear(int); --> 是否閏年的判斷
print_week(); --> 印出星期
cal_day(); --> 判斷輸入的日期是否有誤
cal_two(); --> 計算天數
get_days(); --> 得到天數 */
#include<iostream>
using namespace std;
class Data
{
private:
int year;
int month;
int day;
char *week;
public:
int sum;
Data(char*);
Data(int=0,int=0,int=0);
Data(int);
void setData(int,int,int);
void setData2(int,int,int);
void setyear(int);
void setmonth(int);
void setday(int);
void setyear2(int);
void setmonth2(int);
void setday2(int);
void getData();
bool LeapYear(int);
void print_week();
void cal_day();
void cal_two(); //計算天數
int get_days(); //得到天數
};
/*建構子*/
Data::Data(char*x)
{
x=week;
}
Data::Data(int y,int m,int d)
{
year=0;
month=1;
day=1;
}
void Data::setData(int y,int m,int d)
{
setyear(y);
setmonth(m);
setday(d);
}
void Data::setData2(int y2,int m2,int d2)
{
setyear2(y2);
setmonth2(m2);
setday2(d2);
}
void Data::setyear(int y)
{
year = y;
}
void Data::setmonth(int m)
{
month = m;
}
void Data::setday(int d)
{
day = d;
}
void Data::setyear2(int y2)
{
year = y2;
}
void Data::setmonth2(int m2)
{
month = m2;
}
void Data::setday2(int d2)
{
day = d2;
}
/*是否為潤年*/
bool Data::LeapYear(int year)
{
if((year % 400 == 0) || (year % 100 != 0) && (year % 4 == 0)) return true;
else return false;
}
/*算一個時間點與0000/1/1相差多少天
yearnum此年內算閏年的次數
monthsum此月內算月分的天數
yearday此年內算年的天數
year - yearnum -->此年內的非閏年
sum -->相差天數*/
void Data::cal_two()
{
int yearnum =0,yearday=0,monthsum =0;
for(int i =0;i<year;i++)
{
if (LeapYear(i)== true) yearnum++;
}
yearday = ( (year - yearnum)*365 )+(yearnum *366);
for(int j=0;j<month;j++)
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
monthsum+=31;
break;
case 4:
case 6:
case 9:
case 11:
monthsum += 30;
break;
case 2:
if(LeapYear(year) == true) monthsum += 29;
else monthsum+= 28;
break;
default:
break;
}
}
sum=monthsum+yearday+day;
}
int Data::get_days()
{
return sum;
}
/*時間點一判斷是否輸入正確*/
void Data::cal_day()
{
bool flag;
flag = true;
while(flag)
{
if((month >= 1 && month <= 12))
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day <= 31 && day >= 1) flag = false;
else cout << "請輸入正確的日期!!\n";
break;
case 4:
case 6:
case 9:
case 11:
if(day <= 30 && day >= 1) flag = false;
else cout << "請輸入正確的日期!!\n";
break;
default:
if(LeapYear(year))
{
if(day <= 29 && day >= 1) flag = false;
else cout << "請輸入正確的日期!!\n";
}
else
{
if(day <= 28 && day >= 1) flag = false;
else cout << "請輸入正確的日期!!\n";
}
break;
}
}
}
}
/*印出兩時間點*/
void Data::getData()
{
cout <<" 兩個時間點 : "<< year <<"/"<< month <<"/"<< day <<"\n";
}
int main(void)
{
int i,j,y,m,d,y2,m2,d2,daysum=0;
Data x[7]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
Data a1,a2;
cout<<" 輸入第一個時間點 \n";
cin>>y>>m>>d;
cout<<" 輸入第二個時間點 \n";
cin>>y2>>m2>>d2;
a1.setData(y,m,d);
a2.setData2(y2,m2,d2);
a1.cal_day();
a2.cal_day();
a1.LeapYear(y);
a2.LeapYear(y2);
system("cls");
a1.getData();
a2.getData();
a1.cal_two();
a2.cal_two();
if(a1.sum>a2.sum) daysum = a1.sum-a2.sum ;
else daysum =a2.sum-a1.sum;
cout<<"\n " << " 相差 " << daysum << " 天 ";
system("pause");
return 0;
}









