C++万年历课程设计

博主在翻阅自己的往年课程设计时,找到了曾经写的一个C++万年历程序,这里分享给大家:
在这里插入图片描述

#include<iostream>
#include<iomanip>
using namespace std;
class time1
   {
   	int year,month,day;
   	public:
   time1(){}//默认构造函数
   time1(int y,int m,int d)
   	{
   		year=y;
   		month=m;
   		day=d;
   	}
   	int search(time1 &d)
   {int a[13]={0,31,29,31,30,31,
   30,31,31,30,31,30,31},
b[13] ={0,31,28,31,30,
31,30,31,31,30,31,30,31};
         int  sum=0,n;
     if(d.year%4==0
     &&d.year%100!=0||d.year%400==0)
            {
			   if(d.month>13||d.month<1||d.day>30||d.day<0)
               return 1;//终止
              for(n=0;n<d.month;n++)	
              sum+=a[n];
              sum+=d.day;
         	}
	   else
	        {
			   if(d.month>13||d.month<1||d.day>29||d.day<0)
                 return 1;
	        	for(n=0;n<d.month;n++)
	            sum+=b[n];
	            sum+=d.day;
	        }
	        cout<<"该日为第"<<sum<<"天"<<endl; 
	        return 0; 
	        }
			int test(time1 &d)
   {
         int  sum=0,n;
     if(d.year%4==0
     &&d.year%100!=0||d.year%400==0)
            {
			   if(d.month>12||d.month<1||d.day>29||d.day<0)
               return 1;
              }
	   else
	        {
			   if(d.month>12||d.month<1||d.day>28||d.day<0)
                 return 1;
	        }
	        return 0; 
	        }
	        void week(time1 &d)
{
/*if(d.month==1||d.month==2) {
d.month+=12;
d.year--;
}*/
int iWeek=(d.day+2*d.month+3*(d.month+1)/5+d.year+d.year/4-d.year/100+d.year/400)%7;
switch(iWeek)
{
case 0: puts("  星期一\n"); break;
case 1: puts("  星期二\n"); break;
case 2: puts("  星期三\n"); break;
case 3: puts("  星期四\n"); break;
case 4: puts("  星期五\n"); break;
case 5: puts("  星期六\n"); break;
case 6: puts("  星期日\n"); break;
}
}
void week1(time1 &d)
{int j=0,i;
/*if(d.month==1||d.month==2)
 {
     d.month+=12;
     d.year--;
 }*/
int iWeek=(d.day+2*d.month+3*(d.month+1)/5+d.year+d.year/4-d.year/100+d.year/400)%7;

cout<<setw(5)<<"一"<<"    "<<
setw(5)<<"二"
<<"    "<<setw(5)<<"三"
<<"    "<<setw(5)<<"四"<<"    "<<
setw(5)<<"五"<<"    "<<setw(5)
<<"六"<<"    "<<setw(5)
<<"七"<<endl; 
for( i=0;i<iWeek;i++)
cout<<"        ";
int t=0;

for(int s=0;s<7;s++)
{
  cout<<setw(4)<<++j<<"    ";
      t++;
      if(t==7-i)
      {cout<<endl;
    t=0;
      s=7;
	  }
}
      int a[13]={0,31,29,31,30,31,
   30,31,31,30,31,30,31},
b[13] ={0,31,28,31,30,
31,30,31,31,30,31,30,31};
         int  sum=0,n;
     if(d.year%4==0
     &&d.year%100!=0||d.year%400==0)
      { for(int s=7-i;s<a[d.month];s++)
{
  cout<<setw(4)<<++j<<"    ";
      t++;
      if(t==7)
    {
	   cout<<endl;
      t=0;
    }
}} 
else for(int s=7-i;s<b[d.month];s++)
{
  cout<<setw(4)<<++j<<"    ";
      t++;
      if(t==7)
    {
	   cout<<endl;
      t=0;
    }}

}	        };
int main()
{  
    cout<<"       ☆☆☆☆☆☆☆☆☆"
		      "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl<<endl;
		      cout<<"                           万年历"
		      <<endl;
		      cout<<"        1. 输出某年份日历"<<endl;
		       cout<<"        2. 输出某年某月份日历"<<endl;
			    cout<<"        3. 计算该日为该年第几天"<<endl;
		      cout<<endl<<endl;
		      
		   cout<<"       ☆☆☆☆☆☆☆☆☆"
		      "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;   

    int year,month,day,h;
    cout<<"输入选项"<<endl; 
    cin>>h;
    while(h!=0)
    {
	switch(h)
    {
	case 3:
	 cout<<"输入年,月,日:"<<endl;
	 cin>>year>>month>>day;
     /*time1 d1(year,month,day);
      time1  date;*/
	 while(year!=0&&month!=0&&day!=0)
	 {
	 time1 d(year,month,day);
	 time1 date;
	  if(date.test(d)==1)
	 {
	 	cout<<"您输入的数据错误,已退出系统"<<endl;
		 return 0; 
	 }
	  date.search(d);
	  date.week(d);
	  cout<<"输入年,月,日:"<<endl;
	 cin>>year>>month>>day;
	  }
	  break;
	  case 1:
	{cout<<"输入年份"<<endl; 
	  cin>>year;
	  int x=1;
	  
	  for( x=1;x<=12;x++)
	   {
	   cout<<x<<"月份"<<endl; 
	   time1 d3(year,x,1);  
      time1  date3;
      date3.week1(d3);
	  cout<<endl;}
      break;}
	  case 2:
	{ cout<<"输入年份,月份"<<endl; 
	  cin>>year>>month;
	  time1 d2(year,month,1);  
      time1  date2;
      date2.week1(d2);
      cout<<endl;
      break;}
	   }cout<<"输入选项"<<endl;
    cin>>h;
}
	 return 0;
}

发布了58 篇原创文章 · 获赞 145 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/pengxiang1998/article/details/91178865