您好,登錄后才能下訂單哦!
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; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。