⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wangna_wnl.cpp

📁 c++写的万年历程序,具有输出日历、月历、年历的功能。 此外程序还有很好的错误处理能力。
💻 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 + -