C++写的万年历

以前的课程设计

1、双列显示:

#include <windows.h> 
#include <winnt.h> 
#include<iostream>
#include<iomanip>
using namespace std;
int week(int,int,int);          //根据年月日判断星期几
int leap_year(int);             //判断闰年
void display_year(int );            //显示某年日历
void demand_day(int,int,int);        //查询某天
int main()
{
   int y,m,d,es=1;
   while(es)
   {
        HANDLE consolehwnd; 
       consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
       SetConsoleTextAttribute(consolehwnd,12); 
      cout<<"请选择操作:\n1→显示某年日历\
         \n2→查询某天\n0→退出"<<endl;
      char tp[20];cin>>tp;
      if(tp[1]!='\0'||tp[0]>'2'||tp[0]<'0'){cout<<"输入有误"<<endl;continue;}
      switch(tp[0]-48)
      {
         case 1:{cout<<"请输入年份:";cin>>y;system("cls");display_year(y);break;}
        case 2:{cout<<"请输入年、月、日,以空格分开:";cin>>y>>m>>d;system("cls");
           demand_day(y,m,d);break;}
        case 0:{es=0;break;}
      }
   }
   return 0;
}
//-----根据年月日判断星期几-------------------------
int week(int y,int m, int d) 
{ 
   int week1,yy=y;
    if(m==1) {m=13;yy--;}
    if(m==2) {m=14;yy--;} 
    week1=(d+2*m+3*(m+1)/5+yy+yy/4-yy/100+yy/400)%7;  
    int s; 
    switch (week1) 
    {  
         case 0: s=1; break; 
         case 1: s=2; break; 
         case 2: s=3; break; 
         case 3: s=4; break; 
         case 4: s=5; break; 
         case 5: s=6; break; 
         case 6: s=0; break; 
    } 
     return s; 
}
//----判断闰年-------------------------------------
int leap_year(int y)
{   
   int i;
    if((y%4==0&&y%100!=0)||y%400==0)i=1;
   else i=0;
   return i;
}
//--------显示某年日历------------------------
void display_year(int y)            
{
    int n1,n2,i,j,a[13],c,d;
   HANDLE consolehwnd; 
    consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(consolehwnd,5);
   cout<<setw(38)<<y<<"年"<<endl;
   cout<<setw(28)<<"*********";
   for(i=1;i<=27;i++)cout<<'*';
   cout<<endl;
   a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;//
   a[4]=a[6]=a[9]=a[11]=30;                //确定每月天数
   if(leap_year(y))a[2]=29;
   else a[2]=28;                           //
   for(i=1;i<=11;i+=2)                     //六次循环 
   {
         SetConsoleTextAttribute(consolehwnd,1); 
         cout<<setw(14)<<i<<"月"<<setw(42)<<i+1<<"月"<<endl;
           SetConsoleTextAttribute(consolehwnd,2); 
          cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
         <<"四"<<setw(4)<<"五"<<setw(4)<<"六";
         cout<<setw(16)<<' ';
          cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
         <<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
           SetConsoleTextAttribute(consolehwnd,7);
         n1=week(y,i,1);n2=week(y,i+1,1);
         if(n1)                            //-----------
         {
            for(j=1;j<=n1;j++)            //   
                cout<<setw(4)<<' ';
         }
         for(j=1;j<=7-n1;j++)
            cout<<setw(4)<<j;
         cout<<setw(16)<<' ';
           if(n2)
         {                                //-----输出每次循环的第一行---
            for(j=1;j<=n2;j++)
                cout<<setw(4)<<' ';
         }
               for(j=1;j<=7-n2;j++)
            cout<<setw(4)<<j;
            cout<<endl;                   //--------------
            c=8-n1;d=8-n2;
             for(int m=1;m<6;m++)              //每月日历最多占六行
          {
                  if(c>a[i])cout<<setw(4*7)<<' ';//若c>a[i],则该月的这一行全部输出空格
               for(j=c;j<=a[i];j++)
              {
                 cout<<setw(4)<<j;
                if((j-c+1)%7==0){c=j+1;break;}
                if(j==a[i]){cout<<setw((6-week(y,i,a[i]))*4)<<' ';c=j+1;break;}
                                     //如果j是该月最后一天,该行剩下的全部补空格
              }
              cout<<setw(16)<<' ';
                  if(d>a[i+1])cout<<setw(4*7)<<' ';
              for(j=d;j<=a[i+1];j++)
              {                                             //
                 cout<<setw(4)<<j;
                if((j-d+1)%7==0){d=j+1;break;}
                     if(j==a[i+1]){cout<<setw((6-week(y,i+6,a[i+1]))*4)<<' ';d=j+1;break;}
              } 
                  cout<<endl;
          }
         cout<<endl;
   }
   cout<<endl;
}
//--------查询某天------------
void demand_day(int y,int m,int d)
{
     int n;
     HANDLE consolehwnd; 
     consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
     SetConsoleTextAttribute(consolehwnd,5); 
    n=week(y,m,d);
    switch(n)
    {
       case 1:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期一"<<endl;break;
       case 2:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期二"<<endl;break;
       case 3:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期三"<<endl;break;
       case 4:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期四"<<endl;break;
       case 5:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期五"<<endl;break;
       case 6:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期六"<<endl;break;
       case 0:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期日"<<endl;break;
      default:break;
    }
    cout<<endl;
}       

 

2、单列显示:

