⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wannianli.c

📁 本源码是用c语言编写的一个万年历程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
	  total+=temp_num;
	  /*减年*/
	  l_info->lunar_year--;
	  china_era->era_month-=12;
	}
	/*1864年为农历甲子年*/
	china_era->era_year=l_info->lunar_year-1864;
	/*返回是否存在闰月*/
	l_info->leap_month=get_leap_month(l_info->lunar_year);
	l_info->leap_flag=0;
	for(i=1;i<13 &&total>0;i++)
	{
		if (l_info->leap_month>0&&i==(l_info->leap_month+1)&&l_info->leap_flag==0)
		{
			--i;
			temp_num=get_leap_month_day(l_info->lunar_year);
			/*存在闰月*/
			l_info->leap_flag=1;
		}
		else
			temp_num=get_lunar_month_total(l_info->lunar_year, i);
		if (l_info->leap_flag==1&&i==(l_info->leap_month+1))
			l_info->leap_flag=0;
		total-=temp_num;
		if (l_info->leap_flag==0)
			china_era->era_month++;
	}
	if(total==0&&l_info->leap_month>0&&i==l_info->leap_month+1)
		if(l_info->leap_flag==1)
			l_info->leap_flag=0;
		else
		{
		   l_info->leap_flag=1;
		   --i;
		   --china_era->era_month;
		}
		if(total<0)
		{
		  total+=temp_num;
		  --i;
		  --china_era->era_month;
		}
		l_info->lunar_month=i;
		l_info->lunar_day=total+1;
		if (l_info->leap_flag==0)
			l_info->current_mday=get_lunar_month_total(l_info->lunar_year,l_info->lunar_month);
		else
			l_info->current_mday=get_leap_month_day(l_info->lunar_year);
		return 0;
}
/*输出农历日期信息*/
int out_chinese(Lunar_info *l_info,char *chinese_str)
{ 
	/*初一不打印*/
	if (l_info->lunar_day!=1)
	{
		strcpy(chinese_str, chinese_day[l_info->lunar_day-1]);
		if (l_info->lunar_day==15&&l_info->lunar_month==1)
				strcpy(chinese_str, "元宵节");
		if(l_info->lunar_day==5&&l_info->lunar_month==5)
			strcpy(chinese_str, "端午节");
		if(l_info->lunar_day==7&&l_info->lunar_month==7)
			strcpy(chinese_str, "情人节");
		if(l_info->lunar_day==15&&l_info->lunar_month==7)
			strcpy(chinese_str, "中元节");
		if (l_info->lunar_day==15&&l_info->lunar_month==8)
				strcpy(chinese_str, "中秋节");
		if (l_info->lunar_day==9&&l_info->lunar_month==9)
				strcpy(chinese_str, "重阳节");
		if(l_info->lunar_month==12)
		{
			if(l_info->lunar_day==30)
				strcpy(chinese_str, "除夕");
			if(l_info->current_mday<30&&l_info->lunar_day==29)
				strcpy(chinese_str, "除夕");
			if (l_info->lunar_day==8)
				strcpy(chinese_str, "腊八节");
			if (l_info->lunar_day==23)
				strcpy(chinese_str, "小年");
		}

	}
	else
	{
		if (l_info->leap_flag==1)
		{
			//如果存在闰月就将汉字闰复制到数组里,再连接农历月份
			strcpy(chinese_str, "闰");
			strcat(chinese_str,chinese_month[l_info->lunar_month-1]);
			strcat(chinese_str, "月");
		}
		else
		{
			if (l_info->lunar_month==1)
				strcpy(chinese_str, "春节");
			else
			{
				strcpy(chinese_str,chinese_month[l_info->lunar_month-1]);
				strcat(chinese_str, "月");
				if(get_lunar_month_total(l_info->lunar_year,l_info->lunar_month)==30)
					strcat(chinese_str,"大");
				else
					strcat(chinese_str,"小");
			}
		}
	}
	return 0;
}
/*界面输出*/
void sub_menue()
{
	  int week,s_month_total,space_num,c_num;
   	  int i,j;
	  char tmp_str[9];
	  Chinese_era c_ear;
	  Lunar_info l_info;
	  /*每个月一号为星期几*/
	  week=get_week(s_year,s_month);
	  /*返回当月的天数*/
	  s_month_total=day(s_month);
	  //将已开辟内存空间tmp_str的首sizeof(tmp_str)个字节的值设为值0,作用在于可以方便的清空结构类型的数组或变量。
	  memset(&c_ear,0,sizeof(c_ear));
	  memset(&l_info,0,sizeof(l_info));
	  /*返回农历信息*/
	  get_lunar_info(s_year,s_month,&l_info,&c_ear);
	  memset(tmp_str,0,sizeof(tmp_str));
	  /*确定干支*/
	  get_chinese_era(s_year-1864,tmp_str);
	  system("cls");
	  printf("\t      ╭───────────────────────────╮\n");
   	  printf("\t1、↑年|                      万年历                          |\n");
	  printf("\t       |───────────────────────────|\n");
	  printf("\t2、↓年|          阳历:%d年%02d月  农历:%s年 【%s】         |\n",
	  s_year,s_month, tmp_str, Animals[(s_year-1864)%12]);
	  printf("\t       |───────────────────────────|\n");
	  printf("\t3、↑月|        今天是:");
	  TIME();
	  printf("|\n");
	  printf("\t       |───────────────────────────|\n");
	  printf("\t4、↓月|星期日  星期一  星期二  星期三  星期四  星期五  星期六|\n");
	  printf("\t       |───────────────────────────|\n");
	  printf("\t5、Exit|  ");
	  space_num=week;
	  for (i=1; i<space_num;i++)
	  {
		  printf("        ");
	  }
	  c_num=0;
	  for (i=1; i<=s_month_total;i++)
	  {
		   s_day=i;
		   printf("%02d",s_day); 
		   week+=1;
		   if((week>7)||(i==s_month_total))
		   {
			   week=1;
		       printf("\n               |");
				if (i<7)
				{
					for (j=1;j<space_num;j++)
					{
						printf("        ");
					}
					week=space_num;
				}
				else
					week=1;
				while(1)
				{
					week+=1;
					memset(tmp_str,0,sizeof(tmp_str));
					out_chinese(&l_info,tmp_str);
					printf("% 6s", tmp_str);
					if (l_info.lunar_day<l_info.current_mday)
						l_info.lunar_day=l_info.lunar_day+1;
					else
					{
						if ((l_info.lunar_month==l_info.leap_month)&&l_info.leap_flag==0)
						{
							/*存在闰月,返回天数*/
							l_info.current_mday=get_leap_month_day(l_info.lunar_year);
							l_info.leap_flag=1;
						}
						else
						{
							l_info.lunar_month=l_info.lunar_month+1;
							if (l_info.lunar_month>12)
							{
								l_info.lunar_month=1;
								/*月数大于12进年*/
								l_info.lunar_year=l_info.lunar_year+1;
							}
							/*返回闰月的天数*/
							l_info.current_mday=get_lunar_month_total(l_info.lunar_year, l_info.lunar_month);
							l_info.leap_flag=0;
						}
						l_info.lunar_day=1;
					}
					c_num++;
					if ((week>7)||(c_num==s_month_total))
					{
						week=1;
						printf("\n               |  ");
						break;
					}
					else
						printf("  ");
				}
		   }
		   else
			   printf("      ");
	  }
	  printf("\n");
	  printf("\t       ╰───────────────────────────╯\n");
}
main()
{ 
	char tmp_str[9];
	int curr_year,curr_month;
	time_t t;
	struct tm *tp;
	t=time(NULL);
	tp=localtime(&t);
lable:;
	s_year=tp->tm_year+1900;
	s_month=tp->tm_mon+1;
	sub_menue();
	while (1)
	{
	  printf("\t\t       你可以输入年份(1900-2050),也可以输入(1-5)!\n请输入:");
	  /*将已开辟内存空间tmp_str的首sizeof(tmp_str)个字节的值设为值0,作用在于可以方便的清空结构类型的数组或变量。*/
	  memset(tmp_str,0,sizeof(tmp_str));
	  gets(tmp_str);
	  /*atoi将字符串转换成整型数,用curr_month,curr_year接收输入的值*/
	  curr_month=curr_year=atoi(tmp_str);
	  /*上一年*/
	  if(curr_year==1&&strlen(tmp_str)==1)
	  {
		  s_year--;
		  if(s_year<1900)
			  s_year=2050;
	  }
	  /*下一年*/
	  else if(curr_year==2&&strlen(tmp_str)==1)
	  {
		  s_year++;
		  if(s_year>2050)
			  s_year=1900;
	  }
	  /*上一月*/
	  else if(curr_month==3&&strlen(tmp_str)==1)
	  {
		  s_month--;
		  if (s_month<1)
		  {
			  s_year-=1;
			  s_month=12;
			  if(s_year<1900)
				  s_year=2050;
		  }
	  }
	  /*下一月*/
	  else if(curr_month==4&&strlen(tmp_str)==1)
	  {
		  s_month++;
		  if (s_month>12)
		  {
			  s_year+=1;
			  s_month=1;
			  if(s_year>2050)
				  s_year=1900;
		  }
	  }
	  /*退出*/
	  else if(curr_year==5&&strlen(tmp_str)==1)
		  {
			  system("cls");
			  printf("\n\n\n\n\n\n\n\n\t\t\t    谢 谢 使 用, 再 见 !!!\n\t\t\t ");
			  buffer(1);
			  exit(0);
		  }
	  else
	  {
		  s_year=atoi(tmp_str);
		  if (strlen(tmp_str)>4||(s_year<1900)||(s_year>2050))
		  {
		   printf("\t\t\t  Error:年份输入错误,重新输入!!!\n");
		   buffer(1);
		   goto lable;
		  }
		  printf("请输入月份(1-12):");
		  memset(tmp_str,0,sizeof(tmp_str));
		  gets(tmp_str);
		  s_month=atoi(tmp_str);
		  if (strlen(tmp_str)>2||(s_month<1)||(s_month>12))
		  {
		   printf("\t\t\t  Error:月份输入错误,重新输入!!!\n");
		   buffer(1);
		   goto lable;
		  }
	  }
	  sub_menue();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -