1万年历c语言多功能.docx
- 文档编号:29946882
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:17
- 大小:17.43KB
1万年历c语言多功能.docx
《1万年历c语言多功能.docx》由会员分享,可在线阅读,更多相关《1万年历c语言多功能.docx(17页珍藏版)》请在冰豆网上搜索。
1万年历c语言多功能
#include"time.h"/*包含的头文件*/
#include"stdio.h"
#include"math.h"
#include"windows.h"
#include"conio.h"
#defineKEYNUMUp0x48/*宏定义*/
#defineKEYNUMDown0x50
#defineKEYNUMLeft0x4b
#defineKEYNUMRight0x4d
inteachyeartotal(intyear,intmonth,intday>。
/*函数声明*/
intcounterdays(intyear,intmonth,intday>。
intnowtime(intyear,intmonth,intday>。
intweek(intyear,intmonth,intday>。
intmaxDay(intyear,intmonth>。
intisleap(intyear>。
voidwhatweek(intyear,intmonth,intday>。
voiddisplay(intyear,intmonth>。
voiddisplay2(intyear,intmonth>。
voiddisplay3(intyear,intmonth,intday>。
voidsetDay1(intyear,intmonth,intday>。
voidsetDay2(intyear,intmonth,intday>。
voidsetDay3(intyear,intmonth,intday>。
voidjieri(intmonth,intday>。
voiddisplay1(intday>。
voidgetmenu(>。
voidmain(>/*主函数*/
{
intyear,month,day,select。
while(1>
{
getmenu(>。
printf("请输入相应数字:
">。
/*菜单选择*/
scanf("%d",&select>。
system("cls">。
switch(select>
{
case1:
/*当选择为1时显示日期查询*/
printf("日期查询:
输入天数<如5):
">。
scanf("%d",&day>。
if(day>0&&day<10000>/*日期选择从0-10000*/
{display1(day>。
printf("提示按任意键:
返回菜单\n\n">。
setDay2(year,month,day>。
}
else
system("cls">。
printf("输入无效,重新输入!
\n">。
break。
case2:
/*当选择为2显示月历*/
printf("月历查询:
输入年月<如2018,6):
">。
scanf("%d,%d",&year,&month>。
if(year>0&&year<10000&&month>=1&&month<=12>
{
display2(year,month>。
printf("提示按←:
上个月按→:
下个月按其他键:
返回菜单\n\n">。
setDay2(year,month,day>。
}
else
system("cls">。
printf("输入无效,重新输入!
\n">。
break。
case3:
/*当选择为3时显示日历*/
printf("日期显示:
输入年月日(比如2018,6,23>:
">。
scanf("%d,%d,%d",&year,&month,&day>。
if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month>>
{
display3(year,month,day>。
printf("提示按↑:
前一天按↓:
后一天按其他键:
返回菜单\n\n">。
setDay3(year,month,day>。
}
else
system("cls">。
printf("输入无效,重新输入!
\n">。
break。
case4:
printf("\n\n\n\n\n\n\n\n\n\n">。
printf("*******************************************\n\n">。
printf("*感谢使用本万年历工具*\n\n">。
printf("*制作人:
赵凯*\n\n">。
printf("*******************************************\n\n">。
printf("\n\n\n\n\n\n\n\n">。
exit(0>。
default:
/*当输入其他数字时,输入无效,重新输入*/
system("cls">。
printf("输入无效,重新输入!
\n">。
}
}
}
intisleap(intyear>/*判断是否为闰年*/
{
if(year%4==0&&year%100!
=0||year%400==0>
return1。
else
return0。
}
intmaxDay(intyear,intmonth>/*每月的天数*/
{
inta[]={31,28,31,30,31,30,31,31,30,31,30,31}。
/*每个月中的天数*/
if(isleap(year>>
a[1]=29。
/*闰年2月份有29天*/
returna[month-1]。
}
inteachyeartotal(intyear,intmonth,intday>/*判断某天是一年中的第几天*/
{
inti,sum=0。
for(i=1。
i i++> sum+=maxDay(year,i>。 sum+=day。 returnsum。 } intweek(intyear,intmonth,intday>/*对天数进行判断确定是星期几*/ { intnumber=(year-1>+(year-1>/4-(year-1>/100+(year-1>/400 +eachyeartotal(year,month,day>。 number=number%7。 returnnumber。 } voiddisplay(intyear,intmonth>/*输出年月*/ { intmax,number,i,j=1。 max=maxDay(year,month>。 number=week(year,month,1>。 printf("%4s%4s%4s%4s%4s%4s%4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat">。 for(i=0。 i i++> printf("">。 /*1号前的星期补空格*/ while(j<=max> { printf("%6d",j>。 if(i%7==6> printf("\n">。 /*每7格换一行*/ i++。 j++。 } printf("\n\n">。 } voiddisplay1(intday>/*输出年历*/ {structtmwhen。 time_tnow,result。 char*a。 time(&now>。 when=*localtime(&now>。 printf("\n">。 printf("现在时间是%s\n",asctime(&when>>。 printf("查询距离时间是: ">。 when.tm_mday=when.tm_mday+day。 if((result=mktime(&when>>! =(time_t>-1> {a=asctime(&when>。 printf("%d天后时间是%s\n", day,a>。 }else perror("mktimefailed">。 } voiddisplay2(intyear,intmonth>/*输出月历*/ { printf("\n%d年%d月\n",year,month>。 display(year,month>。 } voiddisplay3(intyear,intmonth,intday>/*输出日历*/ { whatweek(year,month,day>。 jieri(month,day>。 counterdays(year,month,day>。 } intcounterdays(intyear,intmonth,intday>/*判断今天距特定日期的天数*/ { intyear1,days0,days1,month1,days,day1。 time_ttimep。 structtm*p。 time(&timep>。 p=gmtime(&timep>。 year1=(1900+p->tm_year>。 month1=(1+p->tm_mon>。 day1=(p->tm_mday>。 /*获取系统时间year1、month1、day1分别为年、月、日*/ days0=(year-1>*365+(year-1>/4-(year-1>/100+(year-1>/400+eachyeartotal(year,month,day>。 days1=(year1-1>*365+(year1-1>/4-(year1-1>/100+(year1-1>/400+eachyeartotal(year1,month1,day1>。 days=days0-days1。 /*计算出两个日期之间的时间差*/ printf("\n今天距%d年%d月%d日还有%d天\n\n",year,month,day,days>。 returndays。 } voidwhatweek(intyear,intmonth,intday>/*判断是星期几*/ { intnumber。 number=(year-1>+(year-1>/4-(year-1>/100+(year-1>/400+eachyeartotal(year,month,day>。 number=number%7。 switch(number> { case0: printf("\n%d年%d月%d日是星期日",year,month,day>。 break。 case1: printf("\n%d年%d月%d日是星期一",year,month,day>。 break。 case2: printf("\n%d年%d月%d日是星期二",year,month,day>。 break。 case3: printf("\n%d年%d月%d日是星期三",year,month,day>。 break。 case4: printf("\n%d年%d月%d日是星期四",year,month,day>。 break。 case5: printf("\n%d年%d月%d日是星期五",year,month,day>。 break。 case6: printf("\n%d年%d月%d日是星期六",year,month,day>。 break。 default: system("cls">。 printf("出现错误! \n">。 } } voidjieri(intmonth,intday>/*判断是否公历节日*/ { if(month==1> switch(day> { case1: printf(",这天是元旦">。 } if(month==2> switch(day> { case14: printf(",这天是情人节">。 } if(month==3> switch(day> { case8: printf(",这天是妇女节">。 break。 case12: printf(",这天是植树节">。 } if(month==4> switch(day> { case1: printf(",这天是愚人节">。 } if(month==5> switch(day> { case1: printf(",这天是劳动节">。 break。 case4: printf(",这天是青年节">。 } if(month==6> switch(day> { case1: printf(",这天是儿童节">。 } if(month==7> switch(day> { case1: printf(",这天是建党节">。 } if(month==8> switch(day> { case1: printf(",这天是建军节">。 break。 case23: printf(",今天是我的生日">。 } if(month==9> switch(day> { case10: printf(",这天是教师节">。 } if(month==10> switch(day> { case1: printf(",这天是国庆节">。 } if(month==12> switch(day> { case24: printf(",今天是平安夜">。 break。 case25: printf(",今天是圣诞节">。 } } voidsetDay1(intday>/*通过键盘返回主菜单*/ {chark。 getch(>。 k=getch(>。 system("cls">。 } voidsetDay2(intyear,intmonth,intday>/*通过键盘"←""→"控制月历的变换*/ { chark。 getch(>。 k=getch(>。 switch(k> { caseKEYNUMLeft: /*"←"月份变小*/ if(month<2> { month+=12。 year--。 } if(year<1> { system("cls">。 printf("警告! 超出范围! \n">。 break。 } month--。 display2(year,month>。 setDay2(year,month,day>。 break。 caseKEYNUMRight: /*"→"月份变小*/ if(month>11> { month-=12。 year++。 } if(year<9999>。 month++。 display2(year,month>。 setDay2(year,month,day>。 break。 default: system("cls">。 。 } } voidsetDay3(intyear,intmonth,intday>/*通过键盘"↑""↓"控制日期的变换*/ { chark。 getch(>。 k=getch(>。 switch(k> { caseKEYNUMUp: /*"↑"日期变小*/ if(day<2> { month--。 day=maxDay(year,month>。 } if(month<1> { month+=12。 year--。 } if(year<1> { system("cls">。 printf("警告! 超出范围! \n">。 break。 } day--。 display3(year,month,day>。 setDay3(year,month,day>。 break。 caseKEYNUMDown: /*"↓"日期变大*/ day++。 if(day>maxDay(year,month>> { day=1。 month++。 } if(month>12> { month-=12。 year++。 } if(year<10000>。 display3(year,month,day>。 setDay3(year,month,day>。 break。 default: system("cls">。 。 } } voidgetmenu(>/*显示菜单选择*/ {structtmwhen。 time_tnow,result。 intdays。 time(&now>。 when=*localtime(&now>。 printf("***************主菜单***************\n\n">。 printf("*欢迎进入万年历系统*\n\n">。 printf("*现在时间是*\n\n">。 printf("%s\n",asctime(&when>>。 printf("*1、日期查询*\n\n">。 printf("*2、月历查询*\n\n">。 printf("*3、日历查询*\n\n">。 printf("*4、退出系统*\n\n">。 printf("************************************\n\n">。 }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 语言 多功能