TheOS.IN

C++ program to calculate tomorrow’s date

Q. How do I write C++ program that calculate tomorrow’s date? For example user input a date 30/03/2007, then it should print 31/03/2007. Your program must take care of following issues:
=> Leap year
=> Validate date for month, day etc
=> Change of date/month/year should be handled properly.

A:

Source code : tdate.cpp

#include<iostream>
 
#define TRUE 1
#define FALSE 0
 
using namespace std;
 
class mydate{
   int day;
   int month;
   int year;
public:
   void readdate();
   int isLeapYear();
   string month2string();
   int exceedsDaysInMonth();
   void tommorow();
};
 
// Input date from user
void mydate::readdate(){
   cout << "Enter day (dd - 23 ) : ";
   cin >> day;  
   cout << "Enter Month (mm - 04 ) : ";
   cin >> month;  
   cout << "Enter year (yyyy - 2007 ) : ";
   cin >> year;  
}
// make sure month days are correct
// return TRUE if days exceeds in a month
int mydate::exceedsDaysInMonth(){
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  if ( month < 1 || month > 12 || day > days[month-1])
     return TRUE;
  else 
     return FALSE;
}
// convert numeric month into string
string mydate::month2string(){
   char *months[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
   if ( exceedsDaysInMonth() ) {
    if ( ! (month < 1 || month > 12) ) 
       return months[month-1]; 
    else
       return "Unknown month";
   }
   else
    return "Unknown month";
}
// return TRUE if a year is leap
int mydate::isLeapYear(){
   if ( (year % 4)  != 0 ){
      return FALSE;
   }
   else if ( (year % 400)  != 0 ){
      return TRUE;
   }
   else if ( (year % 100)  == 0 ){
      return FALSE;
   }
   else
   {
      return FALSE;
   }
}
// validate and calculate tommorows date
void mydate::tommorow(){
  int td, tm, ty;
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  if ( year < 0 ){
       cerr << year << " is not a valid year" << endl;
       exit(1);
  }
  if ( exceedsDaysInMonth() ){
    if ( month == 2 && day == 29 ){
        if ( ! isLeapYear() ){
          cerr << year << " is not a leap year, so Feb doesn't have 29 days" << endl;
          exit(1);
        }
    }
    else
    {
      cerr << "Bad day value month - " << month << " (" << month2string();
      cerr <<  ") doesn't have " << day << " days "<< endl;
      exit(1);
    }
  }
  // calculate tommorow
 td=day;
 tm=month;
 ty=year;
 td++;
 if ( td > days[month-1]){
   td=1;
   tm++;
   if ( tm > 12 ) 
    { ty++; tm=1; }
 }
 cout << "Valid date, found and tommorow is " <<  td << "/" <<  tm << "/" <<  ty << endl;
}
 
// main
int main(){
  mydate date;
  date.readdate();
  date.tommorow();
  return 0;
}

Compile and execute code

To compile code under UNIX/Linux, enter:
$ make tdate
OR
$ g++ -o tdate tdate.cpp

To execute code under Linux/UNIX, enter:
$ ./tdate

A note for TC++ 3.0 (DOS version) users

Replace line
#include<iostream>
With
#include<iostream.h>
Save the file and compile/run code from menu.

Please note that above code should work with another compiler (such as VC++) without modification.

Download source code

Click here to download source code.

Exit mobile version