C语言实现万年历
更新时间:2020年4月25日 17:24 点击:2533
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语言实现单词小助手功能完善版
下一篇: C语言实现窗口抖动
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
- 很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
- 本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。...2020-04-25
C语言正则表达式详解 regcomp() regexec() regfree()用法详解
C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),这里就为大家介绍一下,需要的朋友可以参考一下啊...2020-04-25- 这篇文章主要介绍了c语言实现找最大值最小值位置查找,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-04