Time and Date class error.

I have class that I have to modify. the problem in the output. I don't why it did not pass the month. Please.. please... some help.
this the head file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef DATEANDTIME_H
#define DATEANDTIME_H

class DateAndTime
{
	public:
		DateAndTime (int = 1, int = 1, int = 1900,
			int = 0, int = 0, int = 0);
		void setDate (int, int, int);
		void setMonth (int);
		void setDay (int);
		void setYear(int);
		void nextDay ();
		void setTime(int, int, int);
		void setHour (int);
		void setMinute(int);
		void setSecond (int);
		void tick();
		int getDay();
		int getMonth();
		int getYear();
		int getHour();
		int getMinute();
		int getSecond();
		void printStandard();
		void printUniversal();
private:
	int year, month, day, hour, minute, second;
	bool leapYear();
	int monthDays();

};

#endif 

This is DateAndTime.cpp class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <iostream>
#include<ctime>
#include <iomanip>
#include "DateAndTime.h"
using namespace std;

DateAndTime::DateAndTime (int m, int d, int y, int h, int min, int sec)
{	
	setDate(m, d, y);
	setTime(h, min, sec);
}

void DateAndTime::setTime(int hr, int min, int sec)
{
	setHour(hr);
	setMinute(min);
	setSecond(sec);
}
void DateAndTime::setDate(int mo, int d, int y)
{
	setMonth(mo);
	setDay(d);
	setYear(y);

}
void DateAndTime::setHour(int hr)
{
	if (hr >= 0 && hr < 24)
	{
		hour = hr;
	}
	else
		hour = 0;

}
void DateAndTime::setMinute(int min)
{
	if (min >= 0 && min <60)
	{minute = min;}
	else
		minute =0;
	
}
void DateAndTime::setSecond(int s)
{
	if (s >= 0 && s <60)
	{second = s;} else second = 0;
	
}
void DateAndTime::setMonth(int mo)
{
	/*if(mo < 13 && mo >= 1)
	{month = mo;}else month = 1;*/
	month = mo <= 12 && mo >= 1 ? mo: 1;
	
}
void DateAndTime::setDay(int d)
{
	if (month == 2 && leapYear())
	{
		if(d <= 29 && d >=1)
		{day = d;}
		else 
			day = 1;

	}
	else
	{
		if (d <= monthDays() && d >= 1)
		{day = d;}
		else 
			day = 1;
	}

}
void DateAndTime::setYear(int y)
{
	if (y >= 1900)
	{year = y;} else year = 1900;
	

}
int DateAndTime::getHour()
{
	return hour;
}
int DateAndTime::getMinute()
{
	return minute;
}
int DateAndTime::getSecond()
{
	return second;
}
int DateAndTime::getMonth()
{
	return month;
}
int DateAndTime::getDay()
{
	return day;
}
int DateAndTime::getYear()
{
	return year;
}
void DateAndTime::tick()
{
	setSecond(second+1);

	if (second == 0)
	{
		setMinute(minute+1);
		//minute = 0;
	
		if (minute == 0)
		{
			setHour(hour+1);
			//hour = 0;
		
			if (hour == 0)
			
				//setDay(day++);
				nextDay();
			
		}
	}

}
void DateAndTime::nextDay()
{
	setDay(day +1);
	if(day ==1)
	{
		setMonth (month + 1);
		if (month == 1)
			setYear(year +1);
	}
}
bool DateAndTime::leapYear()
{
	
	if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
	return true;
	else
		return false;
}
int DateAndTime::monthDays()
{
	const int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

	if (month == 2 && leapYear())
	{return month = 29;}
	else 
		return month = days[(month -1)];
	
}
void DateAndTime::printStandard()
{
	cout<< ((hour % 12 == 0) ? 12 : hour % 12) << ":"
		<< (minute < 10 ? "0" : "") << minute << ":"
	    << (second < 10 ? "0" : "") << second << 
		(hour < 12 ? " AM " : " PM ") << "  "
	    << month << '_' << day << '_' << year << endl;

}
void DateAndTime::printUniversal()
{
	cout<< (hour < 10 ? "0" : "") << hour << ":"
	 << (minute < 10 ? "0" : "") << minute << ":"
	 << (second < 10 ? "0" : "") << second << "  "
	 << month << '_' << day << '_' << year << endl;

}

