Đây là đoạn code em làm, có j sai sót các bác coi dùm
Còn đây là trong voidMain()
- Code:
class NgayThang
{
private int ngay;
private int thang;
private int nam;
//Hàm khởi tạo
public NgayThang()
{
nam = 1900;
thang = 1;
ngay = 1;
}
//Khởi tạo có tham sô
public NgayThang(int pNam, int pThang, int pNgay)
{
Nam = pNam;
Thang = pThang;
Ngay = pNgay;
}
public int Nam
{
set
{
if (value > 1900) nam = value;
else throw new Exception("Nam ban nhap phai lon hon 1900\n\n");
}
get
{
return nam;
}
}
public int Thang
{
set
{
if (value <= 12 && value >= 1) thang = value;
else throw new Exception("Thang ban nhap phai tu 1 -> 12.\n\n");
}
get
{
return thang;
}
}
public int Ngay
{
set
{
if (value >= 1 && value <= SoNgayCuaThang(thang)) ngay = value;
else throw new Exception(String.Format("Nam {0}, thang {1}, ngay ban nhap phai tu 1 ->{2}", nam, thang, SoNgayCuaThang(thang)));
}
get
{
return ngay;
}
}
//Ham xac dinh co phai Nam nhuan hay khong.
private bool NamNhuan(int pNam)
{
if (pNam % 400 == 0) return true;
else return (pNam % 100 != 0) & (pNam % 4 == 0);
}
//Ham xac dinh so ngay cua mot thang.
public int SoNgayCuaThang(int pThang)
{
int[] dayOf = new int[] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (NamNhuan(nam)) dayOf[2] = 29;
return dayOf[pThang];
}
//Hàm tăng n ngày:
public void Tang(int pSoNgayTang)
{
//Tăng ngày lên mà chưa bị tràn qua tháng khác.
if (!VuotNgay(pSoNgayTang, "Tang")) ngay = ngay + pSoNgayTang;
//Tăng ngày lên và bị tràn qua tháng khác. VD:đang ngày 30, tăng 3->sang tháng khác.
else
{
//Tháng tăng lên nhưng chưa bị tràn qua năm khác.
if (!VuotThang("Tang"))
{
pSoNgayTang = pSoNgayTang + ngay - SoNgayCuaThang(thang);
thang++;
ngay = 0;
Tang(pSoNgayTang);
}
//Tháng tăng lên và bị tràn qua năm khác. VD: đang 31/12/2009, tăng 2 ngày-> 2/1/2001.
else
{
pSoNgayTang = pSoNgayTang + ngay - SoNgayCuaThang(thang);
nam++;
ngay = 0;
thang = 1;
Tang(pSoNgayTang);
}
}
}
//Hàm giảm n ngày (Tương tự như tăng):
public void Giam(int pSoNgayGiam)
{
if (!VuotNgay(pSoNgayGiam, "Giam"))
{
ngay = ngay - pSoNgayGiam;
}
else
{
if (!VuotThang("Giam"))
{
pSoNgayGiam = pSoNgayGiam - ngay;
thang--;
ngay = SoNgayCuaThang(thang);
Giam(pSoNgayGiam);
}
else
{
pSoNgayGiam = pSoNgayGiam - ngay;
nam--;
ngay = SoNgayCuaThang(thang);
thang = 12;
Giam(pSoNgayGiam);
}
}
}
//Khi bị vượt tràn ngày qua tháng khác, xác định xem có bị tràn lun tháng qua năm không:
private bool VuotThang(string tangHayGiam)
{
//Với hàm tăng, đang ở tháng 12 nếu tràn ngày sẽ tràn tháng, và ảnh hưởng tới năm.
if (tangHayGiam == "Tang") return (thang == 12);
//Với hàm giảm, đang ở tháng 1 nếu giảm ngày xuống liên quan tới giảm tháng nữa thì sẽ ảnh hưởng tới năm.
else return (thang == 1);
}
//Xác định ngày được tăng lên có bị vượt quá ngày đó của tháng hay không
//"Tang" nếu dùng hàm để xác định tăng, và "Giam" nếu để xác định giảm.
private bool VuotNgay(int pSoNgay, string tangHayGiam)
{
if (tangHayGiam == "Tang") return (pSoNgay + ngay > SoNgayCuaThang(thang));
else return (pSoNgay >= ngay);
}
}
Còn đây là trong voidMain()
- Code:
class Program
{
static void Main(string[] args)
{
NgayThang thu1 = new NgayThang(2009, 12, 31);
Console.WriteLine("{0}/{1}/{2}", thu1.Ngay, thu1.Thang, thu1.Nam);
int ngaytang = 2;
thu1.Tang(ngaytang);
Console.Write("Tang {0} ngay thi :{1}/{2}/{3}\n", ngaytang, thu1.Ngay, thu1.Thang, thu1.Nam);
thu1.Giam(ngaytang);
Console.Write("Giam {0} ngay thi :{1}/{2}/{3}", ngaytang, thu1.Ngay, thu1.Thang, thu1.Nam);
Console.ReadLine();
}
}