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

📄 万年历.cpp

📁 万年历的基本查询功能比如输出甘年的日历
💻 CPP
字号:
#include <stdio.h>
#include<stdlib.h> 
#include <conio.h> 
void Output_Menu();                       /*输出菜单*/ 
void Output_Calendarofyear();             /*输出输入年份的日历*/
void Output_Calendarofmonth();            /*输出输入月份的日历*/
void Leapyear_Judgement();                /*判断输入年份是不是闰年*/
void Getweek_Ofdate();                    /*计算输入某年某月中某一日是星期几*/
int Getdayamount_Ofyear(int);             /*计算输入年份的天数*/
int Getdayamount_Ofmonth(int,int) ;       /*计算输入年份是月份的天数*/
void Getdaysamount_Ofmonth();             /*输出输入年份是月份的天数*/
int Getweek_Firstdayofyear(int);          /*计算每年第一天是星期几*/
int Getweek_Firstdayofmonth(int,int);     /*计算每月第一天是星期几*/
int Week(int,int,int);                    /*求出星期对应的数字如(4对应星期四)*/
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void main()
{
   char menu; 
   do   
   { 
	 system("cls");
     Output_Menu(); 
	 scanf("%s",&menu);
     switch(menu)  
	 { 
       case '1': Getweek_Ofdate();  break; 
       case '2': Leapyear_Judgement(); break; 
       case '3': Output_Calendarofyear(); break; 
	   case '4': Getdaysamount_Ofmonth();break;
       case '5': Output_Calendarofmonth();break; 
	   case '6': break;
       default:printf("输入错误,按任何键返回.\n");getch();break;
     }
   } while(menu!=6);  
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Output_Menu()/*输出主菜单*/
{ 
   printf("1:----------我想知道某一天是星期几\n"); 
   printf("\n");
   printf("2:----------我想知道某年是不是闰年\n"); 
   printf("\n");
   printf("3:----------我想浏览一下某年的日历\n"); 
   printf("\n");
   printf("4:----------我想知道某个月有多少天\n"); 
   printf("\n");
   printf("5:----------我想浏览一下某月的日历\n");
   printf("\n");
   printf("6:----------我不想做其中的任何操作\n");
   printf("\n");
   printf("请选择你想做的操作:"); 
} 
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Output_Calendarofyear()/*输出某一年十二个月的日历*/
{
   int month=0,i,j,year;
   char continueflag; 
   do
   {
      printf("请输入年份(xxxx)=>");
      scanf("%d",&year);
      int w=Getweek_Firstdayofmonth(year,month);
      char *p[7]={"  Sun","  Mon","  Tue","  Wed","  Thu","  Fri","  Sat"};
      for(month=1;month<=12;month++)
	  {
         printf("\n*************** %d ****************\n\n",month);
         for(i=0;i<7;i++) printf("%s",*(p+i));
         printf("\n");
         for(i=0;i<w;i++) printf("     ");   /*输出空格*/
         for(j=1;j<=Getdayamount_Ofmonth(year,month);j++)
		 {
            printf("%5d",j);                 /*输出每天的日期*/
            w++;
            w=w%7;
            if(w==0&&j<=Getdayamount_Ofmonth(year,month)) printf("\n");
		 }
	  }
      printf("\n是否继续<Y继续,其它键返回>");
      continueflag=getch(); 
      printf("%c\n",continueflag); 
   } while (continueflag=='y' || continueflag=='Y'); 
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Output_Calendarofmonth() /*输出某一年中某月的日历*/
{
   int month,year,i,j;
   char continueflag;
   do
   { 
      printf("请输入年份(xxxx)=>");
      scanf("%d",&year);
      printf("请输入月份(xx)=>");
      scanf("%d",&month);
      int w=Getweek_Firstdayofmonth(year,month);
      char *p[7]={"  Sun","  Mon","  Tue","  Wed","  Thu","  Fri","  Sat"};
      printf("\n*************** %d ****************\n\n",month);
      for(i=0;i<7;i++) printf("%s",*(p+i));
      printf("\n");
      for(i=0;i<w;i++) printf("     ");      /*输出空格*/
      for(j=1;j<=Getdayamount_Ofmonth(year,month);j++)
	  {
         printf("%5d",j);                    /*输出每一天的日期*/
         w++;
         w=w%7;
         if(w==0&&j<=Getdayamount_Ofmonth(year,month)) printf("\n");
	  }
      printf("\n是否继续<Y继续,其它键返回>");
      continueflag=getch(); 
      printf("%c\n",continueflag); 
   } while (continueflag=='y' || continueflag=='Y'); 
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Leapyear_Judgement()/*判断输入年份是不是闰年*/
{   
	int year;
    char continueflag; 
	do
	{
	   printf("请输入年份(xxxx)=>");
	   scanf("%d",&year);
   	   if(year%4==0&&year%100!=0||year%400==0) 
		  printf("你输入的年份就是闰年!!!");
       else 
	      printf("你输入的年份不是闰年!!!");
	   printf("\n是否继续<Y继续,其它键返回>");
       continueflag=getch(); 
       printf("%c\n",continueflag); 
	} while (continueflag=='y' || continueflag=='Y'); 
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Getweek_Ofdate()/*求某年某月某日是星期几*/
{
	int year,month,date,weekday; 
    char continueflag; 
    char *weekdaystr; 
    do
	{ 
       printf("请输入年份(xxxx)=>"); 
       scanf("%d",&year); 
       printf("请输入月份(xx)=>");
       scanf("%d",&month); 
       printf("请输入日期(xx)=>");
       scanf("%d",&date);
       weekday=Week(year,month,date); 
       switch(weekday) 
	   { 
          case 0:   weekdaystr="日"; break; 
          case 1:   weekdaystr="一"; break; 
          case 2:   weekdaystr="二"; break; 
          case 3:   weekdaystr="三"; break; 
          case 4:   weekdaystr="四"; break; 
          case 5:   weekdaystr="五"; break; 
          case 6:   weekdaystr="六"; break; 
	   } 
       printf("%d年%d月%d日是星期%s,是否继续<Y继续,其它键返回>",year,month,date,weekdaystr); 
       continueflag=getch(); 
       printf("%c\n",continueflag); 
	}while(continueflag=='y' || continueflag=='Y'); 
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
int Getdayamount_Ofyear(int year)/*计算输入年份的天数*/
{
   int days;
   if(year%4==0&&year%100!=0||year%400==0) days=366;
   else days=365;
   return days;
}
int Getdayamount_Ofmonth(int year,int month)/*计算每月的天数*/
{
   int monthdays;
   switch(month)
   {
      case 2:monthdays=(Getdayamount_Ofyear(year)==366)? 29:28;
          break;                
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:monthdays=31;
          break;         
      case 4:
      case 6:
      case 9:
      case 11:monthdays=30;
          break;         
   }
   return monthdays;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void Getdaysamount_Ofmonth()/*计算每月的天数*/
{
   int monthdays,year,month;
   char continueflag; 
   do
   {
      printf("请输入年份(xxxx)=>");
      scanf("%d",&year);
      printf("请输入月份(xx)=>");
      scanf("%d",&month);
      switch(month)
	  {
      case 2:monthdays=(Getdayamount_Ofyear(year)==366)? 29:28;
          break;                
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:monthdays=31;
          break;         
      case 4:
      case 6:
      case 9:
      case 11:monthdays=30;
          break;         
	  }
      printf("%d",monthdays);
      printf("\n是否继续<Y继续,其它键返回>");
      continueflag=getch(); 
      printf("%c\n",continueflag); 
   }while(continueflag=='y' || continueflag=='Y'); 
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

int Getweek_Firstdayofyear(int year)/*计算每年第一天星期几*/
{
   int sum=0,firstday,i;
   if(year>=2000)
   {
      for(i=2000;i<year;i++) sum=Getdayamount_Ofyear(i)+sum;
      firstday=(sum+6)%7;
   }
   else
   {
      for(i=year;i<2000;i++) sum=Getdayamount_Ofyear(i)+sum;
      firstday=(6-sum%7)%7;
   }
   return firstday;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

int Getweek_Firstdayofmonth(int year,int month)/*计算每月第一天是星期几*/
{
   int month_day,sum=0,i;
   for(i=1;i<month;i++)
   {
      sum=sum+Getdayamount_Ofmonth(year,i);
   }
   month_day=(Getweek_Firstdayofyear(year)+sum)%7;
   return month_day;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

int Week(int year,int month,int date)/*应用基姆拉尔森计算公式求星期*/
{
	if((month==1)||(month==2))  
	{ 
      month+=12; 
      year--; 
    } 
    return int((date+2*month+3*(month+1)/5+year+year/4-year/100+year/400)+1)%7; 
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -