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