📄 datatype.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 + -