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

📄 datatype.cpp

📁 可以查询一个人生活了的天数
💻 CPP
字号:
#include "stdafx.h"
#include<iostream>
#include<time.h>//使用到time\localtime函数
#include<math.h>//使用到abs()函数
using namespace std;

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

class DateType    //自定义的日期类DateType
{
private:
	int y,m,d;//数据成员,表示当前日期的年、月、日
	int totalday;

public:
	DateType(int y0=1, int m0=1, int d0=1); 
				//构造函数,设定年、月、日;
	void incrementday();  			//增加几天
	int gettotalday();		        //计算该日期与年月日之间有多少天
	void whichday();				//计算某天为星期几
	void Constellation();			//判断星座
	void getTime();					//获得系统时间
};
DateType::DateType(int y0, int m0, int d0)//设定年、月、日
{												
	y=y0;
	m=m0;
	d=d0;
}
void DateType::incrementday()			//增加几天的函数的实现
{
 int daynum,n;							//增加的天数
 cout<<"请输入再生活的天数:"<<endl;
 cin>>daynum;
 n=daynum;								//标记增加了多少天
 while(daynum<0)						//防止出现输入错误
 {//控制增加的天数只能是正数或
	cout<<"\n增加的天数只能是正数或,请重新输入:"<<endl;
	cin>>daynum;
 }
  if((y%4==0&&y%100!=0)||(y%400==0))    //判断该年是否是闰年
      dayofmonth[1]=29;					//闰年二月有天
  else dayofmonth[1]=28;    
while(daynum>=0)						
{
 if (d+daynum>=dayofmonth[m-1])			//增加daynum天,如果超过该月的天数就增加到下一个月
 {
  
	 d=daynum-dayofmonth[m-1]+d;
	 daynum=0;
  m++;									//增加到下一个月
 }
 else 
 {
	 d+=daynum;
	 daynum=-1;							//使函数可以跳出循环
 }
 if(m>12)								//如果月数大于 就增加到下一年
 {
  m=m-12;
  y++;									//增加到下一年
 }
}
 cout<<"增加"<<n<<"天后的日期为:"<<y<<"年"<<m<<"月"<<d<<"日"<<endl;
}
int DateType::gettotalday()   //获得输入时间距年月日的天数
{			//如果系统调用时间函数time()得到的结果就是离.1.1的间隔,所以选用.1.1
	int i=1900,j;				
	int daybefore=0;					//daybefore表示本年内在该月日以前的天数
	for(i,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-1900)+j+daybefore+d;	//求出该日期与年月日的差
	return totalday;
}
void DateType::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 DateType::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<<"This system has an error!"<<endl;exit(0);break;
	}

}

void DateType::getTime()//获得当前系统的时间
{
	time_t nowtime; 
	struct tm *timeinfo; 
	time( &nowtime ); 
	timeinfo = localtime( &nowtime ); 
	y= timeinfo->tm_year + 1900; 
	m= timeinfo->tm_mon + 1; 
	d= timeinfo->tm_mday; 
}


void getTime(int &year,int &month,int&day)//获得输入时间
{
	cout<<"输入年";
	cin>>year;
	while(year<1)				
	{
		cout<<"\a";						//数据输入有误,重新输入
		cout<<"输入数据有误!重新输入:(年要大于)"<<endl;
		cin>>year;
	}
	cout<<"输入月";
	cin>>month;
	while(month<1||month>12)
	{
		cout<<"\a";						//数据输入有误,重新输入
		cout<<"输入数据有误!重新输入:(月份在~12之间)"<<endl;
		cin>>month;
	}
	cout<<"输入日";
	cin>>day;
	while(day<1||day>31)
	{
		cout<<"\a";						//数据输入有误,重新输入
		cout<<"输入数据有误!重新输入:(日在~31之间)"<<endl;
		cin>>day;
	}
}
int main()
{	
	int year,month,day;
	int choice=1;//选择控制变量
	DateType Date1,Date2;
	while(choice)
	{
		cout<<"1输入生日判断生活了多少天以及所属的星座"<<endl
			<<"2从某一时间再生活若干天后情况"<<endl
			<<"其他则报错退出"<<endl;
		cin>>choice;
		switch(choice)
		{
		case 1: getTime(year,month,day);//获得时间
				Date1=DateType(year,month,day);//设定时间
				Date2.getTime();//获得当前时间
				cout<<"你的日龄为:"<<Date2.gettotalday()-Date1.gettotalday()
					<<"星座为:";
				Date1.Constellation();
				cout<<endl;break;
		case 2: getTime(year,month,day);//获得时间
				Date1=DateType(year,month,day);//设定时间
				Date1.incrementday();
				Date1.gettotalday();
				Date1.whichday();break;
		default: choice=0;cout<<"error"<<endl;//报错退出
		}

	}
	return 1;
}

⌨️ 快捷键说明

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