万年历"/>
C语言万年历
完整代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
//非标准库控制台I/O
//平年月份表
const int mons[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31}
;
//闰年月份表
const int mons2[13]={
0,31,29,31,30,31,30,31,31,30,31,30,31}
;
//中文星期列表
char *wd[]=
{"周日","周一","周二","周三","周四","周五","周六","unknown"
}
;
//系统当前日期时间
int *nowdatetime()
{char str1[200];char years[10];int *ym=(int*)malloc(2*sizeof(int));time_t dtime;time(&dtime);struct tm *tt;tt=localtime(&dtime);strftime(str1,200,"\n公元%Y年%m月%d日%H时%M分%S秒\n第%W周 第%j天\n",tt);printf(str1);printf("%s",wd[tt->tm_wday]);strftime(years,10,"%Y",tt);*(ym+1)=tt->tm_mon+1;*(ym+0)=atoi(years);return ym;
}
//获得星期几索引
int wday(int year,int mon,int mday)
{struct tm Timestr;Timestr.tm_year=year-1900;Timestr.tm_mon=mon-1;Timestr.tm_mday=mday;Timestr.tm_hour=0;Timestr.tm_min=0;Timestr.tm_sec=1;Timestr.tm_isdst=-1;if(mktime(&Timestr)==-1)return 7;return Timestr.tm_wday;
}
//判断是否闰年
int isleapyear(int year)
{int bool=0;if((year%4==0 && year%100!=0) || year%400==0){bool=1;}return bool;
}
//输出月历明细 是2月判断平年还是闰年/判断1号是星期几
int showmon(int year ,int mon)
{int flag=0;//平闰年真假int index;//星期数组索引int mdays=mons[mon];//该月天数int m;//空格个数int k=0;//第一行个数if(mon==2){//判断是否是2月,2月则判断平/闰年flag=isleapyear(year);mdays=mons[mon]+flag;}index=wday(year,mon,1);k=7-index;//获得该月1号是星期几索引printf("\n_________________________________________\n");printf("公元%d年%d月份\n",year,mon);printf("_________________________________________\n");printf(" 周日 周一 周二 周三 周四 周五 周六 \n");printf("_________________________________________\n");int i;for(i=0;i<6*index+3;i++){printf(" ");}printf("1");for(i=2;i<=k;i++){printf("%6d",i);}for(i=k+1;i<=mdays;i++){if((i-k-1)%7==0)printf("\n%4d",i);elseprintf("%6d",i);}printf("\n_________________________________________\n");return 0;
}
int showmenu()
{int n;int year=2022;int mon=6;int day;int wdindex;int *p=NULL;printf("\n***************************************\n");printf("* 万年历 *\n");printf("* ___________________ *\n");printf("* 1–>系统日期时间 *\n");printf("* 2–>年月日查星期 *\n");printf("* 3–>输出整年月历 *\n");printf("* 4–>输出某月月历 *\n");printf("* 5–>判断闰年平年 *\n");printf("* 6–>某月最大天数 *\n");printf("* 7–>跳到今月月历 *\n");printf("* 0–>退出整个程序 *\n");printf("* *\n");printf("***************************************\n");printf("请选择功能:");scanf("%d",&n);switch(n){case 0:return 0;break;case 1:nowdatetime();break;case 2:printf("输入年份:");scanf("%d",&year);printf("输入月份:");scanf(" %d",&mon);printf("输入几日:");scanf(" %d",&day);wdindex=wday(year,mon,day);printf("\n公元%d年%d月%d日是%s\n",year,mon,day,wd[wdindex]);break;case 3:printf("输入年份:");scanf("%d",&year);for(int i=1;i<13;i++)showmon(year ,i);break;case 4:printf("输入年份:");scanf("%d",&year);printf("输入月份:");scanf(" %d",&mon);showmon(year ,mon);break;case 5:printf("输入年份:");scanf(" %d",&year);if(isleapyear(year)){printf("\n公元%d年是闰年\n",year);}else{printf("\n公元%d年平年\n",year);}break;case 6:printf("输入年份:");scanf(" %d",&year);printf("输入月份:");scanf(" %d",&mon);if(mon==2){printf("\n公元%d年%d月,本月一共%d天\n",year,mon,mons[mon]+isleapyear(year));}elseprintf("\n公元%d年%d月,本月一共%d天\n",year,mon,mons[mon]);break;case 7://int *p=NULL;p=nowdatetime();showmon(*p ,*(p+1));free(p);break;default:break;}getchar();return 0;
}
int main(int argc, char** argv)
{while(1){showmenu();getchar();clrscr();}return 0;
}
更多推荐
C语言万年历
发布评论