📄 birthdaycal.cpp
字号:
# include<iostream.h>
# include<time.h>
class Date
{
int day,month,year;
void IncDay();
int DayCalc() const;
static const int days[];
public:
Date(int y,int m,int d);
Date(int m,int d);
Date();
void SyD();
void SetDate(int yy,int mm,int dd);
void SetDate(int mm,int dd);
bool IsEY(int yy) const;
bool IsEM() const;
void print_ymd() const;
void print_mdy() const;
const Date &operator+(int days);
const Date &operator+=(int days);
int operator-(const Date& ymd)const;
int Birthday(int&);
};
const int Date::days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
Date::Date(int y,int m,int d){SetDate(y,m,d);}
Date::Date(int m,int d){SetDate(m,d);}
Date::Date(){SyD();}
void Date::SyD(){
tm *gm;
time_t t=time(NULL);
gm=gmtime(&t);
year=1900+gm->tm_year;
month=gm->tm_mon+1;
day=gm->tm_mday;
}
void Date::SetDate(int yy,int mm,int dd){
month=(mm>=1&&mm<=12)?mm:1;
year=(yy>=1900&&yy<=2100)?yy:1900;
if(month==2&&IsEY(year))
day=(dd>=1&&dd<=29)?dd:1;
else day=(dd>=1&&dd<=days[month])?dd:1;
}
void Date::SetDate(int mm,int dd){
tm *gm;
time_t t=time(NULL);
gm=gmtime(&t);
month=(mm>=1&&mm<=12)?mm:1;
year=1900+gm->tm_year;
if(month==2&&IsEY(year))
day=(dd>=1&&dd<=29)?dd:1;
else day=(dd>=1&&dd<=days[month])?dd:1;
}
const Date &Date::operator+(int days)
{
for(int i=0;i<days;i++)
IncDay();
return *this;
}
const Date&Date::operator+=(int days)
{
for(int i=0;i<days;i++)
IncDay();
return *this;
}
int Date::operator-(const Date& ymd)const
{
int days;
days=DayCalc()-ymd.DayCalc();
return days;
}
bool Date::IsEY(int y) const{
if(y%400==0||(y%100!=0&&y%4==0)) return true;
return false;
}
bool Date::IsEM() const
{
if(month==2 && IsEY(year))
return day==29;
else return day==days[month];
}
void Date::IncDay()
{
if(IsEM())
if(month==12)
{
day=1;month=1;year++;
}
else
{
day=1;month++;
}
else day++;
}
int Date::DayCalc() const
{
int dd;
int yy=year-1900;
dd=yy*365;
if(yy)dd+=(yy-1)/4;
for(int i=1;i<month;i++)
dd+=days[i];
if(IsEY(year)&&(month>2))
dd++;
dd+=day;
return dd;
}
void Date::print_ymd() const{cout<<year<<"-"<<month<<"-"<<day<<endl;}
void Date::print_mdy() const{
char *monthName[12]={"January","February","March","April","May" ,"June","July","August","September","October","November","December"};
cout<<monthName[month-1]<<" "<<day<<","<<year<<endl;
}
int Date::Birthday(int& y)
{
tm *gm;
int yy,mm,dd;
time_t t=time(NULL);
gm=gmtime(&t);
yy=1900+gm->tm_year;
mm=gm->tm_mon+1;
dd=gm->tm_mday;
Date today(yy,mm,dd);
int x=DayCalc()-today.DayCalc();
year+=1;
y=DayCalc()-today.DayCalc();
year-=1;
return x;
}
int main()
{
int mm,dd,xx,yy;
cout<<"请输入您的生日(月 日):";
cin>>mm>>dd;
Date today(mm,dd);
xx=today.Birthday(yy);
if(xx==0)
cout<<"Happy birthday!"<<endl;
else if(xx>0)
cout<<"还有"<<xx<<"天是您的生日"<<endl;
else
{
cout<<"您的生日已经过去"<<-xx<<"天,";
cout<<"明年的生日要再等"<<yy<<"天."; }
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -