C++语言课程设计报告书 万年历.docx
《C++语言课程设计报告书 万年历.docx》由会员分享,可在线阅读,更多相关《C++语言课程设计报告书 万年历.docx(32页珍藏版)》请在冰豆网上搜索。
C++语言课程设计报告书万年历
淮海工学院计算机工程学院
课程设计报告
设计名称:
C++课程设计
姓名:
白文吉
学号:
2011122453
专业班级:
计算机111班
系(院):
计算机工程学院
设计时间:
2012.6.21-2012.6.28
设计地点:
计算机工程学院机房、教室、学生宿舍、图书馆
成绩:
指导教师评语:
签名:
年月日
1.课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C++程序设计》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:
(1)巩固和加深学生对C++课程的基本知识的理解和掌握;
(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。
本次课程设计利用《C++程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,使学生能够独立完成所布置的任务。
2.课程设计任务与要求:
要求:
1)设计题目、设计要求以及系统功能需求分析;
2)总体设计:
包括模块说明、模块结构图和系统流程图;
3)详细设计:
包括主要功能模块的算法设计思路以及对应的工作流程图;
4)源程序代码及设计成果:
完整源程序清单和设计成果;
5)总结:
调试分析过程描述:
包括测试数据、测试输出结果以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等)包括课程设计过程中的学习体会与收获、对C++和本次课程设计的认识等内容.;
任务:
年历显示
功能要求:
(1)输入一个年份,输出是在屏幕上显示该年的日历。
假定输入的年份在1940-2040年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
3.课程设计说明书
概要设计
一、模块说明
在本次课程设计中,我主要设计了四大模块,分别是:
查询某年的日历、查询某年某月的日历、查询某年某月某日的信息以及返回。
在“查询某年某月某日的信息”这一模块中又分了三个小模块:
计算指定日期距今天的天数、计算指定日期是星期几、判断是否是公历节日。
四个大模块分别实现四个个功能,每一个模块都是一个函数,用switch语句调用,第三个模块中的三个小模块,每一个也都是一个函数,并列放在第三个大模块中构成第三个大模块。
为了实现界面操作,还运用了清屏和调用自身函数的方法。
二、模块结构图
三、系统流程图
详细设计
各功能模块设计思路及流程图:
第一个功能:
设计思路:
要想输出一年的日历,首先得解决输出一个月日历的问题,然后用循环输出十二个月份的。
首先提示由键盘输入要显示的年份,得到年份后开始进入循环,定义月份变量m,并赋初值为1(从一月份开始),第一步,进入md()函数判断月份的天数,然后根据进入week()函数根据年月计算出该月一号是星期几,此处用了蔡勒公式,然后输出月份和每周的表头,由循环空出一号前面空的部分,再由另一个循环,加上前面该月天数的判断,就能输出该月的日历,此时一个月的日历输出完毕,进入第二次循环,输出下一个月的日历,知道十二个月份的日历全部输出,循环结束,第一个功能实现。
流程图:
第二个功能
设计思路:
第二个功能是第一个功能的一部分,只需要输出一个月的日历,这是月份不是由1开始,而是由键盘输入的,日历输出方法与第一个功能中的方法相似。
流程图:
第三个功能
设计思路:
第三个功能里面其实包含三个小功能,先解决简单的两个。
第一个是判断这一天是星期几,由蔡勒公式计算,得到的余数是从0到6,0对应星期日,其他的正好对应,用switch语句,得到余数后,调用对应的输出语句输出。
第二个是判断是否是公历节日,用if、elseif语句,将月和日的数值与if后面括号里面的对照,判断其是否是公历节日。
第三个是要计算距今天多少天,我采用了一种类似比身高的方法,以元年1月1日为起点,分别计算输入的日期距起点的天数和系统日期距起点的天数,然后两个天数相减,得到的数值即是输入的日期距今天的天数,负数指今天前多少天;而要计算指定日期距元年1月1日的天数,又要分为两部分计算:
第一部分:
计算指定日期是该年的第几天
这个计算再分两块,一块是:
这一天所在月之前的几个月的天数之和;另一块是:
这一天是这个月的第几天,这个就是它的号数;两块相加。
第二部分:
计算指定日期这一年前的所有年份的天数之和
这个计算要用循环,因为有闰年和平年之分,所以每次加之前要先判断是否是闰年,然后确定这年是365天还是366天,最后在累加。
这两部分都算出来后相加。
这就需要将计算指定日期距元年1月1日的天数做成一个函数,然后将计算距今天多少天做成一个函数,在后者中调用前者计算。
流程图:
4.课程设计成果
第一部分:
源代码
#include
#include//文件输出
#include//清屏
#include//控制宽度
#include//这两个头文件是为了调用系统时间的
#include
usingnamespacestd;
intweek(inty,intm);//计算该月一号是星期几
voidprintweek();//输出每周表头
voidprintmonth(intm);//输出每月表头
intleep(inty);//判断该年是否闰年
intmd(inty,intm);//判断该月有多少天
//以下六个函数是第三个功能里的
intdays1(inty,intm,intd);//计算该天时这一年的第几天
intdays2(inty);//判断该年有多少天
intdays3(inty);//计算从元年到该之年前总天数
inttotaldays(inty,intm,intd);//计算指定日期距今天的天数
intfirst();//实现第一个功能
intsecond();//实现第二个功能
voidthird();//实现第三功能
voidjiemian1();//界面1
voidjiemian2();//界面2
intmain()
{
jiemian1();
return0;
}
voidjiemian1()
{
cout<cout<cout<cout<cout<cout<cout<system("pause");
system("cls");
jiemian2();
}
voidjiemian2()
{
cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<<"请输入您要使用的功能的序号(回车键确认):
";
intn;
cin>>n;
system("cls");
switch(n)
{
case1:
first();break;
case2:
second();break;
case3:
third();break;
case4:
jiemian1();break;
}
cout<cout<<"点任意键返回主菜单"<system("pause");
system("cls");
jiemian2();
}
intfirst()//第一个功能
{
ofstreamoutfile("第一个功能.txt",ios:
:
out);//定义文件流对象
inty,m,w,d,i,day;
cout<<"请输入你要查询的年份:
";
cin>>y;
cout<<"您所查询的内容如下:
"<cout<cout<outfile<for(m=1;m<=12;m++)
{
intm1,y1;
m1=m;
y1=y;
if(m1<3)
{
m1+=12;
y1--;
}
w=week(y1,m1);//计算该月一号是星期几
day=md(y,m);//判断该月有多少天
printmonth(m);//输出月份表头
outfile<printweek();//输出每周表头
outfile<setw(8)<<"Thurs"<//输出到文件
for(i=0;i{
cout<outfile<}
for(d=1;d<=day;d++,w++)//输出该月的日历
{
cout<outfile<if(w%7==6)
{
cout<outfile<}
}
cout<cout<cout<outfile<}
outfile.close();//关闭文件
return0;
}
intsecond()//第二个功能
{
ofstreamoutfile("第二个功能.txt",ios:
:
out);
inty,m,w,d,i,day;
cout<<"请输入你要查询的年月:
";
cin>>y>>m;
cout<<"您所查询的内容如下:
"<w=week(y,m);
day=md(y,m);
cout<cout<outfile<printweek();
outfile<setw(8)<<"Thurs"<//输出到文件
for(i=0;i{
cout<outfile<}
for(d=1;d<=day;d++,w++)
{
cout<outfile<if(w%7==6)
{
cout<outfile<}
}
cout<outfile<return0;
}
voidthird()//第三个功能
{
ofstreamoutfile("第三个功能.txt",ios:
:
out);
inty,m,d,n;
cout<<"请输入您要查询的年月日:
";
cin>>y>>m>>d;
cout<<"您所查询的内容如下:
"<cout<n=totaldays(y,m,d);//计算指定日期距今天的天数
outfile<<"距离今天还有"<cout<outfile<intw1;
w1=(y+y/4+5-42+26*(m+1)/10+d)%7;
switch(w1)
{
case0:
{
cout<<"这一天是星期日"<outfile<<"这一天是星期日"<break;
}
case1:
{
cout<<"这一天是星期一"<outfile<<"这一天是星期一"<break;
}
case2:
{
cout<<"这一天是星期二"<outfile<<"这一天是星期二"<break;
}
case3:
{
cout<<"这一天是星期三"<outfile<<"这一天是星期三"<break;
}
case4:
{
cout<<"这一天是星期四"<outfile<<"这一天是星期四"<break;
}
case5:
{
cout<<"这一天是星期五"<outfile<<"这一天是星期五"<break;
}
case6:
{
cout<<"这一天是星期六"<outfile<<"这一天是星期六"<break;
}
}
cout<outfile<if(m==1&&d==1)
{
cout<<"这一天是元旦节"<outfile<<"这一天是元旦节"<}
elseif(m==2&&d==14)
{
cout<<"这一天是情人节"<outfile<<"这一天是情人节"<}
elseif(m==3&&d==8)
{
cout<<"这一天是国际妇女节"<outfile<<"这一天是国际妇女节"<}
elseif(m==3&&d==12)
{
cout<<"这一天是中国植树节"<outfile<<"这一天是中国植树节"<}
elseif(m==3&&d==14)
{
cout<<"这一天是白色情人节"<outfile<<"这一天是白色情人节"<}
elseif(m==3&&d==15)
{
cout<<"这一天是世界消费者权益日"<outfile<<"这一天是世界消费者权益日"<}
elseif(m==3&&d==22)
{
cout<<"这一天是世界水日"<outfile<<"这一天是世界水日"<}
elseif(m==4&&d==1)
{
cout<<"这一天是愚人节"<outfile<<"这一天是愚人节"<}
elseif(m==5&&d==1)
{
cout<<"这一天是国际劳动节"<outfile<<"这一天是国际劳动节"<}
elseif(m==5&&d==4)
{
cout<<"这一天是中国青年节"<outfile<<"这一天是中国青年节"<}
elseif(m==6&&d==1)
{
cout<<"这一天是国际儿童节"<outfile<<"这一天是国际儿童节"<}
elseif(m==7&&d==1)
{
cout<<"这一天是中国共产党诞生日"<outfile<<"这一天是中国共产党诞生日"<}
elseif(m==8&&d==1)
{
cout<<"这一天是中国人民解放军建军节"<outfile<<"这一天是中国人民解放军建军节"<}
elseif(m==9&&d==10)
{
cout<<"这一天是中国教师节"<outfile<<"这一天是中国教师节"<}
elseif(m==10&&d==1)
{
cout<<"这一天是中华人民共和国国庆节"<outfile<<"这一天是中华人民共和国国庆节"<}
elseif(m==10&&d==31)
{
cout<<"这一天是万圣节"<outfile<<"这一天是万圣节"<}
elseif(m==12&&d==25)
{
cout<<"这一天是圣诞节"<outfile<<"这一天是圣诞节"<}
else
{
cout<<"这一天没有公历节日"<outfile<<"这一天没有公历节日"<}
cout<outfile<}
intweek(inty,intm)
{
intw;
w=(y+y/4+5-42+26*(m+1)/10+1)%7;
return(w);
}
voidprintweek()
{
cout<<<"Thurs"<}
voidprintmonth(intm)
{
switch(m)
{
case1:
cout<<"1月份"<case2:
cout<<"2月份"<case3:
cout<<"3月份"<case4:
cout<<"4月份"<case5:
cout<<"5月份"<case6:
cout<<"6月份"<case7:
cout<<"7月份"<case8:
cout<<"8月份"<case9:
cout<<"9月份"<case10:
cout<<"10月份"<case11:
cout<<"11月份"<case12:
cout<<"12月份"<