C语言实现系统日历查询系统
生活随笔
收集整理的這篇文章主要介紹了
C语言实现系统日历查询系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言實現系統日歷查詢系統
本系統可以實現的功能如下:
1:按年查詢該年的年歷并顯示
2:按年和月查詢該年該月的月歷并顯示
3:計算某年某月某日距離今天多少天,某年某月某日是星期幾
代碼如下:
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<time.h>const char MonName[12][4] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};//月份縮寫 int MonNum[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//每月的天數struct Calendar {int year;//年份int weak[12];//存儲每月的第一天(1月1日)是星期幾 };typedef struct Calendar Calendar;int LeapYear(int); //判斷該年是否為閏年 //求公歷該年的1月1日是星期幾 int week(Calendar* time); //獲取該年每月1號是星期幾 void GetEveryMonthWeek(Calendar* time) {time->weak[0] = week(time);if (LeapYear(time->year))MonNum[1] = 29;elseMonNum[1] = 28;for (int i = 1; i < 12; i++){time->weak[i] = time->weak[i - 1] + MonNum[i - 1] % 7;if (time->weak[i] > 6){time->weak[i] = time->weak[i] % 7;if (time->weak[i] == 0)time->weak[i] = 7;}} }//打印每月表頭 void PrintWeek(int i) {printf( "\n %s\n" , MonName[i - 1]);printf( "------------------------------------ \n ");printf( " SUN MON TUE WED THU FRI SET ");printf( "\n ------------------------------------\n" );} //輸出日期 void Print(int mon,int i) {int x = 0;//控制空格數,對其使用if (mon != 7){for (int i = 0; i < mon * 5; i++){putchar(' ');}}for (int j = 0; j < MonNum[i - 1]; ++j){printf("%5d", j + 1);mon++;++x;if (x == 7||mon==7){putchar('\n');x = 0;}}putchar('\n'); } void DisPlay(Calendar* time) {GetEveryMonthWeek(time);printf("\n\n 公元%d年年歷如下:\n\n", time->year);for (int i = 1; i <= 12; i++){PrintWeek(i); switch (time->weak[i-1]){case 1:Print(time->weak[i-1],i);break;case 2:Print(time->weak[i - 1], i);break;case 3:Print(time->weak[i - 1], i);break;case 4:Print(time->weak[i - 1], i);break;case 5:Print(time->weak[i - 1], i);break;case 6:Print(time->weak[i - 1], i);break;case 7:Print(time->weak[i - 1], i);break;default:break;}}}void ShowDate() {int year ;Calendar time;puts("輸入年,范圍為1940~2040");scanf("%d", &year);if (year < 1940 || year>2040){puts("年份錯誤");return;}time.year = year;DisPlay(&time); } //輸出某年某月的月歷 void DisplayMonth(Calendar time, int mon) {GetEveryMonthWeek(&time);printf("\n\n 公元%d年月歷如下:\n\n", time.year);for (int i = 1; i <= 12; i++){if (mon == time.weak[i - 1]){PrintWeek(mon);Print(time.weak[mon - 1], mon);break;}}}void ShowMonth() {int year, mon;puts("輸入年");scanf("%d", &year);puts("輸入月");scanf("%d", &mon);Calendar time;time.year = year;if (year >= 1940 && year <= 2040 && 1 <= mon && mon <= 12){DisplayMonth(time, mon);} } //顯示某年某月某日距離今天還有多少天,某年某月某日星期幾, void Show() {int daySum = 0;time_t now;time(&now);struct tm* time_now;time_now= localtime(&now);int year, mon,day;puts("輸入年");scanf("%d", &year);puts("輸入月");scanf("%d", &mon);puts("輸入日");scanf("%d", &day);//計算天數if (time_now->tm_year+1900 >= year){for (int i = year; i < time_now->tm_year+1900; i++){if (LeapYear(i)){daySum += 366;}else{daySum += 365;}}if (time_now->tm_mon+1 >= mon){for (int i = time_now->tm_mon+1; i !=mon; --i){daySum += MonNum[i];}}else{for (int i = mon; i != time_now->tm_mon+1; --i){daySum += MonNum[i];}}if (time_now->tm_mday >= day){daySum = daySum + time_now->tm_mday - day;}else{daySum = daySum + day - time_now->tm_mday;}printf("距離今天%d天\t", daySum);}else{for (int i = time_now->tm_year + 1900; i < year; i++){if (LeapYear(i)){daySum += 366;}else{daySum += 365;}}if (time_now->tm_mon+1 >= mon){for (int i = time_now->tm_mon+1; i != mon; --i){daySum += MonNum[i];}}else{for (int i = mon; i != time_now->tm_mon+1; --i){daySum += MonNum[i];}}if (time_now->tm_mday >= day){daySum = daySum + time_now->tm_mday - day;}else{daySum = daySum + day - time_now->tm_mday;}printf("距離今天%d天\t ", daySum);}Calendar week;week.year = year;GetEveryMonthWeek(&week);for(int i = 1; i <= 12; i++){if (i == mon){printf(" 星期%d\n", week.weak[i-1]);}} }//操作菜單 void Menu(void) {while (1){system("cls");puts("1:顯示某一年的日歷");puts("2:顯示某一年某月的日歷");puts("3:顯示距離今天還有多少天,星期幾,");puts("4,退出");puts("輸入選擇");int choise;scanf("%d", &choise);switch (choise){case 1:ShowDate();system("Pause");break;case 2:ShowMonth();system("Pause");break;case 3:Show();system("Pause");break;case 4:return;break;}}}int main(void) {Menu();return 0; }int LeapYear(int year) {int leap = 0;if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)leap = 1;return leap; }//求公歷該年的1月1日是星期幾 int week(Calendar* time) {int n = time->year-1;int num = 0; //num為year到公元元年的閏年數for (int i = 1; i < time->year; i++){if (LeapYear(i) == 1)num++;}n = (n + num) % 7 + 1;return n; }下面是在VS2022上面運行的結果:
菜單界面:
功能1:
功能2:
功能3:
總結
以上是生活随笔為你收集整理的C语言实现系统日历查询系统的全部內容,希望文章能夠幫你解決所遇到的問題。