📄 wannianli.c
字号:
{
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 + -