#include using namespace std; struct Date { int day; int month; int year; }; int LeapYear(Date& a) { if (a.year % 4 == 0 && a.year % 100 != 0 || a.year % 400 == 0) { return 1; } return 0; } int SoNgayTrongThang(Date a) { switch (a.month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2:if (LeapYear(a)) return 29; else return 28; } } int ValidityofDate(Date a) { if (a.month > 0 && a.month < 13) { switch (a.month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if (a.day > 0 && a.day <= 31 && a.year > 0) return 1; case 4: case 6: case 9: case 11: if (a.day > 0 && a.day <= 30 && a.year > 0) return 1; case 2: if (LeapYear(a)) { if (a.day > 0 && a.day <= 29 && a.year > 0) return 1; } else { if (a.day > 0 && a.day <= 28 && a.year > 0) return 1; } } } return 0; } void PreviousDay(Date a) { switch (a.month) { case 1: if (a.day == 1) cout << SoNgayTrongThang(a) << "/12/" << a.year-1; else cout << a.day - 1 << "/" << a.month << "/" << a.year; break; case 5: case 7: case 8: case 10: case 12: if (a.day == 1) cout << SoNgayTrongThang(a) - 1 << "/" << a.month - 1 << "/" << a.year; else cout << a.day - 1 << "/" << a.month << "/" << a.year; break; case 4: case 6: case 9: case 11: if (a.day == 1) cout << SoNgayTrongThang(a) + 1 << "/" << a.month - 1 << "/" << a.year; else cout << a.day - 1 << "/" << a.month << "/" << a.year; break; case 2: if (a.day == 1) cout << "31/1/" << a.year; else cout << a.day - 1 << "/" << a.month << "/" << a.year; break; case 3: if (a.day == 1) { if(LeapYear(a)) cout << "29/" << a.month - 1 << "/" << a.year; else cout << "28/" << a.month - 1 << "/" << a.year; } else cout << a.day - 1 << "/" << a.month << "/" << a.year; break; } } void NextDay(Date a) { switch (a.month) { case 1: case 3: case 5: case 7: case 8: case 10: if (a.day == 31) cout << "1/" << a.month + 1 << "/" << a.year; else cout << a.day + 1 << "/" << a.month << "/" << a.year; break; case 12: if (a.day == 31) cout << "1/1/" << a.year+1; else cout << a.day + 1 << "/" << a.month << "/" << a.year; break; case 4: case 6: case 9: case 11: if (a.day == 30) cout << "1/" << a.month + 1 << "/" << a.year; else cout << a.day + 1 << "/" << a.month << "/" << a.year; break; case 2: if (LeapYear(a)) { if(a.day==29) cout << "1/" << a.month + 1 << "/" << a.year; else cout << a.day + 1 << "/" << a.month << "/" << a.year; } else { if (a.day == 28) cout << "1/" << a.month + 1 << "/" << a.year; else cout << a.day + 1 << "/" << a.month << "/" << a.year; } break; } } void main() { Date m; cout << "Nhap ngay, thang, nam:"; cin >> m.day >> m.month >> m.year; cout << m.day << "/" << m.month << "/" << m.year << endl; cout << "===============Menu==============" << endl; cout << " 1: Ngay hom truoc" << endl; cout << " 2: Ngay hom sau" << endl; cout << " 3: Exit " << endl; cout << " ================================" << endl; int k; do { cout << "Nhap yeu cau muon thuc hien:"; cin >> k; switch (k) { case 1: if (ValidityofDate(m)) { cout << "Ngay hom truoc:"; PreviousDay(m); cout << endl; } else cout << "Vui long nhap lai" << endl; break; case 2: if (ValidityofDate(m)) { cout << "Ngay hom sau:"; NextDay(m); cout << endl; } else cout << "Vui long nhap lai" << endl; break; default: return; } } while (k > 0 && k < 2); }