hello!

I need a program that validates the imput of dates. (Checks for leap years etc.)

The user enters: mm/dd/yyyy

The problem is, I have trouble with complex programs. I came up with this program, but i know it's too basic for what she wants. I need to have arrays in there, but i don't know how. I would love any help considering I'm bad at understanding this subject.

:)

could someone help me ???!!!

``````bool GoodDate(int month,int day,int year)

{
if(month < 1 || month > 12)
return false;

/*** January ***/
else if(month == 1)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** Febuary ***/
else if(month == 2) // divisible by 4 and either divisible by 400 or not divisible by 100

{
/*** if the year is a leap year... ***/
if(year % 4 == 0 && (year % 400 == 0 || year % 100 != 0))

{
if(day >= 1 && day <= 29)
return true;
else
return false;
}
/*** if the year is not a leap year... ***/
else

{
if(day >=1 && day <= 28)
return true;
else
return false;
}
}

/*** March ***/
else if(month == 3)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** April ***/
else if(month == 4)

{
if(day >=1 && day<= 30)
return true;
else
return false;
}

/*** May ***/
else if(month == 5)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** June ***/
else if(month == 6)

{
if(day >=1 && day<= 30)
return true;
else
return false;
}

/*** July ***/
else if(month == 7)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** August ***/
else if(month == 8)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** September ***/
else if(month == 9)

{
if(day >=1 && day<= 30)
return true;
else
return false;
}

/*** October ***/
else if(month == 10)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}

/*** November ***/
else if(month == 11)

{
if(day >=1 && day<= 30)
return true;
else
return false;
}

/*** December ***/
else if(month == 12)

{
if(day >=1 && day<= 31)
return true;
else
return false;
}
else

{
cout<<"Error\n";
exit(0);
}
return false;
}``````

Let me give you this hint - since several of the months have the same behavior - ie 1,3,5,7,8,10,12 are all 31 days, while 4,6,9,11 are all 30 days, then you could easily use a 'switch' statement on your month and not have to repeat all of that logic.

okay I came up with something a little more complex, but it's still not working. I know it's somewhere within my functions (either the bools or whatnot)......basically it's not telling them they entered an invalid date.

Any help?? I didn't put it in there, because I can't figure out where it goes logically.

/

``````************************Includes**************************************/

# include<iostream>
# include<iomanip>
using namespace std;

/************************Function call*********************************/

int isLeapYear(int year);                                //function
int dateIsValid (int day, int month, int year);          //function

/***********************Main******************************************/

int main()
{
int value1, value2, value3;
char again;

do
{
cout << "Enter the day, month, and year. \n";
cin  >> value1 >> value2 >> value3;
dateIsValid(value1, value2, value3);               //call function
cout << value1<<" "<< value2 <<" "<< value3<<endl;
cout << " Do you want to enter another date? (Y/N)";
cin >>again;

}while (again =='Y' || again =='y');

return 0;
}

/*************************FUNCTION*********************************/

int dateIsValid(int day, int month, int year)

{
bool valid;
int monthLength =  { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

if ( isLeapYear(year) )
monthLength = 29;    //  29 days in February in a leap year

if ( month < 1 || month > 12 )
valid = false;
else if ( day < 1 || day > monthLength[month] )
valid = false;

return ( valid );

}

/****************************FUNCTION*******************************************/

int isLeapYear(int year)
{
bool result;

if ( (year%4) != 0 )               //  or:    if ( year%4 )
result = false;                 //  means: if year is not divisible by 4
else if ( (year%400) == 0 )        //  or:    if ( !(year%400) )
result = true;                  //  means: if year is divisible by 400
else if ( (year%100) == 0 )        //  or:    if ( !(year%100) )
result = false;                //  means: if year is divisible by 100
else                              //  (but not by 400, since that case
result = true;                //  considered already)

return ( result );

}``````

put ur whole code so I can find the problem I did the same thing last week for my assignment.

These examples are overly complicated. I found a simple one that totally handles leap years.

``````bool checkdate(int m, int d, int y)
{
//gregorian dates started in 1582
if (! (1582<= y )  )//comment these 2 lines out if it bothers you
return false;
if (! (1<= m && m<=12) )
return false;
if (! (1<= d && d<=31) )
return false;
if ( (d==31) && (m==2 || m==4 || m==6 || m==9 || m==11) )
return false;
if ( (d==30) && (m==2) )
return false;
if ( (m==2) && (d==29) && (y%4!=0) )
return false;
if ( (m==2) && (d==29) && (y%400==0) )
return true;
if ( (m==2) && (d==29) && (y%100==0) )
return false;
if ( (m==2) && (d==29) && (y%4==0)  )
return true;

return true;
}``````
commented: useful +11

A few years late, blacklight?

``````bool data(int dzien,int miesiac,int rok){
int rokp = { 31,29,31,30,31,30,31,31,30,31,30,31 };//tablica przestepna
int rokz = { 31,28,31,30,31,30,31,31,30,31,30,31 };//tablica zwykla

if(rok>=0){//rok
if((rok%4 == 0 && rok%100 != 0) || rok%400 == 0){//przestepny
if(miesiac<=12){//miesiace
if(dzien>0 && rokp[miesiac-1]>=dzien){return true;}else{return false;}//dnie
}
}else{//zwykly
if(miesiac<=12){//miesiace
if(dzien>0 && rokz[miesiac-1]>=dzien){return true;}else{return false;}//dnie
}
}
}//rok
}``````

Please use English when posting on this formun. Another thing, you do realize this thread died over 2 years ago?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.18 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.