c语言万年历Word格式文档下载.docx
《c语言万年历Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言万年历Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
“请输入要打印的年份(XXXX)”
运行后输出XXXX年的日历,
XXXX
X(月数)
xx
SMTWTFS
XXXXX
XXXXX
运行完成后显示:
“是否继续打印(Y/N)?
”
如果输入Y,则重新显示“请输入要打印的年份(XXXX)”,否则回到主菜单。
(4)在主菜单中输入4后,显示:
“是否要真的退出(Y/N)?
如果输入Y,结束程序运行,否则重新显示主菜单。
#include<
stdio.h>
stdlib.h>
typedefstruct{
intyear;
charmonth;
charday;
}*DATE;
DATENewDate(void);
intDestroyDate(DATEdate);
intDaysAMonth(DATEdate);
intCheckDate(DATEdate);
intSetDate(DATEdate,intyear,intmonth,intday);
intGetWeek(DATEdate);
intQueryDay(void);
intShowMonth(DATEdate);
intQueryMonth(void);
intQueryYear(void);
intConfirmExit(void);
intCalendar(void);
intmain()
{
if(Calendar())
return0;
else
return1;
}
DATENewDate(void)
DATEdate;
date=(DATE)malloc(sizeof(*date));
returndate;
intDestroyDate(DATEdate)
if(!
date)
free(date);
intDaysAMonth(DATEdate)
intdays;
switch(date->
month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case4:
case6:
case9:
case11:
days=30;
default:
days=0;
}
if(date->
month==2)
year%4==0&
&
date->
year%400!
=0||date->
year%400==0)
days=29;
days=28;
returndays;
intCheckDate(DATEdate)
month<
1||date->
month>
12)
day<
day>
DaysAMonth(date))
intSetDate(DATEdate,intyear,intmonth,intday)
year=year;
month=month;
day=day;
returnCheckDate(date);
intGetWeek(DATEdate)
intyear,month,day;
year=date->
year;
month=date->
month;
day=date->
day;
if(month<
=2)
month+=12;
--year;
return(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7+1;
intQueryDay(void)
charcont;
staticchar*week[]={"
星期一"
"
星期二"
星期三"
星期四"
星期五"
星期六"
星期日"
};
(date=NewDate()))
do{
printf("
请输入年月日(XXXX,XX,XX)"
);
scanf("
%d,%d,%d"
&
year,&
month,&
day);
if(SetDate(date,year,month,day))
%4d年%2d月%2d日是%s,是否继续查询(Y/N)?
"
\
year,month,day,week[GetWeek(date)-1]);
%c"
cont);
日期输入错误!
\n"
}while(cont=='
Y'
||cont=='
y'
DestroyDate(date);
intShowMonth(DATEdate)
intstartweek;
inti;
startweek=GetWeek(date);
days=DaysAMonth(date);
SMTWSFS\n"
startweek=startweek%7;
for(i=0;
i<
startweek;
++i)
"
for(i=1;
=days;
%2d"
i);
startweek=(startweek+1)%7;
if(startweek==0)
if(startweek!
=0)
intQueryMonth(void)
intyear,month;
请输入要打印的月份(XXXX,XX)"
%d,%d"
month);
if(SetDate(date,year,month,1))
%4d年%2d月\n"
year,month);
ShowMonth(date);
月份输入错误!
intQueryYear(void)
intmonth;
请输入要打印的年份(XXXX)"
%d"
year);
%4d年\n"
year);
for(month=1;
=12;
++month)
SetDate(date,year,month,1);
%2d月\n"
month);
是否继续打印(Y/N)?
intConfirmExit(void)
charexit;
是否要真的退出(Y/N)?
exit);
if(exit=='
||exit=='
)
intCalendar(void)
intmenu=1;
inttmp;
switch(menu)
\n|1查星期||2月日历||3年日历||4退出|:
tmp);
switch(tmp)
menu=11;
case2:
menu=12;
menu=13;
menu=14;
选择有误!
QueryDay();
menu=1;
QueryMonth();
case13:
QueryYear();
case14:
if(ConfirmExit())
menu=0;
}while(menu);