Hi guys, I'm working on a Date class to store month, day and year and print out the date in question. I've defined three constructors - a default one (Jan 1, 1900), a constructor to take month as number (int m, int d, int y) and another for taking month name as string (string m_name, int d, int y). To help me set up the object correctly, I've implemented several helper functions such as leap year test and an accessor to return days per month for that particular month. Here's the scenario with my code (in C++): * Class name: Date. * Encapsulated data: three ints (month, day, year) and a string (month_name). * Member functions: Three constructors (default, two parameterized ones), two print functions (numeric date output and alpha date output). * Private helpers: leap year test (bool), return month name for a month number (string), return month number for a month name (int), days per month (int). // Code: // Second parameterized constructor: month as name. // A bit more complicated than last time, but a bit easier at first glance. // Use the helper function to get the month number based on a month name e.g. July for 7. // In case of wrong input, which I need to check regularly, send out an error message and set the correct date. // For instance, if one types one/1/2010, I should set it to current_month/1/2010 e.g. 7/1/2010. // It'll be better to leave the other guys alone and just put the current month name to the screen. However, becauswe of the framework rule, I need to put in 1/1/1900. Date::Date(string m_name, int d, int y) { month = number(m_name); month_name = name(month); bool day_error = true; // To check for date entry. if (d < 1) this->day = 1; else if (d > days_per_month(month, y)) this->day = days_per_month(month, y); else day_error = false; this->day = d; this->year = y; // After our checking code... if (day_error) {cout << "Error: invalid day entered: " << d << endl; cout << "Day reset to: " << day << endl; this->print_numeric(); } } // End of constructors. // Other needy ones... // Print date in numeric form e.g. 7/1/2010. void Date::print_numeric() const { cout << month << "/" << day << "/" << year << endl; } // Print date in alpha form e.g. July 1, 2010. void Date::print_alpha() const { cout << month_name << " " << day << ", " << year << endl; } // The following are helper functions - just to help out our Date object. // Leap year test: A leap year is ones divisible by 4 and if they are divisible by 400. // For instance, 1700, 1800, 1900 and 2100 are regular years and 1996, 2000 and 2012 are leap years. // This function will check the year (the int argument) to see if the remainder of modulus 4 is zero or not - useful for putting February 29th. bool Date::is_leap(int y) const { return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)); } // Days per month: 30 for April, June, September and November, 31 for others except Feb. // In case of February, use is_leap to help determine whether it should be 28 (false) or 29 (true). int Date::days_per_month(int m, int y) const { if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) return 31; if (m == 4 || m == 6 || m == 9 || m == 11) return 30; if (m == 2) { if (is_leap(y)) return 29; else return 28; } return 0; // can never reach this point } So, for example, if I type "Jan 32, 2010" into the console (all three variables using separate output), I'm supposed to get an error message about invalid input, then the day should be reset to days per month, which is 31. In my case, it does not happen - the "day" in the constructor is set to the date I've entered no matter what e.g. it'll print 1/32/2010 via print_numeric function. After extensive testing, I found that it must be a constructor error (my instructor was a bit puzzled about this code as well). Thanks for your considerations on fixing this problem. Cheers, Joseph __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind