c语言程序设计电子日历Word文档下载推荐.docx
《c语言程序设计电子日历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言程序设计电子日历Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
当number=5时,指针指向星期五;
当number=6时,指针指向星期六;
当number不是上述数值时,指针指向错误。
x函数:
输出该天星期几,调用week1函数,将编号的值赋给number,调用*week2函数,根据number的值,确定指针指向,从而输出星期几,输出年,月,日,星期几。
显示月历,先输出星期日星期一星期二星期三星期四星期五星期六,星期日。
检验有效性,即当输入的年小于零、月小于一或大于十二、天大于该月最大值(调用day1函数)时将0返回给主函数,否则将1返回给主函数
nianli函数:
输出年历,先调用runnian函数,定义变量i,赋初值为1,利用for循环,循环十二次,调用x2函数,输出各个月的月历,从而显现出该年的每一天达到年历的效果。
yueli函数:
输出月历,先调用runnian函数,调用showmonth函数,输出该月月历。
rili函数:
输出日历,先调用函数,调用printmonth函数,输出该日日期。
二、功能实现详细设计:
输入选择---选择+回车键---输入相应信息+回车键---输出结果。
流程图如下:
退出
程序包含多个函数,分别为main函数、nianli函数、yueli函数、rili函数、nongli函数、printmonth函数、printyear函数、SelectMenu函数、HandleMenu函数、showmonth函数、week1函数、*week2函数、day1函数、day2函数。
通过函数间的调用,实现程序的运行。
详细程序
#include<
stdio.h>
stdlib.h>
voidnongli()
{intj;
printf("
\n\n\t\t\t\t2012年1月\n"
);
\n\t星期日星期一星期二星期三星期四星期五星期六\n\n"
for(j=1;
j<
=31;
j++)
{
printf("
\t%d"
j);
if(j==7||j==14||j==21||j==28)
printf("
\n"
if(j==7)
{
\t元旦\t初九\t初十\t十一\t十二\t十三\t十四\t\n"
}
if(j==14)
\t十五\t十六\t十七\t十八\t十九\t廿十\t廿一\t\n"
if(j==21)
\t廿二\t廿三\t廿四\t廿五\t廿六\t大寒\t廿八\t\n"
if(j==28)
\t廿九\t春节\t初二\t初三\t初四\t初五\t初六\t\n"
if(j==31)
\t初七\t初八\t初九\n"
}
}
voidprinttab(intn)
{
while(n>
0)
{
printf("
\t"
n--;
}
#include<
charMonthDay[]={31,28,31,30,31,30,31,31,30,31,30,31};
charMonthDayLeap[]={31,29,31,30,31,30,31,31,30,31,30,31};
char*WeekDayName[]={"
星期日"
"
星期一"
星期二"
星期三"
星期四"
星期五"
星期六"
};
chargetkey()
charc,s[10];
scanf("
%s"
s);
c=s[0];
returnc;
charisLeapYear(inty)
return((y%4==0&
&
y%100!
=0||y%400==0)?
1:
0);
intWeekDay(inty,intm,intd)
intweek;
if(m==1)m=13;
if(m==2)m=14;
week=(d+2*m+3*(m+2)/5+y+y/4-y/100+y/400)%7;
returnweek;
charqueryweekday()
inty,m,d,week,c=0;
do
请输入年月日(XXXXXXXX)\n"
%d%d%d"
&
y,&
m,&
d);
week=WeekDay(y,m,d);
%d年%d月%d日是星期%s,是否继续查询(Y/N)?
"
y,m,d,WeekDayName[week]);
c=getkey();
while(c=='
Y'
||c=='
y'
voidshowmonth(inty,intm)
intd,dt,week;
week=WeekDay(y,m,1);
if(isLeapYear(y))
dt=MonthDayLeap[(m-1)%12];
else
dt=MonthDay[(m-1)%12];
for(d=0;
d<
7;
d++)
\t%s"
WeekDayName[d]);
printtab(week);
for(d=1;
=dt;
\t%6d"
d);
if(WeekDay(y,m,d)==6)
charprintmonth()
inty,m,c=0;
请输入年月(XXXXXX)\n"
%d%d"
m);
printtab(3);
%d年\t%d月\n"
y,m);
showmonth(y,m);
是否继续查询(Y/N)?
charprintyear()
请输入年份(XXXX)\n"
%d"
y);
%d年年历\n"
y);
for(m=1;
m<
=12;
m++)
printtab(4);
%d月\n"
m);
\n是否继续查询(Y/N)?
voidquit()
\n\t谢谢使用该程序!
exit(0);
intSelectMenu()
intchoice;
\n\t******************************************************************\n"
4:
2014年1月的农历!
3:
某年日历!
2:
某月日历!
1:
根据日期查星期几!
0:
退出!
\t******************************************************************\n"
\t请选择菜单号(0---4):
while((!
(scanf("
choice)))||(choice<
0)||(choice>
4))
printf("
\n\t\t\a\a选择错误!
!
请重新选择:
某月日历\n"
returnchoice;
voidHandleMenu()
\t\t*****************欢迎使用该程序***************\n"
while
(1)
switch(SelectMenu())
{
case0:
quit();
break;
case1:
queryweekday();
case2:
printmonth();
case3:
printyear();
break;
case4:
nongli();
voidmain()
HandleMenu();
三、测试结果分析:
程序主界面:
四、用户手册:
可以根据界面的提示根据您的需要输入0.1.2或3.然后输入您要查的日期即可。
五、设计体会:
忙了好久总算将此程序设计出来。
尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,凭他们多年的编写程序的经验,要解决我们的问题,对他们来说只是小问题。
在设计这个程序时,我刚开始是根据老师给我提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了。
计算是个关键和难点,我们也查了相应的资料,最好这个计算问题解决了。
从这一个多星期的设计过程中,遇到了一些细节性的问题,比如在乱输入的情况下,有时会出现程序崩溃,后来通过修改,修正了漏洞。
到写报告为止,漏洞基本被找出,并得到修正。
通过写这个程序,我对程序的健壮性有了更深的认识,也更加注意程序的细节问题。
总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会。