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.