
只要輸入 西元年分 、 月份 ,就可以輸出月曆喔~~
輸入「P」查閱上個月,輸入「N」查閱下個月
想要把這個程式帶回家玩的,請[按這裡]
製作程式緣起:
主要...又是因為大學申請.............
我把上一個成績計算機的程式,交給學長看了之後
他說...你還太嫩了!
所以,我馬上決定寫個像樣的東西
又因為聽說很多人,至少都會寫個萬年曆
所以我就決定也寫個萬年曆
誰知道,說得容易,做難啊!
我一開始只會排一個畫面出來而已
根本沒有「引擎」,沒有計算萬年曆的公式
於是,我就觀察了「我家的萬年桌曆」.......
發現到每個月份都是有規律的
才得到靈感,完成這個程式
用這種觀察規律寫出來,其實算是偷吃步
公式就沒有很複雜
(我的數學很爛...要我寫出複雜的公式也不太可能..)
但是就是因為這樣的偷吃步
我的程式比學長的還要小........
另外
由於日光節約時間的關係
1900年之前的日子不能用這個程式算
因為我也不知道1900年之前到底是怎麼一回事...........
程式碼,有興趣的再看
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int a=0,b,c,d,s=1,m,g,extra,p;
//輸入年份和月份
printf("Year:");
scanf("%d",&d);
start: //月份大於12就會跳來這裡
printf("Month:");
scanf("%d",&m);
//開始判斷月份是否大於12
if(m>=13)
goto start;
s=d%4;
clrscr();
hello:
//顯示月份
printf("\n A.D.%d ",d);
if(m==1)
//判斷這年是否為閏年,如果是閏年,起始日期減一天
if(s==0)
b=6,c=31,printf("January");
else
b=7,c=31,printf("January");
else if(m==2)
//判斷這年是否為閏年,如果是閏年,起始日期減一天,並把日數改成29
if(s==0)
b=2,c=29,printf("February");
else
c=28,b=3,printf("February");
else if(m==3)
b=3,c=31,printf("March");
else if(m==4)
b=6,c=30,printf("April");
else if(m==5)
b=1,c=31,printf("May");
else if(m==6)
b=4,c=30,printf("Jane");
else if(m==7)
b=6,c=31,printf("July");
else if(m==8)
b=3,c=31,printf("August");
else if(m==9)
b=5,c=30,printf("September");
else if(m==10)
b=0,c=31,printf("October");
else if(m==11)
b=3,c=30,printf("November");
else if(m==12)
b=5,c=31,printf("December");
//處理輸入的年份,把要用的代數準備好
extra=d-1;
g=d/4;
b+=g;
b+=extra;
//取星期餘數,把起始日之前多餘的 7的倍數天去掉
if(b>=7)
{
b=b%7;
}
//程式要把日期排出來了!
printf("\n\nSun Mon Tue Wed Thu Fri Sat\n");
for(a=0;a<=b-1;a++)
{
printf(" ");
}
for(a=1;a<=c;a++)
{
if(a<=9)
printf(" %d ",a);
else
printf(" %d ",a);
b=b+1;
if(b>=7)
{
printf("\n");
b=0;
}
}
printf("\n\nEnter P for Previous Month.\n\nEnter N for Next Month.");
scanf("%s",&p);
if(p=='p')
m=m-1;
if(p=='n')
m=m+1;
if(m==0)
d=d-1,m=12;
if(m==13)
d=d+1,m=1;
clrscr();
goto hello;
printf("\n\nThank you for using!! \n\nComposed by Meng-Luen Wu"),getch();
}