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 ;
}