Yêu cầu:
Xây dựng một lớp Date mô tả thông tin về ngày, tháng, năm (month, day, year). Lớp Date gồm các hàm thành phần.
– Hàm tạo với ba tham số có giá trị ngầm định.
– Hàm in thông tin về ngày tháng dưới dạng dd-mm-yyyy
– Hàm nextDay() để tăng Date từng ngày một.
– Hàm validateDate() kiểm tra tính hợp lệ của yy/mm/yyyy
/************************************************************ * Author: VNCODING * History * 2016/03/21 first create VNCODING *************************************************************/ #include <iostream> #include <iomanip> #include <string.h> using namespace std; char month_table[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char leap_month_table[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //check leap year or not #define IS_LEAP_YEAR(year) ((year%400 == 0) || (year%4 == 0 && year%100 != 0))? true : false class CDate { private: int day; int month; int year; public: CDate(int d = 0, int m = 0, int y = 0): day(d), month(m), year(y) { } ~CDate() { } void print() { cout << setfill ('0') << setw(2) << day << "-" << setfill ('0') << setw(2) <<month << "-" << setfill ('0') << setw(4) << year << endl; } void nextDay() { day++; if (IS_LEAP_YEAR(year)) { if (day > leap_month_table[month-1]) { day = 1; month++; if (month > 12) { month = 1; year++; } } } else { if (day > month_table[month-1]) { day = 1; month++; if (month > 12) { month = 1; year++; } } } } bool validDate() { // validate dd/mm/yyyy if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31) { return false; } if (IS_LEAP_YEAR(year)) { if (day > leap_month_table[month-1]) { return false; } } else { if (day > month_table[month-1]) { return false; } } return true; } }; void main() { CDate date1(31, 12, 2000); if (date1.validDate()) { date1.print(); date1.nextDay(); date1.print(); } else { cout << "Invalid Date"; } system("pause"); }
Kết quả:
Leave a Reply
You must be logged in to post a comment.