#include <windows.h> 
#include <winnt.h> 
#include<iostream>
#include<iomanip>
using namespace std;
int week(int,int,int);          //根据年月日判断星期几
int leap_year(int);             //判断闰年
void display_year(int );            //显示某年日历
void demand_day(int,int,int);        //查询某天
int main()
{
	int y,m,d,es=1;
   while(es)
   {
     	HANDLE consolehwnd; 
       consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
       SetConsoleTextAttribute(consolehwnd,12); 
      cout<<"请选择操作:\n1→显示某年日历\
		   \n2→查询某天\n0→退出"<<endl;
	   char tp[20];cin>>tp;
	   if(tp[1]!='\0'||tp[0]>'2'||tp[0]<'0'){cout<<"输入有误"<<endl;continue;}
	   switch(tp[0]-48)
	   {
	      case 1:{cout<<"请输入年份:";cin>>y;system("cls");display_year(y);break;}
		  case 2:{cout<<"请输入年、月、日,以空格分开:";cin>>y>>m>>d;system("cls");
			  demand_day(y,m,d);break;}
		  case 0:{es=0;break;}
	   }
   }
   return 0;
}
//-----根据年月日判断星期几-------------------------
int week(int y,int m, int d) 
{ 
	int week1;
    if(m==1) {m=13;y--;}
    if(m==2) {m=14;y--;} 
    week1=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;  
    int s; 
    switch (week1) 
	 {  
         case 0: s=1; break; 
         case 1: s=2; break; 
         case 2: s=3; break; 
         case 3: s=4; break; 
         case 4: s=5; break; 
         case 5: s=6; break; 
         case 6: s=0; break; 
	 } 
     return s; 
}
//----判断闰年-------------------------------------
int leap_year(int y)
{   
	int i;
    if((y%4==0&&y%100!=0)||y%400==0)i=1;
	else i=0;
	return i;
}
//--------显示某年日历------------------------
void display_year(int y)            
{
    int n,i,j,a[13];
	HANDLE consolehwnd; 
    consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(consolehwnd,5);
	cout<<setw(16)<<y<<"年"<<endl;
	a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;//
	a[4]=a[6]=a[9]=a[11]=30;                //确定每月天数
	if(leap_year(y))a[2]=29;
	else a[2]=28;                           //
	for(i=1;i<=12;i++)
	{
		   SetConsoleTextAttribute(consolehwnd,1); 
		   cout<<setw(6)<<i<<"月"<<endl;
           SetConsoleTextAttribute(consolehwnd,2); 
	       cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
			<<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
           SetConsoleTextAttribute(consolehwnd,7);
		   n=week(y,i,1);
		   if(n)
		   {
			   for(j=1;j<=n;j++)
                cout<<setw(4)<<' ';
		   }
		   for(j=1;j<=7-n;j++)
			   cout<<setw(4)<<j;
		   cout<<endl;
		   for(j=8-n;j<=a[i];j++)
		   {
		      cout<<setw(4)<<j;
			  if((j+n-7)%7==0)cout<<endl;
		   }
		   cout<<endl;
	}
	cout<<endl;
}
//--------查询某天------------
void demand_day(int y,int m,int d)
{
     int n;
     HANDLE consolehwnd; 
     consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
     SetConsoleTextAttribute(consolehwnd,5); 
	 n=week(y,m,d);
	 switch(n)
	 {
	    case 1:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期一"<<endl;break;
	    case 2:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期二"<<endl;break;
	    case 3:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期三"<<endl;break;
	    case 4:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期四"<<endl;break;
	    case 5:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期五"<<endl;break;
	    case 6:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期六"<<endl;break;
	    case 0:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期日"<<endl;break;
		default:break;
	 }
	 cout<<endl;
}       

 

#include int main (void) { int year,month,j,i,day1,day2,one1,one2,w; printf("enter a year:"); scanf("%d",&year); printf("\n\n"); printf("---------------------%d---------------------\n\n",year); one1=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7; for(month=1;month<=12;month+=2) { printf(" ",month,year); printf(" \n",month+1,year); printf("-------------------- --------------------\n"); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n"); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day1=31;break; case 4: case 6: case 9: case 11:day1=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day1=29; else day1=28; } for(j=1;j<=one1;j++) { if(one1==7) break; else printf(" "); } for(i=1;i<=7-one1;i++) printf("%2d ",i); printf(" "); switch(month+1) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2=31;break; case 4: case 6: case 9: case 11:day2=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day2=29; else day2=28; } one2=(one1+day1)%7; for(j=1;j<=one2;j++) { if(one2==7) break; if(j!=7) printf(" "); } for(i=1;i<=7-one2;i++) printf("%2d ",i); printf("\n"); for(i=8-one1;i<=14-one1;i++) printf("%2d ",i); printf(" "); for(i=8-one2;i<=14-one2;i++) printf("%2d ",i); printf("\n"); for(i=15-one1;i<=21-one1;i++) printf("%2d ",i); printf(" "); for(i=15-one2;i<=21-one2;i++) printf("%2d ",i); printf("\n"); for(i=22-one1;i<=28-one1;i++) printf("%2d ",i); printf(" "); for(i=22-one2;i<=28-one2;i++) printf("%2d ",i); printf("\n"); for(i=29-one1;i<=35-one1&&i<=day1;i++) printf("%2d ",i); printf(" "); for(w=1;w<=35-day1-one1;w++) printf(" "); for(i=29-one2;i<=35-one2&&i<=day2;i++) printf("%2d ",i); printf("\n"); for(i=36-one1;i<=day1;i++) printf("%2d ",i); for(w=1;w<=35-day1-one1;w++) printf(" "); if(day1==31&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); if(day1==30&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); for(i=36-one2;i<=day2;i++) printf("%2d ",i); printf("\n-------------------- --------------------\n\n"); printf("\n"); one1=(one2+day2)%7; } printf("---------------------%d---------------------\n",year); getchar(); printf("按任意键退出"); getchar(); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值