Xây dựng một lớp Date mô tả thông tin về ngày, tháng, năm (month, day, year).

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ả:

Xây dựng một lớp Date mô tả thông tin về ngày, tháng, năm (month, day, year).
Xây dựng một lớp Date mô tả thông tin về ngày, tháng, năm (month, day, year).

Be the first to comment

Leave a Reply