这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 岭南EE码农港 » 万年历

共2条 1/1 1 跳转至

万年历

菜鸟
2014-11-21 00:04:49     打赏
  1. #include  
  2. /*自定义函数说明*/  
  3. void screen();           /*系统主界面*/  
  4. void whatisit();         /*查询某年某月某日是星期几*/  
  5. void leapyear();         /*查询某年是否闰年*/  
  6. void printyearday();     /*打印某年的全年日历*/  
  7. int IsLeapYear(int);     /*判断某年是否为闰年*/  
  8. int whatisita(int,int);  /*计算今天是星期几*/  
  9. int everymonth(int,int); /*查询每月最大天数*/  
  10. void printmonth(int,int);/*打印某年某月日历*/  
  11. void printmonthday();    /*打印某年的某月最大天数*/  
  12. void printyearmonthday(); /*查询某年某月日历*/  
  13. /*定义一个判断星期几的指针数组*/  
  14. char *week[] = { "Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Saturday" };  
  15. int main()  
  16. {  
  17.    system("color 2F"); /*设置背景颜色为浅绿色*/  
  18.    printf("制作人ID:2013914215.\n\n"); /*个人信息,姓名:庞世聪,学号:2013914215*/  
  19.    screen();  /*万年历的入口*/  
  20.    getch();  
  21. }  
  22.   
  23. /*万年历查询主界面(含部分功能)*/  
  24. void screen()  
  25. {  
  26.     int n;  
  27.     while (1)  
  28.     {  
  29.         /*万年历的功能*/  
  30.         printf("    万年历查询程序:\n");  
  31.         printf("1:查询某年某月某日是星期几\n");  
  32.         printf("2:查询某年是否是闰年");  
  33.         printf("3:打印某年的全年日历");  
  34.         printf("4:打印某年某月的日历");  
  35.         printf("5:查询某年某月的最大天数");  
  36.         printf("6:退出");  
  37.         printf("请输入要查询的选项: ");  
  38.         scanf("%d",&n);  
  39.         switch (n)  
  40.         {   
  41.             /*实现相应功能的函数*/  
  42.             case 1:whatisit();break;  
  43.             case 2:leapyear();break;  
  44.             case 3:printyearday();break;  
  45.             case 4:printyearmonthday();break;  
  46.             case 5:printmonthday();break;  
  47.             case 6:return;  
  48.             default:printf("你输入错误,请按要求输入!!!");break;  
  49.         }/*end of switch (n)*/  
  50.   
  51.     }/*end of while (1)*/  
  52. }/*end of void screen ()*/  
  53.   
  54. /*查询某年某月某日是星期几*/  
  55. void whatisit()  
  56. {  
  57.     int y, m, d, s, k=1, sum, n, i;  
  58.     char yn;  
  59.   
  60.     /*定义一个数组,计算每月的天数*/  
  61.     int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  
  62.     while (k)  
  63.     {  
  64.         printf("请依次输入年,月,日:");  
  65.         scanf("%d,%d,%d",&y,&m,&d);  /*输入要查询的年、月、日*/  
  66.         s = 0;  
  67.   
  68.         for (i = 1; i < m; i++)  
  69.         {  
  70.             s = s + a[i];  
  71.         }  
  72.   
  73.         s = s + d;  
  74.   
  75.         if (IsLeapYear(y) && m > 2)  
  76.         {  
  77.             s = s + 1;  
  78.         }  
  79.   
  80.         sum = s;  
  81.         n = (y-1 + (y-1)/4-(y-1)/100 + (y-1)/400 + sum) % 7;  
  82.         printf("%d 年 %d 月 %d 号是:  %s.\n",y,m,d,week[n]);  
  83.         printf("是否要继续查询(Y/N)?");  
  84.         scanf("%c",&yn);  
  85.         getchar();  
  86.   
  87.         if (yn == 'y' || yn == 'Y')  
  88.         {  
  89.             k = 1;  
  90.         }  
  91.           
  92.         else   
  93.         {  
  94.             k = 0;  
  95.         }/*end of if (yn == 'y' || yn == 'Y')*/  
  96.     }/*end of while (k)*/  
  97. }/*end of void whatisit()*/  
  98.   
  99. /*判断某年是否是闰年*/  
  100. int IsLeapYear(int year)  
  101. {  
  102.     return(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);  /*返回一个整型值0或1*/  
  103. }  /*end of int IsLeapYear(int year)*/  
  104.   
  105. /*查询某年是否是闰年*/  
  106. void leapyear()  
  107. {  
  108.     int y, k = 1;   
  109.     char yn;  
  110.     while (k)  
  111.     {  
  112.         printf("请输入要查询的年份: ");  
  113.         scanf("%d",&y);  
  114.   
  115.         if (IsLeapYear(y))  /*y是判断标志*/  
  116.         {  
  117.             printf("%d 年是闰年!",y);  
  118.         }  
  119.   
  120.         else  
  121.         {  
  122.             printf("%d 年不是闰年!\n",y);  
  123.         }  
  124.   
  125.         printf("是否继续查询(Y/N)?");  
  126.         scanf("%c",&yn); getch();  
  127.   
  128.         if (yn == 'y' || yn == 'Y')   /*是否继续查询入口*/  
  129.         {  
  130.             k = 1;   /*k是是否继续查询的标志*/  
  131.         }  
  132.   
  133.         else  
  134.         {  
  135.             k = 0;  
  136.         } /*end of if (yn == 'y' || yn == 'Y')*/  
  137.     } /*end of while (k)*/  
  138. /*end of void leapyear()*/  
  139.   
  140. /*计算当天是星期几*/  
  141. int whatisita(int y,int m) /*whatisita 是有参函数,返回值是整型,y表示年,m表示月*/  
  142. {  
  143.     int n, i;  
  144.     int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, s = 0;  
  145.       
  146.     for (i = 1;i < m;i++)   /*计算总天数*/  
  147.     {  
  148.         s = s + a[i];  
  149.     }  
  150.   
  151.     if (IsLeapYear(y) && m > 2)  /*判断是否闰年,如果是闰年就总天数加1天*/  
  152.     {  
  153.         s = s + 1;  
  154.     }  
  155.   
  156.     n = (y-1+(y-1)/4-(y-1)/100+(y-1)/400+s+1)%7;  
  157.     return n; /*返回值是n*/  
  158. }/*end of int whatisita(int y,int m)*/  
  159.   
  160. /*打印某年的全年日历*/  
  161. void printyearday()  
  162. {  
  163.     int y, value, sum, i, j, k = 1;  
  164.     char yn;  
  165.     while (k)  
  166.     {  
  167.         printf("请输入查询的日历的年份: ");  
  168.         scanf("%d",&y);  
  169.   
  170.         for (i = 1; i <= 12; i++)  
  171.         {  
  172.             printf("                              %d年%d月  
  173. ",y,i);  
  174.                         value = whatisita(y, i);  
  175.             sum = everymonth(y, i);  
  176.             printmonth(value, sum);  
  177.             printf("\n\n");  
  178.         }  
  179.   
  180.         printf("是否继续查询(Y/N)?");  
  181.         scanf("%c",&yn);  getchar();  
  182.   
  183.         if (yn == 'Y' || yn == 'y')  
  184.         {  
  185.             k = 1;  
  186.         }  
  187.         else  
  188.         {  
  189.             k = 0;  
  190.         }  
  191.     } /*end of while (k)*/  
  192. /*end of void printyearday()*/  
  193.   
  194. /*查询某月最大天数*/  
  195. int everymonth(int year, int month)  /*everymonth是有参函数,year是年份,month是月份,返回值是整型*/  
  196. {  
  197.     int s;  
  198.     static int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
  199.     s =a [month];  
  200.   
  201.     if (IsLeapYear(year) && month == 2)  
  202.     {  
  203.         s = s + 1;  
  204.     }  
  205.   
  206.     return s;  /*s是返回值*/  
  207. /*end of int everymonth(int year, int month)*/  
  208.   
  209. /*打印某年的某月最大天数函数*/  
  210. void printmonthday()  
  211. {  
  212.     int y, m, value, k = 1;   
  213.     char yn;  
  214.     while (k)  
  215.     {  
  216.         printf("请输入查询的年份,月份: ");  
  217.         scanf("%d,%d",&y,&m);  
  218.         value = everymonth(y,m);  
  219.         printf("%d年%d月的最大天数为%d.\n",y,m,value);  
  220.         printf("是否继续查询(Y/N)?");  
  221.         scanf("%c",&yn); getchar();  
  222.   
  223.         if (yn == 'y' || yn == 'Y')  
  224.         {  
  225.             k = 1;  
  226.         }  
  227.                 else  
  228.         {  
  229.             k = 0;  
  230.         }  
  231.     } /*end of while (k)*/  
  232. /*end of void printmonthday()*/  
  233.   
  234. /*打印月历*/  
  235. void printmonth(int value,int sum) /*printmonth是有参函数,value和sum是参数,无返回值*/  
  236. {  
  237.     int n, i = 0, j;  
  238.     char *x[7] = {"Sunday""Monday""Tuesday""Wenesday""Thursday""Friday""Saturday"};  
  239.       
  240.     for (j = 0; j < 7; j++)  
  241.     {  
  242.         printf("%-10s",x[j]);  
  243.     }  
  244.   
  245.     printf("\n");  
  246.   
  247.     while (i < value)  
  248.     {  
  249.         printf("          ");  
  250.         i++;  
  251.     }  
  252.   
  253.     for (n = 1; n < 7-value; n++)  
  254.     {  
  255.         printf("%-10d",n);  
  256.     }  
  257.   
  258.     while (n <= sum)  
  259.     {  
  260.         if ((n + value - 1) % 7 == 0)  
  261.         {  
  262.             printf("\n");  
  263.         }  
  264.         if (n/10 > 0)  
  265.         {  
  266.             printf("%-10d",n);  
  267.         }  
  268.         else  
  269.         {  
  270.             printf("%-10d",n);  
  271.         }  
  272.   
  273.         n++;  
  274.     }/*end of   while (n <= sum)*/  
  275. /*end of void printmonth(int value,int sum)*/  
  276.   
  277. /*查询某年某月日历*/  
  278. void printyearmonthday()  
  279. {  
  280.     int y, m, value, sum, k = 1;  
  281.     char yn;  
  282.     while (k)  
  283.     {  
  284.         printf("请输入要查询日历的年份,月份:  ");  
  285.         scanf("%d,%d",&y,&m);  
  286.         printf("                       %d年%d月的日历\n",y,m);  
  287.         value = whatisita(y,m);  /*whatisit 函数返回一个值,返回值是本月的第一天是星期几*/  
  288.         sum = everymonth(y,m);   /*everymonth 函数返回一个值,返回值是本月的最大天数*/  
  289.         printmonth(value,sum);  
  290.         printf("\n");  
  291.         printf("是否继续查询(Y/N)?");  
  292.         scanf("%c",&yn); getchar();  
  293.         if (yn == 'y' || yn == 'Y')  
  294.         {  
  295.             k = 1;  
  296.         }  
  297.         else  
  298.         {  
  299.             k = 0;  
  300.         }  
  301.     }/*end of   while (k)*/  
  302.   
  303. <p>  
  304.     } /*end of void printyearmonthday()*/  
  305. </p>  
  306.   
  307. <p>  
  308.       
  309.   
  310. </p>  
  311.   
  312. <p>  
  313.       
  314.   
  315. </p>  
view plaincopy to clipboardprint?
  1.   
view plaincopy to clipboardprint?
  1.   
view plaincopy to clipboardprint?
  1. <img src="http://uphotos.eepw.com.cn/1415793597/pics/f574da662596daafce1d321d4ca9f843.PNG" width="361" height="294">   

 



总结:写程序需要耐心和细心,需要反复检查,防止遗漏。





关键词: 万年历    

菜鸟
2014-11-21 09:38:16     打赏
2楼

include后面没有代码?

这个还可以,就是有点审美疲劳了,大家都差不多


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]