?? 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 + -