Xây dựng class Date trên C++ theo Lập trình hướng đối tượng?

Trích dẫn Nguyên bản được gửi bởi minhtoantm
Xem bài viết

Nguyên bản được gửi bởi

Code:

#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<conio.h>

class cDate
{
	int day,month,year;
public://constructor
	cDate() {day=27;month=10;year=2009;}
	cDate(int d,int m,int y);

	cDate(int d);
public://cac ham tien ich
	friend istream & operator >>(istream &is,cDate &a);
	friend ostream &operator <<(ostream &os,cDate a);
	cDate NextDay();
	cDate NextDay(int d);
	int SoSanh(const cDate &b);
};
//---------
cDate::cDate(int d,int m,int y)
{
	switch(m)
	{
	case 1:case 3:case 5:case 7:case 8:case 10:case 12:{d=d%31;m=m+d/31;}break;
	case 4:case 6:case 9:case 11:{d=d%30;m=m+d/30;}break;
	case 2:{d=d%28;m=m+d/28;break;}
	}
	m=m%12;
	y=y+m/12;
	day=d;month=m;year=y;

}
// Ham nhap
istream & operator >>(istream& is,cDate &a)
{
	int t;
	cout<<"Nhap nam: ";
	is>>a.year;
	cout<<"Nhap thang: ";
	is>>t;
	while(t>12)
	{
		cout<<"Thang phai nho hon 12, vui long nhap lai thang: ";
		is>>t;
	}
	a.month=t;
	cout<<"Nhap ngay: ";
	is>>a.day;
	while(a.month==2 && a.year%4==0 && a.day>29)
	{
		cout<<"Nam nay la nam nhuan, thang hai chi co 29 ngay. Vui long nhap lai ngay: ";
		is>>a.day;
	}
	while(a.month==2 && a.year%4!=0 && a.day>28)
	{
		cout<<"Day khong phai la nam nhuan,thang 2 chi co 28 ngay. Vui long nhap lai ngay: ";
		is>>a.day;
	}
	while(a.day>31 && (a.month==1 || a.month==3 ||a.month==5 ||a.month==7 ||a.month==8 ||a.month==10||a.month==12))
	{
		cout<<"Thang 1,3,5,7,8,10,12 chi co toi da 31 ngay. Vui long nhap lai ngay: ";
		is>>a.day;
	}
	while(a.day>30 && (a.month==4 ||a.month==6||a.month==9||a.month==11))
	{
		cout<<"Thang 4,6,9,11 chi co toi da 30 ngay. Vui long nhap lai ngay: " ;
		is>>a.day;
	}
	return is;

}
//Ham xuat
ostream &operator <<(ostream &os,cDate a)
{
	os<<"\n"<<a.day;
	os<<"/"<<a.month;
	os<<"/"<<a.year;
	return os;
}
//tim ngay ke tiep cua ngay hom doa
cDate cDate::NextDay()
{
	cDate c;
	switch(this->month)
	{
	case 1:case 3:case 5:case 7:case 8:case 10:case 12:
		{
			if(this->day<=30)
			{
				c.day=this->day+1;
				c.month=this->month;
				c.year=this->year;
			}
			else
			{
				if(this->month==12)
				{
					c.day=1;
					c.month=1;
					c.year=this->year+1;
				}
				else
				{
					c.day=1;
					c.month=this->month+1;
					c.year=this->year;
				}
			}
			break;
		}
	case 4:case 6:case 9:case 11:
		{
			if(this->day<=29)
			{
				c.day=this->day+1;
				c.month=this->month;
				c.year=this->year;
			}
			else
			{
				c.day=1;
				c.month=this->month+1;
				c.year=this->year;
			}
			break;
		}
	case 2:
		{
			if(this->year%4==0)
			{
				if(this->day<28)
				{
					c.day=this->day+1;
					c.month=this->month;
					c.year=this->year;
				}
				else
				{
					c.day=1;
					c.month=3;
					c.year=this->year;
				}
			}
			else
			{
				if(this->day<27)
				{
					c.day=this->day+1;
					c.month=this->month;
					c.year=this->year;
				}
				else
				{
					c.day=1;
					c.month=3;
					c.year=this->year;
				}
			}
			break;
		}
	}
	return c;
}
// Tim ngay sau doa bao nhieu ngay
cDate cDate::NextDay(int d)
{

}
void main()
{
	cDate a,c;
	cin>>a;
	cout<<"\nNgay vua nhap la: "<<a;
	c=a.NextDay();
	cout<<"Ngay ke tiep ngay vua nhap la:"<<c;
	getch();
}

Bài của mình hoàn chỉnh hơn của binhcntt xíu, nhưng vẫn chưa đầy đủ lắm. Mình còn đang vướng chỗ sau x ngày kể từ ngày hiện tại là ngày gì…Nếu cóa bạn nào biết thì chỉ mình với nha