کلاسی برای نمایش و جلو و عقب کشیدن تاریخ های شمسی به زبان ++c

the_king

مدیرکل انجمن
برنامه زیر یک کلاس به نام pdate را معرفی می کند که دارای قابلیت های زیر است :
  • دریافت کردن یک تاریخ شمسی از ورودی cin توسط عملگر <<
  • ارسال و نمایش دادن تاریخ شمسی در خروجی cout توسط عملگر >>
  • جلو کشیدن تاریخ به تعداد n روز توسط عملگر -
  • عقب کشیدن تاریخ به تعداد n روز توسط عملگر +

کد:
#include "iostream.h"
#include "conio.h"

class pdate
{
	private:
		int y,m,d;
		bool leap(int);
	public:
		pdate();
		pdate(int,int,int);
		pdate operator +(int);
		pdate operator -(int);
		friend ostream &operator <<(ostream&,pdate&);
		friend istream &operator >>(istream&,pdate&);		
};

bool pdate::leap(int year)
{
    if ((((year - 474) % 2820 + 512) * 682) % 2816 < 682)
		return true;
	return false;	
}

pdate::pdate()
{
	y=1386;
	m=1;
	d=1;
}

pdate::pdate(int year,int month,int day)
{
	y=year;
	m=month;
	d=day;
}

pdate pdate::operator +(int count)
{
	int i;
	int year=y;
	int month=m;
	int day=d;
	int days=0;
	for (i=0;count>i;i++)
	{
		if ((day>=days)||(days==0))
		{
			if (days>0)
			{
				day=0;
				month++;
				if (month>12)
				{
					month=1;
					year++;
				}
			}
			if (month<7)
				days=31;
			else if (month<12)
				days=30;
			else
			{
				days=29;
				if (leap(year))
					days++;
			}
			i--;
			continue;
		}
		day++;
	}
	return pdate(year,month,day);
}

pdate pdate::operator -(int count)
{
	int i;
	int year=y;
	int month=m;
	int day=d;
	int days;
	for (i=0;count>i;i++)
	{
		if (day==1)
		{
			month--;
			if (month<1)
			{
				month=12;
				year--;
			}
			if (month<7)
				days=31;
			else if (month<12)
				days=30;
			else
			{
				days=29;
				if (leap(year))
					days++;
			}
			day=days+1;
			i--;
			continue;
		}
		day--;
	}
	return pdate(year,month,day);
}

ostream &operator <<(ostream &output,pdate &d)
{
	output << d.y << " ";
	switch (d.m)
	{
		case 1:
		{
			output << "Farvardin ";
			break;
		}
		case 2:
		{
			output << "Ordibehesht ";
			break;
		}
		case 3:
		{
			output << "Khordad ";
			break;
		}
		case 4:
		{
			output << "Tir ";
			break;
		}
		case 5:
		{
			output << "Mordad ";
			break;
		}
		case 6:		
		{
			output << "Shahrivar ";
			break;
		}
		case 7:
		{
			output << "Mehr ";
			break;
		}
		case 8:
		{
			output << "Aban ";
			break;
		}
		case 9:
		{
			output << "Azar ";
			break;
		}
		case 10:			
		{
			output << "Dey ";
			break;
		}
		case 11:
		{
			output << "Bahman ";
			break;
		}
		case 12:
		{
			output << "Esfand ";
		}
	}
	output << d.d;
	return output;
}

istream &operator >>(istream &input,pdate &d)
{
	cout << "Please enter year : ";
	input >> d.y;
	cout << "Please enter month : ";
	input >> d.m;
	cout << "Please enter day : ";
	input >> d.d;
	return input;
}

int main()
{
	pdate a;
	int n;
	char ch;
	cin >> a;
	cout << endl << a;
	cout << endl << "Please enter a number : ";
	cin >> n;
	cout << endl << "Please enter + or - : ";
	cin >> ch;
	cout << a << endl << ch << " " << n << " days" << endl << "= ";
	if (ch=='+')
		cout << a+n << endl;
	else
		cout << a-n << endl;
	cout << "Press any key to continue" << endl;
	getch();
	return 0;
}
 

جدیدترین ارسال ها

بالا