C语言万年历程序设计源程序

#include
void shileapyear();//判断是否为闰年的函数
void CaculateWeekDay();//判断是星期几的函数
void Calendarmonth();//打印某年某月日历的函数
void Calendaryear();//打印某年日历的函数
int leapyear(int year);//判断闰年
int caculateWeekDay(int year,int month,int day);//判断某年某日星期几
void Calendar(int year,int month);//打印某年某月日历


int main()//菜单主界面
{
int choice,i;//choice为选择代号
for(i=1;i<=4;i++){
printf("1 -This year is leap year or not\n");
printf("2 -This day is which day of the week\n");
printf("3 -The Calendar of this year\n");
printf("4 -The Calendar of this month of year\n");
printf("0 -Exit\n");


printf("Please select the options:");//提示用户输入选项
scanf("%d",&choice);

if(choice==0)//为0直接退出程序
break;
switch(choice){
case 1:shileapyear();//是闰年吗?
break;
case 2:CaculateWeekDay();//星期日历
        break;
case 3:Calendaryear();//年日历
    break;
case 4:Calendarmonth();//月日历
    break;



}
break;//使得该程序判断只能进行一次
}
return 0;
}
void shileapyear()//判断是否为闰年的函数
{
int year,leap;
printf("Please input the year:");//提示用户输入年份
scanf("%d",&year);
leap=leapyear(year);//调用函数


if(leap==0)//是闰年则获得返回值0
printf("The year %d is leap year\n",year);
else //不是闰年则获得返回值1
printf("The year %d isn't leap year\n",year);


}
void CaculateWeekDay()//判断是星期几的函数
{
int year,month,day,iWeek;
printf("Please input the date:");//提示用户输入年月日
scanf("%d-%d-%d",&year,&month,&day);
if(month>12||day>31)
printf("This date is worng\n");
else iWeek=caculateWeekDay(year,month,day);//调用函数
    switch(iWeek)//iWeek获得返回值
    {
    case 0: printf("This day %d-%02d-%02d is Monday\n",year,month,day); break;
    case 1: printf("This day %d-%02d-%02d is Tuesday\n",year,month,day); break;
    case 2: printf("This day %d-%02d-%02d is Wednesday\n",year,month,day); break;
    case 3: printf("This day %d-%02d-%02d is Thursday\n",year,month,day); break;
    case 4: printf("This day %d-%02d-%02d is Friday\n",year,month,day); break;
    case 5: printf("This day %d-%02d-%02d is Satday\n",year,month,day); break;
    case 6: printf("This day %d-%02d-%02d is Sunday\n",year,month,day); break;
    }
}
void Calendaryear()//打印某年日历的函数
{
int year,month;
printf("Please input the date:");//提示用户输入年份
scanf("%d",&year);
for(month=1;month<=12;month++){//定义month为1,再进行循环,共打印出12个月份
Calendar(year,month);//调用函数
}
}









void Calendarmonth()//打印某年某月的日历的函数
{
int year,month;
printf("Please input the date:");//提示用户输入年月
scanf("%d-%d",&year,&month);
if(month>12)
printf("This month is worng\n");
else Calendar(year,month);//调用函数,打印输入月份的日历

}






int leapyear(int year)//判断传来的year是否为闰年//
{
if((year%4==0)&&(year%100!=0)||(year%400==0)){
return 0;//是闰年返回值0
}else return 1;//不是闰年返回值1
}








int caculateWeekDay(int year,int month,int day)//判断传来的年月日是星期几//
{
int iWeek;//基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7
if(month==1||month==2) {//1月和2月看作上一年13月和14月
        month+=12;
        year--;
    }
    return iWeek=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
}








void Calendar(int year,int month)//打印某年月日历
{
int leap,first,h,sum;
int tab[2][13]={
{0,31,29,31,30,31,30,31,31,30,31,30,31},//闰年时的每月天数
{0,31,28,31,30,31,30,31,31,30,31,30,31}//平年时每月天数
};

printf("Calendar                %d\n",year);
if(month==1)//将阿拉伯数字转换成英文输出
printf("                     January");
else if(month==2)
printf("                    February");
else if(month==3)
printf("                       March");
else if(month==4)
printf("                       April");
else if(month==5)
printf("                         May");
else if(month==6)
printf("                        June");
else if(month==7)
printf("                        July");
else if(month==8)
printf("                      August");
else if(month==9)
printf("                   September");
else if(month==10)
printf("                     October");
else if(month==11)
printf("                    November");
else
printf("                    December");



printf("\n            -%02d-                   \n",month);//输出2位,不足以0补齐
printf(" SUN MON TUE WED THU FRI SAT\n");//日 一 二 三 四 五 六 七
leap=leapyear(year);//调用函数
sum=tab[leap][month];//某年某月总天数
first=caculateWeekDay(year,month,1);//调用函数判断某年某月1号为星期几
if(first<=5){//因为first获得CaculateWeekDay函数的返回值,5表示星期六,当大于5表示星期日时无需空格补足
for (h=0;h printf("    ");
}

int i=1;//从1号开始
first+=1;//让first与星期数对应,方便下面运行


while(i<=sum){//从1号月初输出至月末
printf("%4d",i);
first=(first+1)%7;//换行  
            if(first%7==0)  
                printf("\n");
i++;
}
printf("\n");
printf("****************************\n");

}

C语言万年历程序设计源程序_第1张图片

C语言万年历程序设计源程序_第2张图片

C语言万年历程序设计源程序_第3张图片

你可能感兴趣的:(C语言万年历程序设计源程序)