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)


    {
    	/*** Bad Month ***/
    	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[13] =  { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
		 if ( isLeapYear(year) )
             monthLength[2] = 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.

from: c++ checkdate date validation

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;
}
Comments
useful
bool data(int dzien,int miesiac,int rok){
int rokp[13] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//tablica przestepna
int rokz[13] = { 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?

This article has been dead for over six months. Start a new discussion instead.