📄 datetimes.c
字号:
#include <stdio.h>
#define N 20 /*能查看的总年数*/
#define Monday 1
#define Sunday 7
int ymFirstd[N][12]; /*每年每个月的第一天是星期几*/
int thisyear=2003; /*从2003年开始*/
char hint[1*32*2];
/*---创建日历表---*/
void InitDateList()
{
int i,month,daynumber; /*daynumber记录本月的天数*/
int week=Sunday; /*用上一年最后一个月第一天的星期数进行初始化*/
for(i=0;i<N;i++)
for(month=1;month<=12;month++){
if(month<=8){ /*前八个月*/
if(month==1) daynumber=31;
else if(month==3){
if(!(thisyear%4)) daynumber=29; /*闰年*/
else daynumber=28;
} /*-else if-*/
else{
if(month%2) daynumber=30; /*5,7月*/
else daynumber=31; /*2,4,6,8月*/
} /*--else--*/
} /*--if--*/
else{ /*九月以后*/
if(month%2) daynumber=31; /*9,11月*/
else daynumber=30; /*10,12月*/
} /*--else--*/
week+=daynumber%7; /*每月第一天是星期几*/
if(week>Sunday) week-=7;
ymFirstd[ i][month-1]=week;
} /*--for(month...)--*/
}
/*---查找并输出日历---*/
void SearchDate()
{
int week,searchyear,searchmonth,day=1;
clrscr();
printf("\n输入年份(%d-%d): ",thisyear,thisyear+N-1);
scanf("%d",&searchyear);
while(searchyear<thisyear||searchyear>thisyear+N-1){
printf("输入的年份超出范围,请重新输入\n");
printf("\n输入年份(%d-%d): ",thisyear,thisyear+N-1);
scanf("%d",&searchyear);
} /*-while-*/
printf("\n输入月份: ");
scanf("%d",&searchmonth);
while(searchmonth<1||searchmonth>12){
printf("笨蛋,有这个月份吗,重输呀\n");
printf("\n输入月份: ");
scanf("%d",&searchmonth);
} /*-while-*/
clrscr();
printf("%d年%d月\n",searchyear,searchmonth);
printf("\n Mon Tue Wed Thu Fri Sat Sun\n");
week=ymFirstd[searchyear-thisyear][searchmonth-1];
gotoxy((week-1)*7+1,5);
for(;week<=Sunday;week++){
printf(" %-3d",day++);
if(!(week%Sunday)){ /*每打印一周就换行*/
week=Monday-1;
printf("\n\n");
} /*-if-*/
if(searchmonth<=7){ /*查询的月份在前七个月里*/
if(searchmonth%2&&day==32) break; /*1,3,5,7月打印结束*/
if(searchmonth==2){
if(!(searchyear%4)&&day==30) break; /*闰年二月打印结束*/
if(searchyear%4&&day==29) break; /*非闰年二月打印结束*/
} /*if*/
else if(!(searchmonth%2)&&day==31) break; /*4,6月打印结束*/
} /*-if-*/
else{
if(searchmonth%2&&day==31) break; /*9,11月打印结束*/
if(!(searchmonth%2)&&day==32) break; /*8,10,12月打印结束*/
} /*-else-*/
} /*--for--*/
getch();
clrscr();
puttext(1,1,32,1,hint);
}
/*---主函数---*/
void main()
{
InitDateList();
clrscr();
printf("按Esc键退出程序,按任意键进行查询");
gettext(1,1,32,1,hint);
while(1)
switch(getch()){
case 27: exit(0); /*按Esc键退出*/
default: SearchDate();
} /*-switch-*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -