Tuesday, December 9, 2014

Date program using in C++



Date Program
 
#include 
#include
#include 
#include 
using namespace std;
const string date::str_months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};                              
const int date::days_in_months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const string date::str_days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
bool date::isleapyear(int year) 
{
   return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
bool date::isvaliddate(int y, int m, int d)
 {
   if (y >= year_min && y <= year_max && m >= 1 && m <= 12)
 {
      int lastdayofmonth = days_in_months[m-1];
      if (m == 2 && isLeapYear(y)) 
     {
         lastdayofmonth = 29;
      }
      return (d >= 1 && d <= lastdayofmonth);
   } 
else 
{
      return false;
   }
}
int date::getdayofweek(int y, int m, int d) 
{
   int centurytable[] = {4, 2, 0, 6, 4, 2, 0, 6}; 
   int monthtable[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
   int monthleapyeartable[] = {6, 2, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
    int century = y / 100;
   int twodigityear = y % 100;
   int centurytableindex = (century - 17) % 8;
      if (centurytableindex < 0) 
     {
      centurytableindex += 8;
     }
 int sum = centurytable[centurytableindex] + twodigityear + twodigityear / 4;
   if (isleapyear(y)) 
  {
      sum += monthleapyeartable[m-1];
   } 
    else 
    {
      sum += monthtable[m-1];
   }
   sum += d;
   return sum % 7;
}
date::date(int y, int m, int d)
 {
   setdate(y, m, d);
}
void date::setdate(int y, int m, int d) 
{
   setyear(y);
   setmonth(m);
   setday(d); 
}
int date::getyear() const 
{
   return year;
}
void date::setyear(int y) 
{
   if (y >= year_min && y <= year_max) 
  {
      year = y;
   } 
      else 
   {
      throw invalid_argument("Error: Invalid year (1753-9999)!");
   }
}
int date::getmonth() const 
{
   return month;
}
void date::setmonth(int m) 
{
   if (m >= 1 && m <= 12) 
  {
      month = m;
   } 
   else 
   {
      throw invalid_argument("Error: Invalid month (1-12)!");
   }
}
 int date::getday() const 
{
   return day;
}
void date::setday(int d) 
{
   int lastdayofmonth = days_in_months[month-1];
   if (month == 2 && isleapyear(year)) 
  {
      lastdayofmonth = 29;
   }
   if (d >= 1 && d <= lastdayofmonth) 
  {
      day = d;
   } 
   else 
  {
      throw invalid_argument("Error: Invalid day (1-28|29|30|31)!");
   }
}
void date::print() const 
{
   cout << str_days[getdayofweek(year, month, day)] << ", "
        << day << " " << str_months[month-1] << " " << year << endl;
}
date& date::nextday() 
{
   int lastdayofmonth = days_in_months[month-1];
   if (month == 2 && isleapyear(year)) 
  {
      lastdayofmonth = 29;
   }
    if (++day > lastdayofmonth) 
   {
      day = 1;
      if (++month > 12) 
      {
         month = 1;
         if (++year > year_max) 
        {
            throw out_of_range("Error: Next day is out of range!");
         }
      }
   }
   return *this;
}
date& date::previousday() 
 {
   int lastdayofmonth = days_in_months[month-1];
   if (month == 2 && isleapyear(year)) 
  {
      lastdayofmonth = 29;
   }
            if (--day < 1) 
              {
      day = lastdayofmonth;
      if (--month < 1) 
        {
         month = 12;
         if (--year < year_min) 
         {
            throw out_of_range("Error: Previous day is out of range!");
         }
      }
   }
   return *this;
}
date& date::nextmonth() 
{
   if (++month > 12) 
     {
      month = 1;
      if (++year > year_max) 
     {
         throw out_of_range("Error: Next month is out of range!");
      }
   }
   int lastdayofmonth = days_in_months[month-1];
   if (month == 2 && isleapyear(year)) 
  {
      lastdayofmonth = 29;
   }
   if (day > lastdayofmonth) 
     {
      day = lastdayofmonth;
   }
   return *this;
}
date& date::previousmonth() 
{
   if (--month < 1) 
   {
      month = 12;
      if (--year < year_min) 
      {
         throw out_of_range("Error: Previous month is out of range!");
      }
   }
   int lastdayofmonth = days_in_months[month-1];
   if (month == 2 && isLeapYear(year)) 
  {
      lastdayofmonth = 29;
   }
   if (day > lastdayofmonth) 
  {
      day = lastdayofmonth;
   }
   return *this;
}
date& date::nextyear() 
{
   if (++year > year_max) 
  {
      throw out_of_range("Error: Next year is out of range!");
   }
   if (month == 2 && day == 29 && !isLeapYear(year)) 
  {
      day = 28;
   }
   return *this;
}
date& date::previousyear() 
{
   if (--year < year_min) 
   {
      throw out_of_range("Error: Previous year is out of range!");
   }
    if (month == 2 && day == 29 && !isLeapYear(year)) 
   {
      day = 28;
   }
   return *this;
}

No comments:

Post a Comment