现在的位置: 首页 > 综合 > 正文

c-简单的阴-阳历转换 turboc 2.0

2013年10月03日 ⁄ 综合 ⁄ 共 4522字 ⁄ 字号 评论关闭

#include<stdio.h>
#include<bios.h>
struct data
 {
 int year1;
 int specialmonth;
 int month1[13];
 };
struct day{
 int year2;
 int month2;
 int day2;
 };

int dis_day1(struct day *op,int *p)
 {
 int n=0,x;
 n+=(op->year2-1980)*365;
 for(x=1980;x<op->year2;x++)
 if((x%4==0&&x%100!=0)||(x%100==0&&x%400==0))n+=1;
 for(x=1;x<(op->month2);x++)
 n+=*(p+x-1);
 x=op->year2;
 if(((x%4==0&&x%100!=0)||(x%100==0&&x%400==0))&&op->month2>2)n+=1;
 n+=(op->day2-1);
 return n;
}
int dis_day2(struct day *op,struct data *p)
{
 int n=0,maxmonth,i,x;
 for(x=1980;x<op->year2;x++)
 { if((p+x-1979)->specialmonth==0)maxmonth=12;
 else maxmonth=13;
 for(i=0;i<maxmonth;i++)
 if((p+x-1979)->month1[i]==0)n+=29;
 else n+=30;
 }
 if((p+op->year2-1979)->specialmonth!=0)
 if((p+op->year2-1979)->specialmonth<op->month2)op->month2++;
for(i=1;i<op->month2;i++)
 {
 if((p+op->year2-1979)->month1[i-1]==0)n+=29;
 else n+=30;}
 n+=(op->day2-1);
 n+=46;
return n;
}
void work_out2(struct day *re,struct data *p,int n)
{
 int n1=0,maxday,maxmonth,month,day,judge=0;
 re->year2=1979;re->month2=11;re->day2=14;
 while(1)
 {
 if(judge==1)break;
 if(p->specialmonth==0)maxmonth=12;
 else maxmonth=13;
 if(p->year1==1979)month=12;
 else month=1;
 for(;month<=maxmonth;month++)
 {
 if(p->month1[month-1]==0)maxday=29;
 else maxday=30;
 if((p->year1==1979)&&(maxday==30))day=14;
 else day=1;
 for(;day<=maxday;day++)
 {
 if(n1==n){if(maxmonth==13&&month>p->specialmonth)month-=1;
 re->year2=p->year1;re->month2=month;re->day2=day;judge=1;break;}
else n1+=1;
 }

if(judge==1)break;}
 p++;
 }
}

void work_out1(struct day *re,int n,int *p)
 {
 int year=1980,n1=0,month,day,maxday,judge=0;
 re->year2=1980;re->month2=1;re->day2=1;
 while(1)
 {
 *(p+1)=28;
 if(judge==1)break;
 if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))*(p+1)=29;
 for(month=1;month<=12;month++)
 {
 maxday=*(p+month-1);
 for(day=1;day<=maxday;day++)
 {

if(n1==n){re->year2=year;re->month2=month;re->day2=day;judge=1;break;}
 else n1++; 
 }

 if(judge==1)break;}
 year++;
 }
 }

 

main()
{
 int n,c;
 int sun[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 int *p1=sun;
 struct day ob,re; struct data *p2;
 struct data year[37]={
{1979,6, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 },
{1980,0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 },
{1981,0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0 },
{1982,4, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1 },
{1983,0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 },
{1984,10,1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 },
{1985,0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{1986,0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0 },
{1987,6, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 },
{1988,0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0 },
{1989,0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 },
{1990,5, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 },
{1991,0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 },
{1992,0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 },
{1993,3, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{1994,0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{1995,8, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 },
{1996,0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0 },
{1997,0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0 },
{1998,5, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 },
{1999,0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
{2000,0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0 },
{2001,4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
{2002,0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0 },
{2003,0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{2004,2, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{2005,0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0 },
{2006,7, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 },
{2007,0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0 },
{2008,0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 },
{2009,5, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },
{2010,0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },
{2011,0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0 },
{2012,4, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
{2013,0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
{2014,9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 },
{2015,0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0 }
};
 p2=year;
 printf(" WARNING /n");
 printf(" you should take care of it :/n");
 printf(" the limted range:/n");
 printf(" lunar calendar: 1980.1.1----2015.11.12/n");
 printf(" soalr calendar: 1980.1.1-----2015.12.31/n");

while(1)
 { printf(" please choose one way a/b?/n");
 printf(" a: soalr calendar---->lunar calendar/n");
 printf(" b: lunar calendar---->soalr calendar/n");
 do{c=getchar();}while(c!='a'&&c!='b');
 do{
 printf("your must pay attention to the form/n");
 printf("pleae input your date:/n");
 scanf("%d.%d.%d",&ob.year2,&ob.month2,&ob.day2);
 }while(ob.year2<1980||ob.year2>=2016||ob.month2<1||
 ob.month2>12||ob.day2<1||ob.day2>31);
 switch(c)
 {
 case 'a':

 n=dis_day1(&ob, p1);
 work_out2(&re,p2,n);
 printf(" the result is %d.%d.%d/n",re.year2,re.month2,re.day2);break;
 case 'b':

 n=dis_day2(&ob,p2);
 work_out1(&re,n,p1);
 printf(" the result is %d.%d.%d/n",re.year2,re.month2,re.day2);
 if(ob.month2==(p2+ob.year2-1979)->specialmonth)
 { if((ob.day2!=30)||((p2+ob.year2-1979)->month1[ob.month2]==1))
 { n+=((p2+ob.year2-1979)->month1[ob.month2-1]+29);
 work_out1(&re,n,p1);
printf("there is a other result/n:/t%d.%d.%d/n",re.year2,re.month2,re.day2);
 }
 }

 break;
 defluat: break;
 }
 printf("if you want to try again,y/n?/n");
 do{c=bioskey(0);}while(c!=0x316e&&c!=0x1579);if(c==0x316e)break;
 }
}

抱歉!评论已关闭.