http://www.hkln.net/
如果不用結構呢
其實應該這個程式也不太需要用到結構 因為資料型態都一樣
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
int m_days(int,int); // 回傳月份有幾天-28
int first_mon(int); // 每年的一月一號是星期幾
int first_day(int,int); // 回傳某個月份的一號是星期幾
main()
{
FILE *fptr ;
fptr = fopen ("C:\\萬年歷.txt","w");
int y , m=1 ; // y 年份, m 月份
int i , j=1 ; // 計數器
int d , e ; // 一個月有days天 第一行個e格
printf("執行完請至 C:\\萬年曆.txt\n") ;
cout << "請輸入年份 " ;
cin >> y ;
do{
i=1,j=1;
fprintf(fptr,"\n\t\t\t\t\t%d年%d月\n",y,m) ;
for(i=0;i<=48;i++)
fprintf(fptr,"_");
fprintf(fptr,"\n");
e = first_day(y,m); // 每個月第一天
d = m_days(y,m)+28; // 每個月有幾天
fprintf(fptr,"\n日\t一\t二\t三\t四\t五\t六\n");
// 第一行空白
for(i=1;i<=e;i++)
fprintf(fptr,"\t");
// 第一行數字
for(i=1;i<=7-e;i++)
fprintf(fptr,"%d\t",i);
fprintf(fptr,"\n");
// 剩餘數字
for(i;i<=d;i++)
{
if(j%7==0)
{
fprintf(fptr,"%d\t\n",i);
j++ ;
}
else
{
fprintf(fptr,"%d\t",i);
j++ ;
}
}
fprintf(fptr,"\n");
m++;
}while(m<=12);
cout << endl ;
system("pause");
}
int first_mon(int y) //每年的一月一號是星期幾
{
int i , j=2 ;
for(i=1;i<=(y-1980);i++)
{
if(i%4==1)
j+=2;
else
j++ ;
}
return j%7;
}
int m_days(int y,int m) //回傳月份有幾天-28
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 3;
break;
case 2 :
if (y%4==0)
return 1 ;
else
return 0 ;
break ;
default :
return 2;
break ;
}
}
int first_day(int y,int m) // 每月的一號是星期幾
{
int i ,sum=0;
for(i=1;i<=m-1;i++)
sum+=m_days(y,i);
sum=(sum+first_mon(y))%7;
return sum ;
}