#include
#include
#include
#define X " Sun Mon Tue Wed Thu Fri Sat"
#define P printf
#define B break
#define FP fprintf
struct date /*日期*/
{int year;
int month;
int date;
};
struct taglunarcal /**/
{
int basedays;
int intercalation;
int monthdays[13];
}dalist[]={{31,8,0,1,0,0,1,0,1,1,0,1,1,0,1},{50,0,0,1,0,0,1,0,1,0,1,1,1,0,0},{39,0,1,0,1,0,0,1,0,1,0,1 ,1,1,0},{29,5,0,1,0,1,0,0,1,0,0,1,1,0,1},
{47,0,1,1,0,1,0,0,1,0,0,1,1,0,0},{35,0,1,1,0,1,1,0,0,1,0,1,0,1,0},{25,4,0,1,1,0,1,0,1,0,1,0,1,0,1},{4 4,0,0,1,0,1,0,1,1,0,1,0,1,0,0},
{33,0,1,0,0,1,1,0,1,0,1,1,0,1,0},{22,2,0,1,0,0,1,0,1,0,1,1,1,0,1},{41,0,0,1,0,0,1,0,1,0,1,1,1,0,0},{3 0,6,1,0,1,0,0,1,0,0,1,1,0,1,1},
{49,0,1,0,1,0,0,1,0,0,1,1,0,1,0},{37,0,1,1,0,1,0,0,1,0,0,1,0,1,0},{26,5,1,1,0,1,0,1,0,1,0,1,0,0,1},{4 5,0,1,0,1,1,0,1,0,1,0,1,0,1,0},
{35,0,0,1,0,1,0,1,1,0,1,0,1,0,0},{23,2,1,0,0,1,0,1,1,0,1,1,0,1,0},{42,0,1,0,0,1,0,1,0,1,1,0,1,1,0},{3 2,7,0,1,0,0,1,0,0,1,1,0,1,1,1},
{51,0,0,1,0,0,1,0,0,1,1,0,1,1,0},{39,0,1,0,1,0,0,1,0,0,1,0,1,1,0},{28,5,1,0,1,1,0,0,1,0,0,1,0,1,1},{4 7,0,0,1,1,0,1,0,1,0,0,1,0,1,0},
{36,0,0,1,1,0,1,1,0,1,0,1,0,0,0},{24,4,1,0,1,0,1,1,0,1,1,0,1,0,1},{44,0,0,0,1,0,1,0,1,1,0,1,1,0,0},{3 3,0,1,0,0,1,0,1,0,1,0,1,1,1,0},
{23,2,0,1,0,0,1,0,0,1,0,1,1,1,1},{41,0,0,1,0,0,1,0,0,1,0,1,1,1,0},{30,6,0,1,1,0,0,1,0,0,1,0,1,1,0},{4 8,0,1,1,0,1,0,1,0,0,1,0,1,0,0},
{37,0,1,1,1,0,1,0,1,0,0,1,0,1,0},{26,5,0,1,1,0,1,1,0,1,0,1,0,0,1},{45,0,0,1,0,1,1,0,1,0,1,1,0,1,0},{3 5,0,0,0,1,0,1,0,1,1,0,1,1,0,0},
{24,3,1,0,0,1,0,0,1,1,0,1,1,1,0},{42,0,1,0,0,1,0,0,1,0,1,1,1,0,0},{31,7,1,1,0,0,1,0,0,1,0,1,1,0,1},{5 0,0,1,1,0,0,1,0,0,1,0,1,0,1,0},
{39,0,1,1,0,1,0,1,0,0,1,0,1,0,0},{27,6,1,1,0,1,1,0,1,0,0,1,0,1,0},{46,0,1,0,1,1,0,1,0,1,0,1,0,1,0},{3 6,0,0,1,0,1,0,1,1,0,1,0,1,0,0},
{25,4,1,0,1,0,1,0,1,0,1,1,0,1,1},{44,0,0,0,1,0,0,1,0,1,1,1,0,1,0},{33,0,1,0,0,1,0,0,1,0,1,1,0,1,0},{2 2,2,1,1,0,0,1,0,0,1,0,1,0,1,1},
7,0,1,0,1,1,0,1,0,1,0,1,0,1,0},
{27,5,0,1,0,1,0,1,0,1,1,0,1,0,1},{45,0,0,1,0,0,1,1,0,1,1,0,1,0,0},{34,0,1,0,1,0,0,1,0,1,1,0,1,1,0},{2 4,3,0,1,0,1,0,0,1,0,1,0,1,1,1},
{43,0,0,1,0,1,0,0,1,0,1,0,1,1,0},{31,8,1,0,1,0,1,0,0,1,0,1,0,1,0},{49,0,1,1,1,0,1,0,0,1,0,1,0,1,0},{3 9,0,0,1,1,0,1,0,1,0,1,0,1,0,0},
{28,6,1,0,1,0,1,1,0,1,0,1,0,1,0},{46,0,1,0,1,0,1,0,1,1,0,1,0,1,0},{36,0,0,1,0,0,1,0,1,1,0,1,1,0,0},{2 5,4,1,0,1,0,0,1,0,1,0,1,1,1,0},
{44,0,1,0,1,0,0,1,0,1,0,1,1,1,0},{33,0,0,1,0,1,0,0,1,0,0,1,1,0,0},{21,3,1,1,1,0,1,0,0,1,0,0,1,1,0},{4 0,0,1,1,0,1,1,0,0,1,0,1,0,1,0},
{30,7,0,1,0,1,1,0,1,0,1,0,1,0,1},{48,0,0,1,0,1,0,1,1,0,1,0,1,0,0},{37,0,1,0,0,1,0,1,1,0,1,1,0,1,0},{2 7,5,0,1,0,0,1,0,1,0,1,1,1,0,1},
{46,0,0,1,0,0,1,0,1,0,1,1,0,1,0},{34,0,1,0,1,0,0,1,0,0,1,1,0,1,0},{23,4,1,1,0,1,0,0,1,0,0,1,1,0,1},{4 2,0,1,1,0,1,0,0,1,0,0,1,0,1,0},
{31,8,1,1,0,1,0,1,0,1,0,0,1,0,1},{49,0,1,0,1,1,0,1,0,1,0,1,0,0,0},{38,0,1,0,1,1,0,1,1,0,1,0,1,0,0},{2 8,6,1,0,0,1,0,1,1,0,1,1,0,1,0},
{47,0,1,0,0,1,0,1,0,1,1,0,1,1,0},{36,0,0,1,0,0,1,0,0,1,1,0,1,1,0},{25,4,1,0,1,0,0,1,0,0,1,0,1,1,1},{4 4,0,1,0,1,0,0,1,0,0,1,0,1,1,0},
{33,0,1,0,1,1,0,0,1,0,0,1,0,1,1},{51,0,0,1,1,0,1,0,1,0,0,1,0,1,0},{40,0,0,1,1,0,1,1,0,1,0,1,0,0,0},{2 9,6,1,0,1,0,1,1,0,1,1,0,1,0,0},
{48,0,1,0,1,0,1,0,1,1,0,1,1,0,0},{37,0,1,0,0,1,0,0,1,1,0,1,1,1,0},{27,5,0,1,0,0,1,0,0,1,0,1,1,1,1},{4 6,0,0,1,0,0,1,0,0,1,0,1,1,1,0},
{35,0,0,1,1,0,0,1,0,0,1,0,1,1,0},{23,3,0,1,1,0,1,0,1,0,0,1,0,1,0},{41,0,1,1,1,0,1,0,1,0,0,1,0,1,0},{3 1,8,0,1,1,0,1,0,1,1,0,0,1,0,1},
{50,0,0,1,0,1,1,0,1,0,1,1,0,0,0},{38,0,1,0,1,0,1,0,1,1,0,1,1,0,0},{28,5,1,0,0,1,0,0,1,1,0,1,1,0,1},{4 7,0,1,0,0,1,0,0,1,0,1,1,1,0,0},
{36,0,1,1,0,0,1,0,0,1,0,1,1,0,0},{24,4,1,1,0,1,0,1,0,0,1,0,1,0,1},{43,0,1,1,0,1,0,1,0,0,1,0,1,0,0},{3 2,0,1,1,0,1,1,0,1,0,0,1,0,1,0},
{22,2,0,1,0,1,1,0,1,0,1,0,1,0,1},{40,0,0,1,0,1,0,1,1,0,1,0,1,0,0},{29,7,1,0,1,0,1,0,1,0,1,1,0,1,1},{4 9,0,0,0,1,0,0,1,0,1,1,1,0,1,0},
{38,0,1,0,0,1,0,0,1,0,1,1,0,1,0},{26,5,1,1,0,0,1,0,0,1,0,1,0,1,1},{45,0,1,0,1,0,1,0,0,1,0,1,0,1,0},{4 5,0,1,0,1,1,0,1,0,0,1,0,1,0,0},
{23,4,1,0,1,1,1,0,1,0,1,0,1,0,1},{41,0,1,0,1,0,1,1,0,1,0,1,0,1,0},{31,9,0,1,0,1,0,1,0,1,1,1,0,1,1},{5 0,0,0,1,0,0,1,0,1,1,1,0,1,0,0},
{39,0,1,0,1,0,0,1,0,1,1,0,1,1,0},{28,6,0,1,0,1,0,0,0,1,0,1,1,1,0},{47,0,0,1,0,1,0,0,1,0,1,0,1,1,0},{3 6,0,1,0,1,0,1,0,0,1,0,0,1,1,0},
{25,4,0,1,1,1,1,0,0,1,0,1,0,1,1},{43,0,0,1,1,0,1,0,1,0,1,0,1,0,0},{32,0,1,0,1,0,1,1,0,1,0,1,0,1,0},{2 2,2,0,1,0,1,1,0,1,1,0,1,0,1,1},
{41,0,0,1,0,0,1,0,1,1,0,1,1,0,0},{29,6,1,0,1,0,0,1,1,0,1,1,1,0,1},{48,0,1,0,1,0,0,1,0,0,1,1,1,0,0},{3 7,0,1,1,0,1,0,0,1,0,0,1,1,0,0},
{26,5,1,1,1,0,1,0,1,0,0,1,1,0,1},{44,0,1,1,0,1,0,1,0,1,0,0,1,1,0},{34,0,0,1,0,1,1,0,1,0,1,0,1,0,0},{2 3,3,0,1,1,1,0,1,1,0,1,0,1,0,1},
{42,0,1,0,0,1,0,1,1,0,1,1,0,1,0},{31,7,0,1,0,0,1,0,1,1,1,1,0,1,1},{50,0,0,1,0,0,1,0,1,0,1,1,0,1,0},{3 9,0,1,0,1,0,0,1,0,0,1,1,0,1,0},
4,5,1,1,0,1,1,1,0,1,0,1,0,0,1},
{43,0,1,0,1,1,0,1,0,1,1,0,1,0,0},{32,0,0,1,0,1,0,1,1,0,1,1,0,1,0},{22,2,0,1,0,1,0,1,0,1,1,0,1,1,1},{4 1,0,0,1,0,0,1,0,0,1,1,0,1,1,0},
{30,7,1,0,1,0,0,1,0,1,0,1,1,1,0},{48,0,1,0,1,0,0,1,0,0,1,0,1,1,0},{37,0,1,0,1,0,1,0,1,0,0,1,0,1,0},{2 6,5,1,0,1,1,0,0,1,0,0,1,0,1,0},
{45,0,0,1,1,0,1,1,0,1,0,0,1,0,0},{33,0,1,0,1,0,1,1,0,1,1,0,1,0,0},{23,3,0,1,0,0,1,0,1,1,0,1,1,0,0},{4 2,0,1,0,0,1,0,0,1,1,0,1,1,1,0},
{32,8,0,1,0,0,1,0,0,1,1,1,1,1,1},{50,0,0,1,0,0,1,0,0,1,0,1,1,1,0},{39,0,0,1,1,0,0,1,0,0,1,0,1,1,0},{2 8,6,0,1,1,0,1,0,0,0,1,0,1,0,0},
{46,0,1,1,1,0,1,0,1,0,0,1,0,1,0},{35,0,0,1,1,0,1,0,1,1,0,0,1,0,0},{24,4,1,0,1,0,0,1,1,0,1,1,0,0,0},{4 3,0,1,0,1,0,1,0,1,0,1,1,1,0,0},
{33,0,1,0,0,1,0,0,1,0,1,1,1,0,0},{21,3,1,1,0,1,0,0,1,0,1,1,1,0,0},{40,0,1,1,0,0,1,0,0,1,0,1,1,0,0},{2 9,7,1,1,0,1,0,1,0,1,0,1,0,1,0},
{48,0,1,1,0,1,0,1,0,0,1,0,1,0,0},{36,0,1,1,0,1,1,0,1,0,0,1,0,1,0},{26,5,0,1,0,1,1,1,0,1,0,1,0,1,1},{4 5,0,0,1,0,1,0,1,1,0,1,0,1,0,0},
{34,0,1,0,1,0,0,1,1,0,1,1,0,1,0},{23,4,0,1,0,1,0,1,0,1,1,1,0,1,1},{42,0,0,1,0,1,0,0,1,0,1,1,0,1,0},{3 1,8,1,0,1,0,1,0,0,1,1,0,1,1,1},
{50,0,1,0,1,0,1,0,0,1,0,1,0,1,0},{38,0,1,0,1,1,0,1,0,0,1,0,1,0,0},{27,6,1,0,1,1,0,1,1,0,1,0,1,0,1},{4 6,0,1,0,1,0,1,1,0,1,0,1,0,1,0},
{36,0,0,1,0,1,0,1,0,1,1,0,1,0,0},{24,4,1,0,1,0,1,0,1,1,1,0,1,0,0},{43,0,1,0,1,0,0,1,0,1,1,0,1,1,0},{3 3,0,0,1,0,1,0,0,1,0,1,0,1,1,0},
{22,3,1,0,1,1,0,0,1,0,0,1,1,1,1},{40,0,0,1,1,0,1,0,0,1,0,0,1,1,0},{29,7,0,1,1,1,0,0,1,1,0,0,1,1,1},{4 8,0,0,1,1,0,1,0,1,0,1,0,1,0,0},
{37,0,1,0,1,0,1,1,0,1,0,1,0,1,0},{26,5,0,1,0,0,1,0,1,1,0,1,0,1,1},{45,0,0,1,0,0,1,0,1,1,0,1,1,0,0},{3 4,0,1,0,1,0,0,1,0,1,0,1,1,1,0},
{24,4,0,1,0,1,0,1,0,0,1,1,1,0,1},{41,0,1,1,0,1,0,0,1,0,0,1,1,0,0},{30,8,1,1,1,0,1,0,0,1,0,1,1,0,1},{4 9,0,1,1,0,1,0,1,0,1,0,0,1,0,0},
{38,0,1,1,0,1,1,0,1,0,1,0,1,0,0},{27,6,0,1,1,0,1,0,1,0,1,0,1,0,0},{46,0,0,1,0,1,0,1,1,0,1,1,0,1,0},{3 6,0,0,1,0,0,1,0,1,0,1,1,1,0,0},
{25,4,1,0,1,0,1,0,0,1,1,1,0,1,0},{43,0,1,0,1,0,0,1,0,0,1,1,0,1,0},{32,0,1,0,1,0,0,0,0,1,0,1,0,1,0},{2 1,2,1,1,1,1,0,0,1,0,0,1,0,1,1},
{40,0,1,1,0,1,0,1,0,1,0,0,1,0,0}};
getleap( int year ) /*1代表闰年*/
{
if ( year % 400 == 0 )
return 1;
else if ( year % 100 == 0 )
return 0;
else if ( year % 4 == 0 )
return 1;
else
return 0;
}
print(int n)
{
int i;
for(i=0;i } int day(int year) { long a,b; if(year<=2000) { a=2000-year;b=6-(a+a/4-a/100+a/400)%7; return b; } else { a=year-2000; b=(a+1+(a-1)/4-(a-1)/100+(a-1)/400)%7+6; return b%7; } } solardate(struct date * input) /*公历年第几天*/ {int i,number=0,solarcal[12]={31,28,31,30,31,30,31,31,30,31,30,31}; number=getleap(input->year); for(i=0;i {number+=solarcal[i]; } return number+input->date; } lunardate(struct date *input)/*农历年第几天*/ {int i,leap=0,number=0; if(dalist[input->year-1900].intercalation==0) leap=0; else if(input->month==dalist[input->year-1900].intercalation) {printf(" 0 not leap month\n 1 leap month"); scanf("%d",&leap); } else if(input->month>dalist[input->year-1900].intercalation) leap=1; for(i=0;i number+=dalist[input->year-1900].monthdays[i]+29; return number+input->date; } lunarmonth(int year,int *mon) {int i,j; mon[0]=dalist[year].monthdays[0]+29; for(i=1,j=1;i<12;i++,j++) {if(i==dalist[year].intercalation) {mon[i-1]+=dalist[year].monthdays[j]+29; j++; } mon[i]=mon[i-1]+dalist[year].monthdays[j]+29; } } main() {int i,j,k,m,n,f1,f2,year,d,y,ly,cord,greday,lunday,diff,add,leap,tlylm[12],lastylm[12], a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}, SolarDays[2][12] = {{31,59,90,120,151,181,212,243,273,304,334,365},{31,60,91,121,152,182,213,244,274,305,335, 366}}; char fname[12]={"0"}; FILE *fw; struct date input; do{ printf("\n--------------------------------------------\n"); printf(" 请选择"); printf("\n--------------------------------------------\n"); printf(" 1 公历转换成农历"); printf("\n--------------------------------------------\n"); printf(" 2 农历转换成公历"); printf("\n--------------------------------------------\n"); printf(" 3 万年历"); printf("\n--------------------------------------------\n"); printf(" 4 退出"); printf("\n--------------------------------------------\n"); printf("\n 请选择: 1,2,3,4\n"); scanf("%d",&cord); clrscr(); switch(cord) {case 1:{printf("\n(公历) 请输入年.月.日(yyyy.mm.dd) \n"); scanf("%d.%d.%d",&input.year,&input.month,&input.date);/*输入年月日*/ y=input.year; greday=solardate(&input);/*公历年第几天*/ diff=greday-dalist[y-1900].basedays; if(diff>0) lunarmonth(y-1900,tlylm); else {y-=1; lunarmonth(y-1900,tlylm); diff+=tlylm[11]; } for(i=0;tlylm[i] if(i!=0) diff-=tlylm[i-1]; printf("(农历) %d.%d.%d",y,i+1,diff); break; } clrscr(); case 2:{printf("\n(农历) 请输入年.月.日(yyyy.mm.dd) \n"); scanf("%d.%d.%d",&input.year,&input.month,&input.date); y=input.year; ly=getleap(y); lunday=lunardate(&input);/*农历年第几天*/ add=lunday+dalist[y-1900].basedays; if(add-365+ly>0) {add-=365+ly; y+=1; } for(i=0;SolarDays[ly][i] if(i!=0) add-=SolarDays[ly][i-1]; printf("(公历) %d.%d.%d",y,i+1,add); break; } case 3:{system("cls"); P(" 请输入你所要查看的年份:"); scanf("%d",&year); fw=fopen(fname,"w+"); if(fw==NULL) { P(" can not open file."); return; } P(" The calendar of the year %d.\n",year); FP(fw,"The calendar of the year %d.\n",year); d=day(year); if(year%4==0&&year%100||year%400==0) a[2]++; for(i=1;i<=12;i+=2) { m=0; n=0; f1=0; f2=0; switch(i) { case 1:P(" Januray 1 "); FP(fw," Januray 1 "); B; case 3:P(" March 3 "); FP(fw," March 3 "); B; case 5:P(" May 5 "); FP(fw," May 5 "); B; case 7:P(" July 7 "); FP(fw," July 7 "); B; case 9:P(" September 9 "); FP(fw," September 9 "); B; case 11:P(" Nevember 11 "); FP(fw," Nevember 11 "); B; } print(21); for(k=0;k<21;k++) fprintf(fw," "); switch(i+1) { case 2:P(" February 2 "); FP(fw," February 2 ");B; case 4:P(" April 4 "); FP(fw," April 4 ");B; case 6:P(" June 6 "); FP(fw," June 6 ");B; case 8:P(" August 8 "); FP(fw," August 8 "); B; case 10:P(" October 10 "); FP(fw," October 10 ");B; case 12:P(" December 12"); FP(fw," December 12");B; } P("\n"); fprintf(fw,"\n"); P(X); fprintf(fw,X); print(6); fprintf(fw," "); P(X); fprintf(fw,X); fprintf(fw,"\n"); P("\n"); for(j=0;j<6;j++) { if(j==0) { print(d*4); for(k=0;k for(k=0;k<7-d;k++) { P("%4d",++m); fprintf(fw,"%4d",m); } print(6); fprintf(fw," "); d+=a[i]%7; d%=7; print(d*4); for(k=0;k for(k=0;k<7-d;k++) { P("%4d",++n); fprintf(fw,"%4d",n); } P("\n"); fprintf(fw,"\n"); } else { for(k=0;k<7;k++) {