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语言实现系统日历查询系统的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: HTML图片
- 下一篇: windows下更改应用程序属性的详细信