显示年历C++课程设计报告.docx
《显示年历C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《显示年历C++课程设计报告.docx(17页珍藏版)》请在冰点文库上搜索。
显示年历C++课程设计报告
一、设计任务,目的与要求
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.程序运行测试:
在电脑中打开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号键功能:
退出程序。
四、源代码
#include
#include
usingnamespacestd;
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;i{
if(IsLeap(i))sum+=366;
elsesum+=365;
}
if(IsLeap(year))dayofmonth[2]=29;//为闰年时二月有29天
for(i=1;isum+=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<<"请输入要查找的年份;
cin>>year;
cout<<"========================TheCalenderofYear"<inti=1;
for(i=1;i<=12/3;i++)//3确定每一行显示三个月的月历
{
cout<<"--------------------------------------------------------------------------"<for(inth=1;h<=3;h++)
{
intm=3*(i-1)+h;
cout<<""<}
cout<for(intj=0;j<3;j++)
cout<<"Su"<<"Mo"<<"Tu"<<"We"<<"Th"<<"Fr"<<"Sa"<<"";
cout<for(intj=0;j<3;j++)
{
month=3*(i-1)+j+1;
s=getdays(year,month,1);//计算从年月日起到所查找¨年每月第Ì天一共有多少¦天
s=s%7;
for(intm=0;m
if(IsLeap(year))dayofmonth[2]=29;
b[j]=dayofmonth[month];
for(intk=1;k<8-s;)//由1开始打印每月月历第一行
{
cout<(2)<k++;
a[j]=k;
}
cout<<"";
}
cout<for(intw=1;w<=5;w++)//打印每月月历其余行
{
for(intj=0;j<3;j++)
{
intm=1;
for(m=1;m<=7;m++,a[j]++)
{
if(a[j]>b[j])break;
cout<(2)<if(m==7)cout<<"";
}
for(intn=1;a[j]>b[j],n<=8-m;n++)
cout<<"";
if(a[j]>b[j]&&m!
=8)cout<<"";
}
cout<}
}
cout<<"============================================================================"<}
//打印某3月的月历
voidprintfmonth(intyear,intmonth,intday)
{
system("cls");
inti,s;
s=getdays(year,month,1);//计算从1年1月1日起到所查找月第一天一共有多少¦天
s=s%7;
cout<<"=========="<"<<"========="<cout<<"Sun\tMon\tTue\tWed\tThu\tFri\tSat\n";//
for(i=0;i
cout<<'\t';
if(s==6)
cout.put('\n');
for(i=1;i<=dayofmonth[month];++i)
{
if(i==day)cout<<"★"<
else
cout<
if((i+s)%7==0)
cout<<'\n';
}
cout<cout<<"=========================="<}
//查找某一天
voidlookday(intyear,intmonth,intday)
{
system("cls");
ints,y,m,d,h,min,sec,S,sum;
s=getdays(year,month,day);//计算从年月日起到查找日一共有多少´天¬
sum=s%7;
printfmonth(year,month,day);//打印查找日所在月的月历并标识出该天
cout<switch(sum)//判断所查找天是星期几
{
case0:
cout<<"Sunday"<case1:
cout<<"Monday"<case2:
cout<<"Tuesday"<case3:
cout<<"Wednesday"<case4:
cout<<"Thursday"<case5:
cout<<"Friday"<case6:
cout<<"Saturday"<}
switch(month)//判断查找天是否阳历节日先由月份判断是否有节日的月份再由日判断是否为节日
{
case1:
switch(day)
{
case1:
cout<<"元旦(Newyear'sday)"<default:
cout<<"不是阳历节日"<}break;
case3:
switch(day)
{
case8:
cout<<"妇女节¨(Women'sDay)"<case12:
cout<<"植树节(ArborDay)"<default:
cout<<"不是阳历节日"<}break;
case5:
switch(day)
{
case1:
cout<<"劳动节(LaborDay)"<case4:
cout<<"中国青年节(ChineseYouthDay)"<default:
cout<<"不是阳历节日"<}break;
case6:
switch(day)
{
case1:
cout<<"儿童节(Children'sDay)"<default:
cout<<"不是阳历节日"<}break;
case8:
switch(day)
{
case1:
cout<<"建军节(theArmy'sDay)"<default:
cout<<"不是阳历节日"<}break;
case9:
switch(day)
{
case10:
cout<<"教师|节(Teacher'sDay)"<default:
cout<<"不是阳历节日¨"<}break;
case10:
switch(day)
{
case1:
cout<<"国庆节(NationalDay)"<default:
cout<<"不是阳历节日"<}break;
default:
cout<<"不是阳历节¨日"<}
S=Initdate(y,m,d,h,min,sec);//计算从1年1月1日起到现在一共2有多少天¬¨¬
//计算查找日距今有多少天
if(S
cout<<"距今还有"<else
cout<<"已经过去"<}
//主函数显示程序菜单
intmain()
{
intchoice,year,month,day;
for(;1;)//显示程序菜单,为永真,每次查找完回到程序菜单Ì
{
cout<<"===================================菜单选项==================================="<cout<<"请选择:
"<cout<<"********1.查找某一年的年历********"<cout<<"********2.查找某一月的月历********"<cout<<"********3.查找某一天********"<cout<<"********0.退出********"<cout<<"=============================================================================="<cin>>choice;
if(choice==1)printyear();//选择1,查找¨某年年历
elseif(choice==2)//选择,查找某月月历
{intday=0;
cout<<"请输入要查找的年月(格式如¨201212):
";
cin>>year>>month;
if(month>12)//判断输入的年月是否存在,不存在提示重新输入
cout<<"输入的年月不存在,请重新输入"<elseprintfmonth(year,month,day);//输入的年月存在,查找某月月历¤¨²
}
elseif(choice==3)//选择,查找某天
{
cout<<"请输入要查找的日期(格式如20121231):
"<cin>>year>>month>>day;
//判断输入的年月日是否存在,不存在提示重新输入,存在则查找
if(month>12)cout<<"输入的月份不存在,请重新输入!
"<else
switch(month)
{
case4:
case6:
case9:
case11:
//4,6,9,11月有30天
{
if(day>=1&&day<=30)lookday(year,month,day);
elsecout<<"输入的日期不存在,请重新输入!
"<}break;
case2:
{
if(IsLeap(year))//闰年时二月有29天
{
if(day>=1&&day<=29)lookday(year,month,day);
elsecout<<"输入的日期不存在,请重新输入!
"<}
elseif(day>=1&&day<=28)//非闰年时二月有28天
lookday(year,month,day);
elsecout<<"输入的日期¨存在,请重新输入!
"<}break;
default:
//1,3,5,7,8,10,12月有31天
{
if(day>=1&&day<=31)lookday(year,month,day);
elsecout<<"输入的日期不存在,请重新输入!
"<}
}
}
elseif(choice==0)//选择,退ª出
{
cout<<"谢谢使用!
"<elsecout<<"输入错误!
请按照提示输入!
"<}
}