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
Code:
/************************************************************/
#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ả:
1 2 |
31-12-2000 01-01-2001 |
Leave a Reply