....目录一、设计任务,目的与要求.....................................................21.设计内容:......................................................................22.设计目的:......................................................................23.设计要求:......................................................................2二、概要设计...........................................................................21.需求分析:......................................................................22.设计流程:......................................................................31设计要求:.................................................................32总体设计:.................................................................4三、运行结果及分析................................................................61.程序运行测试:...............................................................62.进入程序菜单:...............................................................63.1号键功能:...................................................................63.2号键功能:...................................................................74.3号键功能:...................................................................85.0号键功能:...................................................................8四、源代码………………………………………………………..8....一、设计任务,目的与要求1.设计内容:年历显示功能要求:1.输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2.输入年月,输出该月的日历。3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。2.设计目的:本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言C++(或C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:1.巩固和加深学生对C++(或C)语言课程的基本知识的理解和掌握2.掌握C++(或C)语言编程和程序调试的基本技能3.利用C++(或C)语言进行基本的软件设计4.掌握书写程序设计说明文档的能力5.提高运用C++(或C)语言解决实际问题的能力3.设计要求:1.分析课程设计题目的要求2.写出详细设计说明3.编写程序代码,调试程序使其能正确运行4.设计完成的软件要便于操作和使用5.设计完成后提交课程设计报告及程序代码二、概要设计1.需求分析:目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。然而,这些程序都是千遍一律....的局限于一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C++程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便,是一种比较实用的小工具。给人的需求性很大,学生在做此万年历课程设计的同时,能够认识到C++编程给人带来的便捷,也能够清楚万历年表编程的出入。对培养学生的创新能力和动手能力具有很大的作用。2.设计流程:1设计要求:(1)程序运行时,首先给4出个菜单选项的内容和输入提示:1显示某一年的日历2显示某一月的月历3查找某一天0退出(2)用户可以通过主菜单选择不同的选项:若选择1,则通过输入年份,显示输出该年每个月的日历;若选择2,则通过输入年月,显示输出该月的日历;若选择3,则通过输入年月日,输出该天所在月的月历、该天是星期几、是否阳....历节日、距今多少天;若选择0,则退出。2总体设计:....(流程图)依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,选择1,进入年历显示阶段,年历显示完毕,再次进入菜单选择。选择2,进入月历显示阶段,月历显示完毕,再次进入菜单选择。选择3,进入日期查询阶段,日期查询完毕,再次进入菜单。选择0,退出程序。据输入的年份打印该年的年历据输入的年月打印该月的月历据输入的日期打印该天所在月的月历并判断是否阳历节日退出1.显示一年的年历2.显示一月的月历3.查找一天0.退出显示年历、月历或查找结果进入程序....三、运行结果及分析1.程序运行测试:在电脑中打开C++应用程序,首先进入VC++6.0,将程序代码输入,编译,组建,调试。观察运行结果,和各个功能情况。2.进入程序菜单:(图1:菜单页面)说明:该页面表示进入菜单选项,根据选项进入相应的功能。3.1号键功能:输入1,按enter键后:输入要显示的年份:2013....(图2,显示2013年年历查询结果)3.2号键功能:输入2按enter键后:输入年月,例如20131(图3,2013年1月月历查询结果)....4.3号键功能:输入3按enter键后:输入年月日,如301311(图4,2013年1月1查询结果)显示查询天所在月月历,并标识出该天,同时显示是否阳历节日,距今多少天。5.0号键功能:退出程序。四、源代码#includeiostream#includeiomanipusingnamespacestd;intdayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义全¨局变量,每月的天数//函数IsLeap判断是否为闰¨年boolIsLeap(intyear){if(year%400==0||(year%100!=0&&year%4==0))return1;elsereturn0;}//函数getdays计算从1年1月1日起到输入日一共有多少天....intgetdays(intyear,intmonth,intday){inti,sum=0;for(i=1;iyear;i++){if(IsLeap(i))sum+=366;elsesum+=365;}if(IsLeap(year))dayofmonth[2]=29;//为闰年时二月有29天for(i=1;imonth;i++)sum+=dayofmonth[i];sum+=day;returnsum;}//函数Initdate获得现在的时间intInitdate(int&y,int&m,int&d,int&h,int&min,int&sec){intsum;time_tt;time(&t);structtm*local_time=localtime(&t);sec=local_time-tm_sec;min=local_time-tm_min;h=local_time-tm_hour;d=local_time-tm_mday;m=local_time-tm_mon+1;y=local_time-tm_year+1900;sum=getdays(y,m,d);returnsum;}//打印一年的年历voidprintyear(){system(cls);ints,year,month;inta[10],b[10];cout请输入要查找的年份;cinyear;cout========================TheCalenderofYearyear=========================endl;inti=1;for(i=1;i=12/3;i++)//3确定每一行显示三个月的月历{cout--------------------------------------------------------------------------endl;for(inth=1;h=3;h++)....{intm=3*(i-1)+h;coutm月;//打印月份名称}coutendl--------------------------------------------------------------------------endl;for(intj=0;j3;j++)coutSuMoTuWeThFrSa;coutendl;for(intj=0;j3;j++){month=3*(i-1)+j+1;s=getdays(year,month,1);//计算从年月日起到所查找¨年每月第Ì天一共有多少¦天s=s%7;for(intm=0;ms;m++)cout;//每月第一天之前打印空格if(IsLeap(year))dayofmonth[2]=29;b[j]=dayofmonth[month];for(intk=1;k8-s;)//由1开始打印每月月历第一行{coutsetw(2)setfill('')k;k++;a[j]=k;}cout;}coutendl;for(intw=1;w=5;w++)//打印每月月历其余行{for(intj=0;j3;j++){intm=1;for(m=1;m=7;m++,a[j]++){if(a[j]b[j])break;coutsetw(2)setfill('')a[j];if(m==7)cout;}for(intn=1;a[j]b[j],n=8-m;n++)cout;if(a[j]b[j]&&m!=8)cout;}coutendl;}}....cout============================================================================endl;}//打印某3月的月历voidprintfmonth(intyear,intmonth,intday){system(cls);inti,s;s=getdays(year,month,1);//计算从1年1月1日起到所查找月第一天一共有多少¦天s=s%7;cout==========year年¨ºmonth月?=========endl;coutSun\tMon\tTue\tWed\tThu\tFri\tSat\n;//for(i=0;is;++i)cout'\t';if(s==6)cout.put('\n');for(i=1;i=dayo