📄 万年历.cpp
字号:
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
void Output_Menu(); /*输出菜单*/
void Output_Calendarofyear(); /*输出输入年份的日历*/
void Output_Calendarofmonth(); /*输出输入月份的日历*/
void Leapyear_Judgement(); /*判断输入年份是不是闰年*/
void Getweek_Ofdate(); /*计算输入某年某月中某一日是星期几*/
int Getdayamount_Ofyear(int); /*计算输入年份的天数*/
int Getdayamount_Ofmonth(int,int) ; /*计算输入年份是月份的天数*/
void Getdaysamount_Ofmonth(); /*输出输入年份是月份的天数*/
int Getweek_Firstdayofyear(int); /*计算每年第一天是星期几*/
int Getweek_Firstdayofmonth(int,int); /*计算每月第一天是星期几*/
int Week(int,int,int); /*求出星期对应的数字如(4对应星期四)*/
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void main()
{
char menu;
do
{
system("cls");
Output_Menu();
scanf("%s",&menu);
switch(menu)
{
case '1': Getweek_Ofdate(); break;
case '2': Leapyear_Judgement(); break;
case '3': Output_Calendarofyear(); break;
case '4': Getdaysamount_Ofmonth();break;
case '5': Output_Calendarofmonth();break;
case '6': break;
default:printf("输入错误,按任何键返回.\n");getch();break;
}
} while(menu!=6);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Output_Menu()/*输出主菜单*/
{
printf("1:----------我想知道某一天是星期几\n");
printf("\n");
printf("2:----------我想知道某年是不是闰年\n");
printf("\n");
printf("3:----------我想浏览一下某年的日历\n");
printf("\n");
printf("4:----------我想知道某个月有多少天\n");
printf("\n");
printf("5:----------我想浏览一下某月的日历\n");
printf("\n");
printf("6:----------我不想做其中的任何操作\n");
printf("\n");
printf("请选择你想做的操作:");
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Output_Calendarofyear()/*输出某一年十二个月的日历*/
{
int month=0,i,j,year;
char continueflag;
do
{
printf("请输入年份(xxxx)=>");
scanf("%d",&year);
int w=Getweek_Firstdayofmonth(year,month);
char *p[7]={" Sun"," Mon"," Tue"," Wed"," Thu"," Fri"," Sat"};
for(month=1;month<=12;month++)
{
printf("\n*************** %d ****************\n\n",month);
for(i=0;i<7;i++) printf("%s",*(p+i));
printf("\n");
for(i=0;i<w;i++) printf(" "); /*输出空格*/
for(j=1;j<=Getdayamount_Ofmonth(year,month);j++)
{
printf("%5d",j); /*输出每天的日期*/
w++;
w=w%7;
if(w==0&&j<=Getdayamount_Ofmonth(year,month)) printf("\n");
}
}
printf("\n是否继续<Y继续,其它键返回>");
continueflag=getch();
printf("%c\n",continueflag);
} while (continueflag=='y' || continueflag=='Y');
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Output_Calendarofmonth() /*输出某一年中某月的日历*/
{
int month,year,i,j;
char continueflag;
do
{
printf("请输入年份(xxxx)=>");
scanf("%d",&year);
printf("请输入月份(xx)=>");
scanf("%d",&month);
int w=Getweek_Firstdayofmonth(year,month);
char *p[7]={" Sun"," Mon"," Tue"," Wed"," Thu"," Fri"," Sat"};
printf("\n*************** %d ****************\n\n",month);
for(i=0;i<7;i++) printf("%s",*(p+i));
printf("\n");
for(i=0;i<w;i++) printf(" "); /*输出空格*/
for(j=1;j<=Getdayamount_Ofmonth(year,month);j++)
{
printf("%5d",j); /*输出每一天的日期*/
w++;
w=w%7;
if(w==0&&j<=Getdayamount_Ofmonth(year,month)) printf("\n");
}
printf("\n是否继续<Y继续,其它键返回>");
continueflag=getch();
printf("%c\n",continueflag);
} while (continueflag=='y' || continueflag=='Y');
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Leapyear_Judgement()/*判断输入年份是不是闰年*/
{
int year;
char continueflag;
do
{
printf("请输入年份(xxxx)=>");
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0)
printf("你输入的年份就是闰年!!!");
else
printf("你输入的年份不是闰年!!!");
printf("\n是否继续<Y继续,其它键返回>");
continueflag=getch();
printf("%c\n",continueflag);
} while (continueflag=='y' || continueflag=='Y');
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Getweek_Ofdate()/*求某年某月某日是星期几*/
{
int year,month,date,weekday;
char continueflag;
char *weekdaystr;
do
{
printf("请输入年份(xxxx)=>");
scanf("%d",&year);
printf("请输入月份(xx)=>");
scanf("%d",&month);
printf("请输入日期(xx)=>");
scanf("%d",&date);
weekday=Week(year,month,date);
switch(weekday)
{
case 0: weekdaystr="日"; break;
case 1: weekdaystr="一"; break;
case 2: weekdaystr="二"; break;
case 3: weekdaystr="三"; break;
case 4: weekdaystr="四"; break;
case 5: weekdaystr="五"; break;
case 6: weekdaystr="六"; break;
}
printf("%d年%d月%d日是星期%s,是否继续<Y继续,其它键返回>",year,month,date,weekdaystr);
continueflag=getch();
printf("%c\n",continueflag);
}while(continueflag=='y' || continueflag=='Y');
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int Getdayamount_Ofyear(int year)/*计算输入年份的天数*/
{
int days;
if(year%4==0&&year%100!=0||year%400==0) days=366;
else days=365;
return days;
}
int Getdayamount_Ofmonth(int year,int month)/*计算每月的天数*/
{
int monthdays;
switch(month)
{
case 2:monthdays=(Getdayamount_Ofyear(year)==366)? 29:28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:monthdays=31;
break;
case 4:
case 6:
case 9:
case 11:monthdays=30;
break;
}
return monthdays;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Getdaysamount_Ofmonth()/*计算每月的天数*/
{
int monthdays,year,month;
char continueflag;
do
{
printf("请输入年份(xxxx)=>");
scanf("%d",&year);
printf("请输入月份(xx)=>");
scanf("%d",&month);
switch(month)
{
case 2:monthdays=(Getdayamount_Ofyear(year)==366)? 29:28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:monthdays=31;
break;
case 4:
case 6:
case 9:
case 11:monthdays=30;
break;
}
printf("%d",monthdays);
printf("\n是否继续<Y继续,其它键返回>");
continueflag=getch();
printf("%c\n",continueflag);
}while(continueflag=='y' || continueflag=='Y');
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int Getweek_Firstdayofyear(int year)/*计算每年第一天星期几*/
{
int sum=0,firstday,i;
if(year>=2000)
{
for(i=2000;i<year;i++) sum=Getdayamount_Ofyear(i)+sum;
firstday=(sum+6)%7;
}
else
{
for(i=year;i<2000;i++) sum=Getdayamount_Ofyear(i)+sum;
firstday=(6-sum%7)%7;
}
return firstday;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int Getweek_Firstdayofmonth(int year,int month)/*计算每月第一天是星期几*/
{
int month_day,sum=0,i;
for(i=1;i<month;i++)
{
sum=sum+Getdayamount_Ofmonth(year,i);
}
month_day=(Getweek_Firstdayofyear(year)+sum)%7;
return month_day;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int Week(int year,int month,int date)/*应用基姆拉尔森计算公式求星期*/
{
if((month==1)||(month==2))
{
month+=12;
year--;
}
return int((date+2*month+3*(month+1)/5+year+year/4-year/100+year/400)+1)%7;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -