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

📄 10.cpp

📁 计算二日期的间隔天数
💻 CPP
字号:
/*
设计者:刘华磊
设计时间:2007/12/15
主要函数及其功能:
	void incrementday();						//一次增加几天后获得日期
	int gettotalday();							//计算该日期与1年1月1日之间有多少天
   	void whichday();							//计算某天为星期几 
	void getdata();								//输入日期,当输入错误数据时报警并要求重新输入
	void printDate();							//输出日期
	void constellation();						//根据出生日期判断星座
	int nowtotalday();							//自动获得计算机当前时间,并且计算出与1年1月1日的差,用于根据您输入的生日判断您活了多久
*/

#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;

int dayofmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};//表示正常年份下每月的天数

class DataType
{
private:	
	int y,m,d;									//数据成员,表示当前日期的年、月、日
	int totalday;								//表示该日期与1年1月1日的差	
public:
	void incrementday();						//一次增加几天后获得日期
	int gettotalday();							//计算该日期与1年1月1日之间有多少天
   	void whichday();							//计算某天为星期几 
	void getdata();								//输入日期,当输入错误数据时报警并要求重新输入
	void printDate();							//输出日期
	void constellation();						//根据出生日期判断星座
	int nowtotalday();							//自动获得计算机当前时间,并且计算出与1年1月1日的差,用于根据您输入的生日判断您活了多久
}data1,data2;

void DataType::incrementday()			//增加几天的函数的实现
{
 int daynum;							//增加的天数
 cout<<"请输入您要增加几天:"<<endl;
 cin>>daynum;
 while(daynum<0)						//控制增加的天数只能是正数或0
 {
	cout<<"\a增加的天数只能是正数或0,重新输入:"<<endl;
	cin>>daynum;
 }
 if(m==2)  
 {
  if((y%4==0&&y%100!=0)||(y%400==0))    //判断该年是否是闰年
      dayofmonth[1]=29;					//闰年二月有29天
  else dayofmonth[1]=28;    
 }

 if (d+daynum>=dayofmonth[m-1])			//增加daynum天,如果超过该月的天数就增加一个月
 {
  
	 d=dayofmonth[m-1]-d+1;
  
  m++;									//增加一个月
 }
 if(m>12)								//如果月数大于12  就增加一年
 {
  m=m-12;
  y++;									//增加一年
 }
 cout<<"增加"<<daynum<<"天后的日期为:"<<y<<"年"<<m<<"月"<<d<<"日"<<endl;
}

int DataType::gettotalday()				//计算该日期与1年1月1日之间有多少天
{
	int i,j;				
	int daybefore=0;					//daybefore表示本年内在该月1日以前的天数
	for(i=0,j=0;i<y;i++)
	{
		if((i%4==0&&i%100!=0)||(i%400==0))		//计算该日期以前的年中有多少闰年,j为闰年数
			j++;
	}
	for(i=0;i<m-1;i++)					//计算daybefore
	{
		daybefore+=dayofmonth[i];
	}

	if(y%4==0&&m>3)  daybefore++;		//这一年是闰年并且这个月在二月以后

	totalday=365*(y-1)+j+daybefore+d-1;	//求出该日期与1年1月1日的差
	return totalday;
}

void DataType::getdata()
{
	cout<<"输入年"<<endl;
	cin>>y;
	while(y<1)				
	{
		cout<<"\a";						//数据有误时报警一次
		cout<<"输入数据有误!重新输入:(年要大于0)"<<endl;
		cin>>y;
	}
	cout<<"输入月"<<endl;
	cin>>m;
	while(m<1||m>12)
	{
		cout<<"\a";						//数据有误时报警一次
		cout<<"输入数据有误!重新输入:(月份在1~12之间)"<<endl;
		cin>>m;
	}
	cout<<"输入日"<<endl;
	cin>>d;
	while(d<1||d>31)
	{
		cout<<"\a";						//数据有误时报警一次
		cout<<"输入数据有误!重新输入:(日在1~31之间)"<<endl;
		cin>>m;
	}
}

void DataType::printDate()
{
	cout<<y<<"年 "<<m<<"月 "<<d<<"日 "<<endl;
}


void DataType::whichday()				//计算某天为星期几 
{
	int i;
	i=totalday%7;
	switch(i)
	{
	case 1:cout<<"这一天是星期一 "<<endl;break;
		
	case 2:cout<<"这一天是星期二 "<<endl;break;
		
	case 3:cout<<"这一天是星期三 "<<endl;break;
	   
	case 4:cout<<"这一天是星期四 "<<endl;break;
	    
	case 5:cout<<"这一天是星期五 "<<endl;break;
	
	case 6:cout<<"这一天是星期六 "<<endl;break;
			
	case 0:cout<<"这一天是星期日 "<<endl;break;
	    
	default:cout<<"出现错误"<<endl; break;
	   
	}

}

