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