⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 birthdaycal.cpp

📁 如果生日已过,会显示你的生日已经过了多少天.如果生日没有过,会显示你的生日还有多少天过.
💻 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 + -