📄 calendar.cpp
字号:
#include"stdio.h"
#include"math.h"
void main()
{
int year,month,date;
int f(int year); //声明判断闰年函数
int weekday(int year, int month, int date); //声明计算星期几的函数
int g(int year,int month,int date);//声明求C:从元旦开始到这一天的天数的函数
void print(int year); //声明打印日历的函数
int sel;
char ch;
loop0:
{
printf("(1) 查询某年某月某日是星期几\n");
printf("(2) 查询某年是否是闰年\n");
printf("(3) 打印某年的全年日历\n");
printf("(4) 退出\n");
}
scanf("%d",&sel);
if(sel==1)
{
loop1:
printf("请输入年月日(XXXX,XX,XX)\n");
scanf("%d,%d,%d",&year,&month,&date);
while(month==2 && ((f(year)==1 && date>29)||(f(year)==0 && date>28)))//对二月有无超过最大天数的判断
{
printf("输入错误,请重新输入!\n");
goto loop1;
}
while((month==1||month==3||month==5||month==7||month==8||month==10||month==12) && date>31)
{
printf("输入错误,请重新输入!\n"); //对其他月份有无超过最大天数的判断
goto loop1;
}
while((month==2||month==4||month==6||month==9||month==11) && date>30)
{
printf("输入错误,请重新输入!\n"); //对其他月份有无超过最大天数的判断
goto loop1;
}
weekday(year,month,date); //调用计算星期几的函数
printf("\n");
getchar();
scanf("%c",&ch);
printf("\n");
if(ch=='Y')
goto
loop1;
else
goto
loop0;
}
else if(sel==2)
{
loop2:
int x;
printf("请输入要查哪一年?(XXXX)\n");
scanf("%d",&year);
x=f(year); //调用是否为闰年的函数
if(x) printf("%d年是闰年,是否继续查询(Y/N)?\n",year);
else printf("%d年是平年,是否继续查询(Y/N)?\n",year);
getchar();
scanf("%c",&ch);
printf("\n");
if(ch=='Y')
goto
loop2;
else
goto loop0;
}
else if(sel==3)
{
loop3:
printf("请输入要打印的年份(XXXX)\n");
print(year);//调用日历打印函数
printf("\n");
printf("是否继续打印(Y/N)?\n");
getchar();
scanf("%c",&ch);
printf("\n");
if(ch=='Y')
goto
loop3;
else
goto loop0;
}
else
{
printf("是否要真的退出(Y/N)?\n");
getchar();
scanf("%c",&ch);
if(ch=='Y')return;
else
goto
loop0;
}
}
/***************************************************************************************************/
int f(int year) //闰年的判断的函数
{ int i;
if (year%4==0&&year%100!=0||year%400==0) i=1;
else i=0;
return i;
}
/***************************************************************************************************/
int g(int year,int month,int date) //求C:从元旦开始到这一天的天数的函数
{
int C;
int j;
int sum;
C=0;
sum=0;
int m1[12]={31,0,31,30,31,30,31,31,30,31,30,31};
if(f(year)) m1[1]=29; //调用闰年的判断函数
else m1[1]=28;
for(j=0;j<month-1;j++)
{
sum=sum+m1[j];
}C=sum+date;
return(C);
}
/*****************************************************************************************************/
int weekday(int year, int month, int date) //计算星期几的函数
{
int C;
int day;
int X=year;
C=g(year,month,date);
//调用求C:从元旦开始到这一天的天数的函数
day=(X-1+(X-1)/4-(X-1)/100+(X-1)/400+C)%7;
if(day==0) printf("%d年%d月%d日是星期天,是否继续查询(Y/N)?\n",year,month,date);
else if (day==1)printf("%d年%d月%d日是星期一,是否继续查询(Y/N)?\n",year,month,date);
else if (day==2)printf("%d年%d月%d日是星期二,是否继续查询(Y/N)?\n",year,month,date);
else if (day==3)printf("%d年%d月%d日是星期三,是否继续查询(Y/N)?\n",year,month,date);
else if (day==4)printf("%d年%d月%d日是星期四,是否继续查询(Y/N)?\n",year,month,date);
else if (day==5)printf("%d年%d月%d日是星期五,是否继续查询(Y/N)?\n",year,month,date);
else if (day==6)printf("%d年%d月%d日是星期六,是否继续查询(Y/N)?\n",year,month,date);
return(day);
}
/****************************************************************************************************/
void print(int year) //年日历打印函数
{
int day,month;
int month_firstday; //每个月的第一天
int i,j,k,m1[12]={31,0,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&year);
if(f(year)) m1[1]=29; //调用闰年的判断函数
else m1[1]=28;
day=weekday(year,1,1); //调用计算星期几的函数,计算某年一月一号是星期几
printf("%d\n",year);
month=1; //赋予初值
month_firstday=day+1;
for(i=1;i<13;i++)
{
printf("%d\n",month++);
printf("\t\n");
printf("\t0\t1\t2\t3\t4\t5\t6\n"); //"\t"是水平制表
printf("\tS\tM\tT\tW\tT\tF\tS\n");
for(j=1;j<=month_firstday;j++)
printf("\t");
for(k=1;k<=m1[i-1];k++) //打印每个月的每一天
{
printf("%d\t",k);
month_firstday++;
if(month_firstday>7)
{
month_firstday=1;
printf("\n");printf("\t");
}
}
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -