?? 萬年歷.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 + -