公历和农历之间如何转换?

#include<stdio.h> 
//#include<bios.h>
//bios.h是基本输入输入函数的头文件,在DOS下的TC或者BC都有该头文件; 
//在windows的VC6换成include<io.h>可以解决。

#include<io.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);printf("%d\n",n); 
 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);printf("%d\n",n); 
 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; 
 } 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL是一个开源的关系型数据库管理系统,可以用于存储和管理数据。关于公历表和农历表,我们可以使用MySQL来创建和操作这两种类型的表。 首先,我们可以创建一个公历表来存储公历日期相关的数据。可以定义列来存储日期、月份和年份等信息。例如,可以创建一个名为"公历表"的表来存储公历日期数据。表中的列可以包括日期、月份、年份、星期几等信息。使用MySQL的CREATE TABLE语句可以创建这个表。 然后,我们可以创建一个农历表来存储农历日期相关的数据。与公历表类似,可以定义列来存储农历日期、月份和年份等信息。例如,可以创建一个名为"农历表"的表来存储农历日期数据。表中的列可以包括农历日期、月份、年份、生肖、农历节气等信息。同样使用MySQL的CREATE TABLE语句来创建这个表。 在这两个表中,我们可以插入具体的公历日期和农历日期数据。使用MySQL的INSERT INTO语句,可以将数据插入到表中的行中。 当我们需要查询特定的公历日期或农历日期时,可以使用MySQL的SELECT语句来检索数据。我们可以使用WHERE子句指定查询条件,以便获取特定日期或一定范围内的日期数据。 总之,MySQL可以用于创建和操作公历表和农历表,帮助我们存储和管理公历农历日期相关的信息。通过使用MySQL的语句,我们可以创建表格、插入数据和查询数据,从中获得我们所需的信息。 ### 回答2: MySQL是一个开源的关系型数据库管理系统,用于管理和存储数据。它可以创建和管理多个表,其中一种常见的使用场景是创建公历表和农历表。 公历表是指按照公历(也称为西历或格里高里历)的日期格式存储的数据表。公历使用的是阳历,它是以地球绕太阳运行一周为周期的时间计量系统。在公历表中,可以存储日期、时间和相关的数据。 农历表指的是按照农历日期格式存储的数据表。农历是中国传统的一种时间计量系统,它基于月亮的运行周期。农历中有闰月的概念,所以一年的长度可能不一样。农历表中,可以存储农历的年、月、日等信息。 在MySQL中,可以通过创建两个不同的表,一个用于存储公历日期,另一个用于存储农历日期。每个表都可以有自己的列来存储不同的日期和时间数据。通过使用适当的字段类型和格式,可以确保数据的准确性和一致性。 在设计这两个表时,可以使用MySQL提供的日期和时间类型,如DATE、DATETIME和TIMESTAMP等,来存储日期和时间数据。同时,可以为每个表创建适当的索引来优化查询性能。通过使用MySQL的日期和时间函数,可以进行日期的计算和转换,以便在公历表和农历之间进行数据交互。 总而言之,使用MySQL可以方便地创建和管理公历表和农历表,以满足不同日历系统的需求。这在处理与日期和时间有关的应用程序或数据时非常有用,比如日历应用、节假日查询、农历生肖计算等。 ### 回答3: MySQL是一种关系型数据库管理系统,它提供了丰富的功能和工具来有效地存储、管理和查询数据。MySQL可以创建和维护不同类型的表,包括公历表和农历表。 公历表是一种用于存储阳历日期的数据库表。在公历表中,可以存储年、月、日、小时、分钟、秒等时间信息。这些表可以用于记录和计算公历日期,进行日期的比较和排序,以及支持其他与公历相关的计算。 农历表是一种用于存储农历日期的数据库表。农历是中国传统的日历系统,它基于月相和太阳运动周期。在农历表中,可以存储农历年、月、日等信息。这些表可以用于记录和计算农历日期,进行农历节气的计算和查询,还可以支持其他与农历相关的功能。 通过MySQL的查询语句,可以方便地从公历表和农历表中提取需要的日期数据。例如,可以使用SELECT语句来选择公历农历日期的特定字段,比如某个月份的所有日期。还可以使用WHERE子句来筛选出符合特定条件的日期数据,比如一个特定年份的所有农历节气。 MySQL还提供了各种函数和操作符来处理日期数据,例如DATE_FORMAT函数用于格式化日期输出,DATE_ADD函数用于日期的加法运算,DATEDIFF函数用于计算两个日期之间的天数差等等。这些功能使得MySQL成为一种非常灵活和强大的日期处理工具。 总之,MySQL可以很好地支持公历表和农历表的创建、维护和查询。无论是公历日期还是农历日期,MySQL都能提供方便的功能和工具来处理和管理这些日期数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值