分享

万年历(C语言)

 共同成长888 2017-09-07


#include<stdio.h>


 void screen();                      
 void whatisit();                    
 void leapyear();                    
 void printyearday();                
 int IsLeapYear(int);                
 int whatisita(int,int);             
 int everymonth(int,int);            
 void printmonth(int,int);           
 void printmonthday();               


char*week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};


void main()
{
 screen();
}


void screen()
{
 int n;
 while(1)
 {
  printf("   万年历查询程序:\n");
  printf("1. 查询某年某月某日是星期几\n");
  printf("2. 查询某年是否是闰年\n");
  printf("3 .打印某年的全年日历\n");
  printf("4. 查询某月的最大天数\n");
  printf("5. 退出\n");
  printf("请输入要查询的选项:");
  scanf("%d",&n);
  switch(n)
  {
  case 1:whatisit();break;
  case 2:leapyear();break;
  case 3:printyearday();break;
  case 4:printmonthday();break;
  case 5:return;
  default:printf("你输入错误,请按要求输入!!!\n");break;
  }
 }
}


void whatisit()
{
 int y,m,d,s,k=1,sum,n,i;
 char yn;
 int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 while(k)
 {
  printf("请依次输入年,月,日:\n");
  scanf("%d,%d,%d",&y,&m,&d);
  s=0;
  for(i=1;i<m;i++)
   s=s+a[i];
  s=s+d;
  if(IsLeapYear(y)&&m>2)s=s+1;
  sum=s;
  n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+sum)%7;
  printf("这天是%s\n",week[n]);
  printf("是否继续查询(Y/N)?");
  scanf("%c",&yn);getchar();
  if(yn=='y'||yn=='Y')k=1;
  else k=0;
 }
}


int IsLeapYear(int year)
{return(year%4==0&&year%100!=0)||(year%400==0);}


void leapyear()
{
 int y,k=1;
 char yn;
 while(k)
 {
  printf("请输入查询的年份:\n");
  scanf("%d",&y);
  if(IsLeapYear(y))
   printf("是闰年!\n");
  else
   printf("不是闰年!\n");
  printf("是否继续查询(Y/N)?");
  scanf("%c",&yn);getchar();
  if(yn=='y'||yn=='Y')k=1;
  else k=0;
 }
}


int whatisita(int y,int m)
{
 int n,i;
 int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},s=0;
 for(i=1;i<m;i++)
  s=s+a[i];
 if(IsLeapYear(y)&&m>2)s=s+1;
 n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+s+1)%7;
 return n;
}


void printyearday()
{
 int y,value,sum,i,k=1;
 char yn;
 while(k)
 {
  printf("请输入查询日历的年份:\n");
  scanf("%d",&y);
  for(i=1;i<=12;i++)
  {
   printf("%d年%d月的信息:\n",y,i);
   value=whatisita(y,i);
   sum=everymonth(y,i);
   printmonth(value,sum);
   printf("\n");
  }
  printf("是否继续查询(Y/N)?");
  scanf("%c",&yn);getchar();
  if(yn=='y'||yn=='Y')k=1;
  else k=0;
 }
}


int everymonth(int year,int month)
{
 int s;
 static int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 s=a[month];
 if(IsLeapYear(year)&&month==2)
  s=s+1;
 return s;
}


void printmonthday()
{
 int y,m,value,k=1;
 char yn;
 while(k)
 {
  printf("请输入查询的年份,月份:\n");
  scanf("%d,%d",&y,&m);
  value=everymonth(y,m);
  printf("%d年%d月的最大天数为%d.\n",y,m,value);
  printf("是否继续查询(Y/N)?");
  scanf("%c",&yn);getchar();
  if(yn=='y'||yn=='Y')k=1;
  else k=0;
 }
}


void printmonth(int value,int sum)
{
 int n,i=0,j;
 char*x[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
 for(j=0;j<7;j++)
  printf("%s   ",x[j]);
 printf("\n");
 while(i<value){printf("      ");i++;}
 for(n=1;n<=7-value;n++)
  printf("%d     ",n);
 while(n<=sum)
 {
  if((n+value-1)%7==0)
   printf("\n");
  if(n/10>0)
   printf("%d    ",n);
  else
   printf("%d     ",n);
  n++;
 }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多