?? wangna_wnl.cpp
字號:
#include<iostream>
using namespace std;
int daynum[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
//daynum[1]~daynum[12]分別為一年各月的天數
class date
{
private:
int year,month,day,week;
public:
void input(int y,int m,int d);//輸入
int testerror(int select); //輸入的錯誤檢查
void showdate(int select); //輸出年歷、月歷或日歷
};
void date::input(int y,int m,int d)
{
year=y; month=m; day=d;
}
int date::testerror(int select)
{
if((year%4==0&&year%100!=0)||(year%400==0))
daynum[2]=29; //閏年2月有29天
else
daynum[2]=28; //非閏年2月有28天
if(year<1||year>9999)
{
cout<<"年輸入錯誤!\n\n"; return 1;
}
if(month<1||month>12&&select!=3)
{
cout<<"月輸入錯誤!\n\n"; return 1;
}
if(day<1||day>daynum[month]&&select==1)
{
cout<<"日輸入錯誤!\n\n"; return 1;
}
return 0; //輸入正確
}
void date::showdate(int select)
{
int i,k,dnum; //dnum為公元1年1月1日至輸入的年月日時的總天數
int leapyear=0; //0表示當年不是閏年
dnum=(year-1)*365+1;
for(k=1;k<year;k++)
if((k%4==0&&k%100!=0)||(k%400==0))
dnum++;
if(select==1) //以下輸出日歷
{
for(k=1;k<month;k++)
dnum=dnum+daynum[k];
dnum=dnum+day-1;
cout<<"==================\n公元"<<year<<"年"<<month<<"月"<<day<<"日\n";
if(dnum%7==0)
cout<<" 星期日"<<endl;
else
switch(dnum%7){
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;
}
cout<<"==================\n\n";
} //if
else //以下輸出年歷或月歷
{
if(select==3) //年歷
cout<<"==================================\n ******公元"<<year<<"年年歷******\n==================================";
if(select==2) //日歷
{ for(k=1;k<month;k++)
dnum=dnum+daynum[k];
if(leapyear==1&&month>2)
dnum++;
cout<<"==================================\n ******公元"<<year<<"年"<<month<<"月月歷******\n==================================";
}
week=dnum%7;
for(i=1;i<=12;i++) // i為月份
{
if(select==2) //select=2時只輸出month月的月歷
i=month;
cout<<"\n\n"<<i<<"月 sun mon tue wed thu fri sat\n";
for(k=0;k<6+4*week;k++)
cout<<" ";
for(k=1;k<=daynum[i];k++)
{
if((week+k)%7==1&&k!=1)
{
cout<<"\n ";
}
cout<<k<<" ";
if(k<10)
cout<<" ";
}//for k
week=(week+daynum[i])%7;
cout<<"\n\n==================================\n----------------------------------";
if(select==2)
break; //select=2時只輸出month月的月歷
}//for i
cout<<"\n\n";
}//else
}
void main()
{
int year,month,day;
int t;
int select;
date d;
cout<<"------------------\n 1、輸出日歷;\n 2、輸出月歷;\n 3、輸出年歷;\n 0、退出。\n-----------------\n"; \
while(1)
{
cout<<"請選擇(0--3): ";
while(!(cin>>select))
{
cout<<"error:輸入非數字!\n";//若select為非數字則出錯提示
cin.clear(); //清除狀態位
cin.ignore(INT_MAX, '\n');
}
if(select==1)
{
cout<<"請輸入 年(1—9999)月日: \n";
cin>>year>>month>>day;
d.input(year,month,day);
t=d.testerror(select); // 輸入檢查
}
if(select==2)
{
cout<<"請輸入 年(1—9999)月: \n";
cin>>year>>month;
d.input(year,month,1);
t=d.testerror(select);// 輸入檢查
}
if(select==3)
{
cout<<"請輸入年份(1—9999): \n";
cin>>year;
d.input(year,1,1);
t=d.testerror(select);// 輸入檢查
}
if(select==0) //0 退出
{
cout<<"******Thank you for using!******\n";
break;
}
if(select!=0&&select!=1&&select!=2&&select!=3)
{
cout<<"\n選擇錯誤,請重新選擇!\n\n";
continue;
}
if(t==0) //輸入無錯則輸出年歷,月歷或日歷
d.showdate(select);
}//while(1)
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -