📄 1.c
字号:
//自己看,说的比较详细了.
#include<stdio.h>
#include<stdlib.h>
int isLeap(int year); //判断闰年
int maxDay(int year,int month); //判断某年某月最多天数
int eachYearTotal(int year,int month,int day); //判断这一天是该年的第几天
int week(int year,int month,int day); //判断某年某月某日的编号(0-6)
char *chineseWeek(int number); //将编号转化为星期(日-六)
void output(int year,int month,int day); //输出该天星期几
void display(int year,int month); //显示月历
int check(int year,int month,int day); //检查有效性
void display1(int year); //输出年历
void display2(int year,int month); //输出月历
void display3(int year,int month,int day); //输出日历
void getMenu(); //调菜单
void main()
{
int year,month,day,flag,select; //flag判断输入是否有效
while(1)
{
getMenu();
printf("请输入你的选择: ");
fflush(stdin); //清空输入缓冲区
scanf("%d",&select);
fflush(stdin);
switch(select)
{
case 1:
do //do_while检错处理
{
printf("请输入年: ");
scanf("%d",&year);
flag=check(year,1,1);
if(flag==0)
{
printf("输入无效\n");
}
}while(flag==0);
display1(year); //输出年历
break;
case 2:
do
{
printf("请输入年月: ");
scanf("%d%d",&year,&month);
flag=check(year,month,1);
if(flag==0)
{
printf("输入无效\n");
}
}while(flag==0);
display2(year,month); //输出月历
break;
case 3:
do
{
printf("请输入年月日: ");
scanf("%d%d%d",&year,&month,&day);
flag=check(year,month,day);
if(flag==0)
{
printf("输入无效\n");
}
}while(flag==0);
display3(year,month,day); //输出日历
break;
case 4:
exit(0);
default:
printf("输入有误!\n\n");
}
}
}
int isLeap(int year) //判断闰年
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
int maxDay(int year,int month) //判断某年某月最多天数
{
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeap(year))
a[1]=29;
return a[month-1];
}
int eachYearTotal(int year,int month,int day) //判断这一天是该年的第几天
{
int i,sum=0;
for(i=1;i<month;i++)
{
sum+=maxDay(year,i);
}
sum+=day;
return sum;
}
int week(int year,int month,int day) //判断某年某月某日的编号(0-6)
{
int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,day);
number%=7;
return number;
}
char *chineseWeek(int number) //将编号转化为星期(日-六)
{
switch(number)
{
case 0:
return "星期日";
case 1:
return "星期一";
case 2:
return "星期二";
case 3:
return "星期三";
case 4:
return "星期四";
case 5:
return "星期五";
case 6:
return "星期六";
default:
return "error";
}
}
void output(int year,int month,int day) //输出该天星期几
{
int number=week(year,month,day);
printf(" 公元%d年%d月%d日%10s\n\n",year,month,day,chineseWeek(number));
}
void display(int year,int month) //显示日历
{
int max,number,i,j=1;
max=maxDay(year,month);
number=week(year,month,1); //该年该月的1号为星期几作为起始位
printf("%4s%4s%4s%4s%4s%4s%4s\n","日","一","二","三","四","五","六");
for(i=0;i<number;i++) //找起始位
{
printf(" ");
}
while(j<=max)
{
printf("%4d",j);
if(i%7==6) //周六换行
{
printf("\n");
}
i++;
j++;
}
printf("\n\n");
}
int check(int year,int month,int day) //检查有效性
{
if(year<0||month<1||month>12||day<1||day>maxDay(year,month))
return 0;
else
return 1;
}
void display1(int year) //输出年历
{
int i;
printf("\n");
for(i=1;i<=12;i++)
{
printf(" 公元%d年%d月\n\n",year,i);
display(year,i);
}
}
void display2(int year,int month) //输出月历
{
printf("\n 公元%d年%d月\n\n",year,month);
display(year,month);
}
void display3(int year,int month,int day) //输出日历
{
printf("\n");
output(year,month,day); //显示星期几
display(year,month);
}
void getMenu() //调菜单
{
printf("1.年历\t2.月历\t3.日历\t4.退出\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -