日历日历日历
原版始于2012.1.10 #include "stdio.h" #include "conio.h" #include "time.h" #include "stdlib.h" void diao(int year,int month);//第一个被调用函数,仅仅是获得space; int leap(int year);//是闰年加1 int jjmonth(int year,int month);//计算n月的总天数 void shuchu(int space,int year,int month);//输出 int get_leap(int year);//推断是否为闰年 int month_of_day(int year, int month);//这月有几天啊 int main() { int year,month; int kongzhi; struct tm*p;//tm结构指针 time_t secs;//声明time_t类型变量 time (&secs);//获取系统日期与时间 p=localtime(&secs);//获取当地日期时间 printf("\n now:%d-%d-%d %d:%d:%d 星期%d \n\n", p->tm_mon+1,p->tm_mday,p->tm_year+1900,p->tm_hour,p->tm_min,p->tm_sec,p->tm_wday); year=p->tm_year+1900; month=p->tm_mon+1; diao(year,month); while(1) { kongzhi=getch();//用getch就不用按enter了 if(kongzhi=='w')year=year+1; if(kongzhi=='s')year=year-1; if(kongzhi=='d') { month=month+1; if(month>12) { year=year+1; month=1; } } if(kongzhi=='a') { month=month-1; if(month<1) { year=year-1; month=12; } } if(kongzhi=='c')break; system("cls"); //清屏清屏清屏 printf("\n 如今是:%d-%d-%d %d:%d:%d \n\n", p->tm_mon+1,p->tm_mday,p->tm_year+1900,p->tm_hour,p->tm_min,p->tm_sec); diao(year,month); } system("cls"); printf("\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用"); _sleep(10000);//延迟函数 return 0; } void diao(int year,int month) { int tian,space;//这个月之前的天数 tian=(year-1600)*365+leap(year); tian=tian+jjmonth(year,month)-1; space=tian%7;//得到空格数 shuchu(space,year,month); } int leap(int year) {int yan,i=0;//1600到本年的闰年数 for(yan=1600;yan<year;yan+=4) { if( (yan%4==0) && (yan%100 != 0) || (yan%400 == 0))i++; } return i; } int jjmonth(int year,int month) {//本年已经过去天数 if( (year%4==0) && (year%100 != 0) || (year%400 == 0)) { switch(month-1) { case 0:return 0; case 1:return 31; case 2:return 60; case 3:return 91; case 4:return 121; case 5:return 152; case 6:return 182; case 7:return 213; case 8:return 244; case 9:return 274; case 10:return 305; case 11:return 335; } } else { switch(month-1) { case 0:return 0; case 1:return 31; case 2:return 59; case 3:return 90; case 4:return 120; case 5:return 151; case 6:return 181; case 7:return 212; case 8:return 243; case 9:return 273; case 10:return 304; case 11:return 334; } } } void shuchu(int space,int year,int month) { int i; printf(" %d年%d月 \n\n\n",year,month); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n"); printf("-------------------------------------------------------\n"); for(i=0;i<space;i++) printf(" ");//先输出空格数 for(i=1;i<month_of_day(year,month)+1;i++){//本月有多少天 printf("%7d",i); if((space+i)%7==0)printf("\n"); } printf("\n"); printf("-------------------------------------------------------\n\n"); printf("加年w 减年s 加月d 减月a 退出按 c \n\n\n"); } int month_of_day(int year , int month) { //本月有多少天 switch(month) {case 2: return leap(year)?29:28;//这里起到了简化作用 case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11:return 30; } } /*int get_leap(int year) {//若本年是闰年,二月加1 if( (year%4==0) && (year%100 != 0) || (year%400 == 0)) return 1; return 0; }*/ ////////////////////////////---------------------------------/ #include "stdio.h" #include "conio.h" #include "time.h" #include "stdlib.h" void diao(int year,int month);//第一个被调用函数,仅仅是获得space; int leap(int year);//是闰年加1 int jjmonth(int year,int month);//计算n月的总天数 void shuchu(int space,int year,int month);//输出 int get_leap(int year);//推断是否为闰年 int month_of_day(int year, int month);//这月有几天啊 int main() { int year,month; int kongzhi; struct tm*p;//tm结构指针 time_t secs;//声明time_t类型变量 time (&secs);//获取系统日期与时间 p=localtime(&secs);//获取当地日期时间 printf("\n now:%d-%d-%d %d:%d:%d 星期%d \n\n", p->tm_mon+1,p->tm_mday,p->tm_year+1900,p->tm_hour,p->tm_min,p->tm_sec,p->tm_wday); year=p->tm_year+1900; month=p->tm_mon+1; diao(year,month); while(1) { kongzhi=getch();//用getch就不用按enter了 if(kongzhi=='w')year=year+1; if(kongzhi=='s')year=year-1; if(kongzhi=='d') { month=month+1; if(month>12) { year=year+1; month=1; } } if(kongzhi=='a') { month=month-1; if(month<1) { year=year-1; month=12; } } if(kongzhi=='c')break; system("cls"); //清屏清屏清屏 printf("\n 如今是:%d-%d-%d %d:%d:%d \n\n", p->tm_mon+1,p->tm_mday,p->tm_year+1900,p->tm_hour,p->tm_min,p->tm_sec); diao(year,month); } system("cls"); printf("\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用"); _sleep(10000);//延迟函数 return 0; } void diao(int year,int month) { int tian,space;//这个月之前的天数 tian=(year-1600)*365+leap(year); tian=tian+jjmonth(year,month)-1; space=tian%7;//得到空格数 shuchu(space,year,month); } int leap(int year) {int yan,i=0;//1600到本年的闰年数 for(yan=1600;yan<year;yan+=4) { if( (yan%4==0) && (yan%100 != 0) || (yan%400 == 0))i++; } return i; } int jjmonth(int year,int month) {//本年已经过去天数 int y=0; //起到简化作用 if( (year%4==0) && (year%100 != 0) || (year%400 == 0))y=1; switch(month-1) { case 0:return 0; case 1:return 31; case 2:return 59+y; case 3:return 90+y; case 4:return 120+y; case 5:return 151+y; case 6:return 181+y; case 7:return 212+y; case 8:return 243+y; case 9:return 273+y; case 10:return 304+y; case 11:return 334+y; } } void shuchu(int space,int year,int month) { int i; printf(" %d年%d月 \n\n\n",year,month); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n"); printf("-------------------------------------------------------\n"); for(i=0;i<space;i++) printf(" ");//先输出空格数 for(i=1;i<month_of_day(year,month)+1;i++){//本月有多少天 printf("%7d",i); if((space+i)%7==0)printf("\n"); } printf("\n"); printf("-------------------------------------------------------\n\n"); printf("加年w 减年s 加月d 减月a 退出按 c \n\n\n"); } int month_of_day(int year , int month) { //本月有多少天 switch(month) {case 2: return get_leap(year)?29:28; case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11:return 30; } } int get_leap(int year) {//若本年是闰年,二月加1 if( (year%4==0) && (year%100 != 0) || (year%400 == 0)) return 1; return 0; }