This is the test file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include "DateAndTime.h"

using namespace std;

int main()
{
	const int MAX = 30;
	DateAndTime s (12, 31, 2012, 23, 59, 57);

	for (int i = 1; i <= MAX; i++)
	{
		cout << "Universal Time";
		s.printUniversal();
		cout <<" Standard Time";
		s.printStandard();
		s.tick();
	}
	cout << endl;

	system ("pause");
	return 0;

}


This is my output and it prints 31 instead of 12

Universal Time23:59:57  31_31_2012
 Standard Time11:59:57 PM   31_31_2012
Universal Time23:59:58  31_31_2012
 Standard Time11:59:58 PM   31_31_2012
Universal Time23:59:59  31_31_2012
 Standard Time11:59:59 PM   31_31_2012
Universal Time00:00:00  1_1_2013
 Standard Time12:00:00 AM   1_1_2013
Universal Time00:00:01  1_1_2013
 Standard Time12:00:01 AM   1_1_2013
Universal Time00:00:02  1_1_2013
 Standard Time12:00:02 AM   1_1_2013
Universal Time00:00:03  1_1_2013
 Standard Time12:00:03 AM   1_1_2013
Universal Time00:00:04  1_1_2013
 Standard Time12:00:04 AM   1_1_2013
Universal Time00:00:05  1_1_2013
 Standard Time12:00:05 AM   1_1_2013
Universal Time00:00:06  1_1_2013
 Standard Time12:00:06 AM   1_1_2013
Universal Time00:00:07  1_1_2013
 Standard Time12:00:07 AM   1_1_2013
Universal Time00:00:08  1_1_2013
 Standard Time12:00:08 AM   1_1_2013
Universal Time00:00:09  1_1_2013
 Standard Time12:00:09 AM   1_1_2013
Universal Time00:00:10  1_1_2013
 Standard Time12:00:10 AM   1_1_2013
Universal Time00:00:11  1_1_2013
 Standard Time12:00:11 AM   1_1_2013
Universal Time00:00:12  1_1_2013
 Standard Time12:00:12 AM   1_1_2013
Universal Time00:00:13  1_1_2013
 Standard Time12:00:13 AM   1_1_2013
Universal Time00:00:14  1_1_2013
 Standard Time12:00:14 AM   1_1_2013
Universal Time00:00:15  1_1_2013
 Standard Time12:00:15 AM   1_1_2013
Universal Time00:00:16  1_1_2013
 Standard Time12:00:16 AM   1_1_2013
Universal Time00:00:17  1_1_2013
 Standard Time12:00:17 AM   1_1_2013
Universal Time00:00:18  1_1_2013
 Standard Time12:00:18 AM   1_1_2013
Universal Time00:00:19  1_1_2013
 Standard Time12:00:19 AM   1_1_2013
Universal Time00:00:20  1_1_2013
 Standard Time12:00:20 AM   1_1_2013
Universal Time00:00:21  1_1_2013
 Standard Time12:00:21 AM   1_1_2013
Universal Time00:00:22  1_1_2013
 Standard Time12:00:22 AM   1_1_2013
Universal Time00:00:23  1_1_2013
 Standard Time12:00:23 AM   1_1_2013
Universal Time00:00:24  1_1_2013
 Standard Time12:00:24 AM   1_1_2013
Universal Time00:00:25  1_1_2013
 Standard Time12:00:25 AM   1_1_2013
Universal Time00:00:26  1_1_2013
 Standard Time12:00:26 AM   1_1_2013

Press any key to continue . . .

In your DateAndTime::monthDays() function, you are returning month = to the number of days calculated in the function. In this case you are setting month equal to 31.
yes yes you right. solve it.
Finally ahhhhh.....
I did this
return (month == 2 && leapYear()) ? 29 : days[(month-1)];
and it solve the problem. thank you so much dude..

:)
You're quite welcome.
Topic archived. No new replies allowed.