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;
}