鱼C论坛

 找回密码
 立即注册
查看: 2296|回复: 1

[原创] 万年历

[复制链接]
发表于 2021-5-25 20:19:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include "windows.h"

  5. #define C 70


  6. int rn(int year){
  7.         if((year%4==0)&&(year%100!=0)||year%400==0)
  8.          return 1;
  9.         else return 0;
  10. }
  11. int date1(int year,int month,int day){
  12.         int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  13.         int month_str[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
  14.         int i,j,mdays,wdays,days=0;
  15.              for(i=1;i<year;i++)
  16.             {
  17.                 if(rn(i))
  18.                     days=days+366;                                                                                                        //闰年366天//
  19.                 else
  20.                     days=days+365;
  21.             }
  22.             for(i=1;i<month;i++)
  23.             {
  24.                 if(i==2&&rn(year))                                                                                                         /**并且,判断闰年二月的天数**/
  25.                 days+=29;
  26.                 else
  27.                 days+=month_day[i];                                                                                                        //赋予每月相应的天数
  28.             }
  29.             printf("%d.%d\n",year,month_str[month]);                                                            //输出当前系统的时间
  30.             printf("  一  二  三  四  五  六  日\n");
  31.             wdays=days%7;                                                                                                                        //计算每月有几周,向下取整
  32.             for(j=0;j<wdays;j++)
  33.                 printf("    ");                                                                                 //计算每月一日为星期几来决定打印空格数
  34.                 if(month==2&&rn(year))
  35.                 mdays=29;
  36.                 else
  37.                 mdays=month_day[month];                                                                                                //确定每月天数
  38.                 for(i=1;i<=mdays;i++)                                                                           //以当前月份输出日期
  39.                 {
  40.                     if(i>1&&days%7==0)
  41.                     {
  42.                         printf("\n");                                                                                        //以7天作为一行输出
  43.                         printf("\n");                                                                                        //将两周日期分开,使日历更清晰
  44.                     }
  45.                     printf("%4d",i);                                                                                         //输出日期
  46.                                 days=days+1;
  47.                 }
  48.                 printf("\n----------------------------\n\n\n");   
  49. }

  50. int date2(int year,int month,int day){
  51.         int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  52.         int month_str[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
  53.         int i,j,mdays,wdays,days=0,v=0;
  54.              for(i=1;i<year;i++)
  55.             {
  56.                 if(rn(i))
  57.                     days=days+366;                                                                                                        //闰年366天//
  58.                 else
  59.                     days=days+365;
  60.             }
  61.             for(i=1;i<month;i++)
  62.             {
  63.                 if(i==2&&rn(year))                                                                                                         /**并且,判断闰年二月的天数**/
  64.                 days+=29;
  65.                 else
  66.                 days+=month_day[i];                                                                                                        //赋予每月相应的天数
  67.             }
  68.             gotoxy(35,v++);
  69.             printf("%d.%d\n",year,month_str[month]);                                                            //输出当前系统的时间
  70.             gotoxy(35,v++);
  71.             printf("  一  二  三  四  五  六  日\n");
  72.             wdays=days%7;                                                                                                                        //计算每月有几周,向下取整
  73.             gotoxy(35,v++) ;
  74.             for(j=0;j<wdays;j++)
  75.                 printf("    ");                                                                                 //计算每月一日为星期几来决定打印空格数
  76.                 if(month==2&&rn(year))
  77.                 mdays=29;
  78.                 else
  79.                 mdays=month_day[month];                                                                                                //确定每月天数
  80.                 for(i=1;i<=mdays;i++)                                                                           //以当前月份输出日期
  81.                 {
  82.                     if(i>1&&days%7==0)
  83.                     {
  84.                         printf("\n");
  85.                                         gotoxy(35,v++);                                             //以7天作为一行输出
  86.                         printf("\n");
  87.                                         gotoxy(35,v++);                                                                                        //将两周日期分开,使日历更清晰
  88.                                        
  89.                     }
  90.                     printf("%4d",i);                                                                                         //输出日期
  91.                                 days=days+1;
  92.                 }
  93.                 }
  94.                
  95. int date3(int year,int month,int day){
  96.         int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  97.         int month_str[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
  98.         int i,j,mdays,wdays,days=0,v=0;
  99.              for(i=1;i<year;i++)
  100.             {
  101.                 if(rn(i))
  102.                     days=days+366;                                                                                                        //闰年366天//
  103.                 else
  104.                     days=days+365;
  105.             }
  106.             for(i=1;i<month;i++)
  107.             {
  108.                 if(i==2&&rn(year))                                                                                                         /**并且,判断闰年二月的天数**/
  109.                 days+=29;
  110.                 else
  111.                 days+=month_day[i];                                                                                                        //赋予每月相应的天数
  112.             }
  113.             gotoxy(C,v++);
  114.             printf("%d.%d\n",year,month_str[month]);                                                            //输出当前系统的时间
  115.             gotoxy(C,v++);
  116.             printf("  一  二  三  四  五  六  日\n");
  117.             wdays=days%7;                                                                                                                        //计算每月有几周,向下取整
  118.             gotoxy(C,v++) ;
  119.             for(j=0;j<wdays;j++)
  120.                 printf("    ");                                                                                 //计算每月一日为星期几来决定打印空格数
  121.                 if(month==2&&rn(year))
  122.                 mdays=29;
  123.                 else
  124.                 mdays=month_day[month];                                                                                                //确定每月天数
  125.                 for(i=1;i<=mdays;i++)                                                                           //以当前月份输出日期
  126.                 {
  127.                     if(i>1&&days%7==0)
  128.                     {
  129.                         printf("\n");
  130.                                         gotoxy(C,v++);                                              //以7天作为一行输出
  131.                         printf("\n");
  132.                                         gotoxy(C,v++);                                                                                        //将两周日期分开,使日历更清晰
  133.                                        
  134.                     }
  135.                     printf("%4d",i);                                                                                         //输出日期
  136.                                 days=days+1;
  137.                 }
  138.                 }

  139. int main(){
  140.         system("color F0");
  141.             int year,month,day,ch,month1;
  142.         printf("请输入某年某月,格式如2021.1\n");
  143.                 scanf("%4d.%2d",&year,&month);
  144.             while(1){
  145.                     switch(month){
  146.                             case 1:
  147.                             case 2:
  148.                             case 3:
  149.                             case 4:
  150.                                 case 5:
  151.                             case 6:
  152.                             case 7:
  153.                             case 8:
  154.                                 case 9:
  155.                             case 10:date1(year,month,day);
  156.                                                 date2(year,month+1,day);
  157.                                                 date3(year,month+2,day);
  158.                                                 break;       
  159.                                 case 11:month=11;
  160.                                             date1(year,month-1,day);
  161.                                                 date2(year,month,day);
  162.                                                 date3(year,month+1,day);
  163.                                                 break;
  164.                                 case 12:month=12;
  165.                                             date1(year,month-2,day);                                                           //月份为十二月,加一年
  166.                                                 date2(year,month-1,day);
  167.                                                 date3(year,month,day);
  168.                                                 break;
  169.                         }
  170.                         gotoxy(0,15);
  171.                 printf("      ↑......上一年\n");
  172.                 printf("      ↓......下一年\n");
  173.                 printf("      ←....前一个月\n");
  174.                 printf("      →....后一个月\n");
  175.                 printf("      Esc.......退出\n");
  176.                 printf("\n\n");
  177.                       ch=getch();
  178.                         if(ch==0)
  179.                          ch=getch();
  180.                         system("cls");
  181.                 if(ch==72){                                                                                                                                //ASCII码 ↑
  182.                         year--;
  183.                 }
  184.                 if(ch==80){                                                                                                                                //ASCII码 ↓
  185.                          year++;
  186.                 }
  187.                 if ( ch == 75)                                                                                                  //ASCII码←
  188.                 {
  189.                     year-=(month==1)?1:0;                                                                                        //三目运算符,判断月份为一,则年减一;月份不为一,则年减零
  190.                     month=(month==1)?12:month-1;                                                                        //如果月份为一,减一为十二;不为一,则月份减一
  191.                 }
  192.                 if ( ch == 77)                                                                                          //ASCII码→
  193.                 {
  194.                         year+=(month==12)?1:0;                                                                                        //月份为十二月,加一年;不为十二月,不加年份数
  195.                         month=month%12+1;                                                                                                //月份除12取余数再加一
  196.                 }
  197.                 if(ch == 27) {                                                                                        //ASCII码Esc
  198.                 break;
  199.              
  200.             }
  201.             
  202.     }
  203. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-25 20:20:27 | 显示全部楼层
有一个小小的内容被删掉,好像不能发布全部内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 12:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表