C语言实现万年历
时间:2021-04-27 09:08:58|栏目:C代码|点击: 次
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 ] ?C 2c+ [13 * (m+1) / 5] + d ?C 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; }