C语言实现万年历

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
#include<conio.h>  
typedef struct today  
{  
    int day;  
    int month;  
    int year;  
} today;  
  
int day_cankao[2][13]={  
    {0,31,28,31,30,31,30,31,31,30,31,30,31},  
    {0,31,29,31,30,31,30,31,31,30,31,30,31}  
};  
char *week[]=  
{  
    "Sun","Mon","Tue","Wen","Thu","Fir","Sat"  
};  
struct tm *todayuse;//struct tm定义c语言中time的结构体  
today today_current;  
int getweekday(today today_usenow)  
{  
    // w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1  
    //其中,c是年份的前两位,y是年份的后两位,m是月份,d是日期,这里需要注意的是,如果是1月和2月,c和y需要按照上一年来取值。  
    int w=0;  
      
    int year=today_usenow.year;  
    int month=today_usenow.month;  
    if(today_usenow.month==1 || today_usenow.month==2)  
    {  
        month+=12;  
        year--;  
    }  
    int y=year%100;  
    int c=year/100;  
    int m=month;  
      
    w=y + y/4 +  c/4  - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;  
    while(w<0)  
    {  
        w+=7;  
    }  
    return (w%7);  
  
}  
int is_leap(int year)  
{  
  
    if( (year%4==0 && year%100!=0) || (year%400==0))  
    {  
        return 1;  
    }  
    else  
        return 0;  
}  
int  getmonthdays(int year,int month)  
{  
    return day_cankao[is_leap(year)][month];  
}  
  
  
void print_calendar(today today_usenow)  
{  
    printf("---------------------------\n");  
    printf("Sun Mon Tue Wen Thu Fir Sat\n");  
    int firstday=0;  
    today today_usehere=today_usenow;  
    today_usehere.day=1;  
    int day=getweekday(today_usehere);//日期前  
    //int  daysuseafter  
    int days=getmonthdays(today_usenow.year,today_usenow.month);//月总数  
    // 0 1 2 3 4 5 6  // 6   
    int daysbefore=0;  
    if((today_usenow.month-1)==0)  
    {  
        //现在为1月,去年的十二月份  
        daysbefore=getmonthdays(today_usenow.year-1,12);  
        //  printf("%d is",daysbefore);  
    }  
    else  
    {  
  
  
        daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);  
    }  
    int daysbefoeit=daysbefore-day+1;  
    printf("");  
    int count=1;  
         if(day==0)  
         {  
             daysbefoeit-=7;  
             for(int i=0;i<day+7;i++)  
             {  
                   
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
                  
             }  
               printf("\n");  
             count=7;  
         }  
         else  
         {  
             for(int i=0;i<day;i++)  
             {  
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
             }  
              count=day;  
         }  
         int m=1;  
         for(int i=0;i<=6-day;i++)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d ",m);  
             }  
  
             m++;  
         }  
         printf("\n");  
         if(day==0)  
         {  
             count=14;  
         }  
         else  
         {  
             count=7;  
         }  
         int hang=0;  
         while(m<=days)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d  ",m);  
             }  
             hang++;  
             if(hang==7)  
             {  
                 printf("\n");  
                 hang=0;  
             }  
  
             m++;  
         }  
        if(day==0)  
        {  
            count=days+7;  
        }  
        else  
        {  
            count=day+days;  
        }  
    int newmonth=1;  
    for(int j=hang;j<7;j++)  
    {  
  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
          
        newmonth++;  
    }  
    printf("\n");  
    count=count+7-hang;  
    for(int j=0;j< 42-count;j++)  
    {  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
        newmonth++;  
    }  
      
      
      
  
  
  
  
}  
//int getmonth  
  
int main()  
{  
    time_t timep;    
    struct tm *p;    
    time(&timep);    
    p =localtime(&timep); //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间     
    //p = gmtime(&timep); //把日期和时间转换为格林威治(GMT)时间的函数     
  
    /*printf("Year:  %d\n", 1900+p->tm_year);   
    printf("Month:  %d\n", 1+p->tm_mon);   
    printf("Day:  %d\n", p->tm_mday);   
    printf("Hour:  %d\n", p->tm_hour);   
    printf("Minute:  %d\n", p->tm_min);   
    printf("Second:  %d\n",  p->tm_sec);   
    printf("Weekday:  %d\n", p->tm_wday);   
    printf("Days:  %d\n", p->tm_yday);   
    printf("Isdst:  %d\n", p->tm_isdst);   
    */  
      
    //printf("%d",day_cankao[0][12]);  
    today_current.year=1900+p->tm_year;  
    today_current.month=1+p->tm_mon;  
    today_current.day= p->tm_mday;  
    today use=today_current;  
    int c1,c2;  
    printf("    %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);  
    print_calendar(today_current);  
   while(1)  
   {  
    c1 = getch();  
    if(c1==27)  
    {  
        printf("您已经退出系统");  
        break;  
    }  
    if(c1==110)  
    {  
        printf("    %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);  
        //printf("%d \n",getweekday(today_current));  
  
        print_calendar(today_current);  
        use=today_current;  
        continue;  
    }  
    c2 = getch();  
    //printf( "%d %d",c1,c2);  
  
    if(c1==224 && c2==72)  
    {  
        use.month+=1;  
        if(use.month==13)  
        {  
            use.month=1;  
            use.year+=1;  
        }  
        printf("    %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  
        //printf("%d \n",getweekday(today_current));  
  
        print_calendar(use);  
      
    }  
    if(c1==224 && c2==80)  
    {  
        use.month-=1;  
        if(use.month==0)  
        {  
            use.month=12;  
            use.year-=1;  
        }  
        printf("    %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  
        //printf("%d \n",getweekday(today_current));  
  
        print_calendar(use);  
    }  
    if(c1==224 && c2==75)  
    {  
        use.year-=1;  
        printf("    %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  
        //printf("%d \n",getweekday(today_current));  
  
        print_calendar(use);  
    }  
    if(c1==224 && c2==77)  
    {  
        use.year+=1;  
        printf("    %d 年 %d 月 %d 日\n",use.year,use.month,use.day);  
        //printf("%d \n",getweekday(today_current));  
  
        print_calendar(use);  
    }  
    printf("\n");  
    printf("按上下按钮,进行月份变换\n");  
    printf("按左右按钮,进行年份变换\n");  
    printf("按ESC按键,退出系统\n");  
    printf("按N按钮,查看当前日期\n");  
   }  
    //上 224 72  
    //下 224 80  
    //左 224 75  
    //右 224 77  
    //esc 27  
    // n 110  
  
  
      
     return 0;  
}  
c语言实现的万年历显示,按下上下左右按键来更换日期和年份
  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值