March 31, 2011

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;

0推薦此文章
Today's Visitors: 0 Total Visitors: 15
Personal Category: Uncategorized Articles Topic: learning / education / linguistic
[Trackback URL]

Post A Comment









Yes No



Please input the magic number:

( Prevent the annoy garbage messages )
( What if you cannot see the numbers? )
Please input the magic number

誰來收藏
Loading ...
unlog_NVPO 0