void DataType::constellation()			//十二星座日期判断
{
	switch(m)
	{
	case 1:if(d<=19)cout<<"魔羯座"<<endl;else cout<<"水瓶座"<<endl;break;
	case 2:if(d<=18)cout<<"水瓶座"<<endl;else cout<<"双鱼座"<<endl;break;
	case 3:if(d<=20)cout<<"双鱼座"<<endl;else cout<<"牡羊座"<<endl;break;
	case 4:if(d<=20)cout<<"牡羊座"<<endl;else cout<<"金牛座"<<endl;break;
	case 5:if(d<=20)cout<<"金牛座"<<endl;else cout<<"双子座"<<endl;break;
	case 6:if(d<=21)cout<<"双子座"<<endl;else cout<<"巨蟹座"<<endl;break;
	case 7:if(d<=22)cout<<"巨蟹座"<<endl;else cout<<"狮子座"<<endl;break;
	case 8:if(d<=22)cout<<"狮子座"<<endl;else cout<<"处女座"<<endl;break;
	case 9:if(d<=22)cout<<"处女座"<<endl;else cout<<"天秤座"<<endl;break;
	case 10:if(d<=22)cout<<"天秤座"<<endl;else cout<<"天蝎座"<<endl;break;
	case 11:if(d<=21)cout<<"天蝎座"<<endl;else cout<<"射手座"<<endl;break;
	case 12:if(d<=21)cout<<"射手座"<<endl;else cout<<"魔羯座"<<endl;break;
	default:cout<<"错误"<<endl;break;
	}

}

int DataType::nowtotalday()
{
	time_t timep; 
	struct tm *p; 
	time(&timep);
	p=localtime(&timep);					//取得当地时间
	int pyear,pmon,pday;					//当前年月日
	pyear=1900+p->tm_year;
	pmon=1+p->tm_mon;
	pday=p->tm_mday;
	cout<<"现在时间:"<<pyear<<"年"<<pmon<<"月"<<pday<<"日"<<endl;

	int i,j;				
	int daybefore=0;						//daybefore表示本年内在该月1日以前的天数
	for(i=0,j=0;i<pyear;i++)
	{
		if((i%4==0&&i%100!=0)||(i%400==0))	//计算该日期以前的年中有多少闰年,j为闰年数
			j++;
	}
	for(i=0;i<pmon-1;i++)					//计算daybefore
	{
		daybefore+=dayofmonth[i];
	}

	if(y%4==0&&m>3)  daybefore++;			//这一年是闰年并且这个月在二月以后

	totalday=365*(pyear-1)+j+daybefore+pday-1;	//求出该日期与1年1月1日的差
	return totalday;
}
void main()
{
	char c;
	cout<<"本程序可以判断某天星期几,可以判断输入日期增加几天后的日期,也可以判断两天之间有多少天间隔,还可以算出您的星座和您已经活了多久,您可以尝试一下"<<endl;
	cout<<"现在开始?\n输入y开始,输入其它退出"<<endl;
	cin>>c;
	if (c!='y')							//程序退出
	{
		cout<<"谢谢,退出中..."<<endl;
		exit(1);
	}
	while(c=='y')						//循环进行
	{
	 cout<<"请选择您希望完成的功能"<<endl;
	 cout<<"判断某天是星期几按1,判断两天之间有多少天间隔按2,查输入日期增加几天后的日期按3,判断属于哪个星座按4,计算您从出生到现在经历了多少天按5,其他键退出"<<endl;
	//cout<<""<<endl;
	 int i;
	 cin>>i;
	 switch(i)
	 {
	 case 1:data1.getdata();		//输入日期
		 data1.gettotalday();		//计算该日期与1年1月1日的差
		 data1.printDate();			//输出日期
		 data1.whichday();			//计算并输出该日期是星期几
	 	break;
	 case 2:cout<<"输入第一个日期:"<<endl;
		 data1.getdata();			//输入第一个日期
		 data1.gettotalday();		//计算该日期与1年1月1日的差
		 data1.printDate();			//输出第一个日期
		 cout<<"输入第二个日期:"<<endl;
		 data2.getdata();			//输入第二个日期
		 data2.gettotalday();		//计算该日期与1年1月1日的差
		 data2.printDate();			//输出第二个日期
		 int m;
		 m=data2.gettotalday()-data1.gettotalday();//计算两日期之间的差
		 if (m>=0)
			 cout<<" 两个日期之间有"<<m<<"天 "<<endl;			//日期一在日期二之前
		 else  
		 {m=-m;cout<<" 两个日期之间有"<<m<<"天 "<<endl;}		//如果日期一在日期二之后
		
	     break;
	 case 3:cout<<"输入您要增加的日期:"<<endl;
		 data1.getdata();			//输入日期
		 data1.printDate();			//输出日期
		 data1.incrementday();		//计算增加几天后的日期
		 break;
	 case 4:cout<<"星座是按照公历日期判断的,输入您的阳历生日:"<<endl;
		 data1.getdata();			//输入日期
		 data1.constellation();		//判断星座
		 break;
	 case 5:cout<<"输入您的出生日期(阳历):"<<endl;
		 data1.getdata();			//输入日期
		 data1.printDate();			//输出日期
		 data1.nowtotalday();		//获得计算机当前时间,并且计算出与1年1月1日的差
		 data1.gettotalday();		//获得出生日期与1年1月1日的差
		 cout<<"您从出生到现在经历了"<<data1.nowtotalday()-data1.gettotalday()<<"天,^_^^_^"<<endl;//获得从出生到现在活了多久
		 break;
	 default:
		 cout<<"谢谢,退出中..."<<endl;
		 exit(1);
	     break;
	 }
	cout<<"再试一次?\n输入y开始,输入其它退出"<<endl;//控制循环进行
	cin>>c;
	if (c!='y')
	{
		cout<<"谢谢,退出中..."<<endl;
		exit(1);
	}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -