由日期得星期几C++课程设计报告书.docx

上传人:b****8 文档编号:23981916 上传时间:2023-05-23 格式:DOCX 页数:20 大小:72.15KB
下载 相关 举报
由日期得星期几C++课程设计报告书.docx_第1页
第1页 / 共20页
由日期得星期几C++课程设计报告书.docx_第2页
第2页 / 共20页
由日期得星期几C++课程设计报告书.docx_第3页
第3页 / 共20页
由日期得星期几C++课程设计报告书.docx_第4页
第4页 / 共20页
由日期得星期几C++课程设计报告书.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

由日期得星期几C++课程设计报告书.docx

《由日期得星期几C++课程设计报告书.docx》由会员分享,可在线阅读,更多相关《由日期得星期几C++课程设计报告书.docx(20页珍藏版)》请在冰豆网上搜索。

由日期得星期几C++课程设计报告书.docx

由日期得星期几C++课程设计报告书

河北联合大学

2011-2012第2学期

《软件设计基础-C++》

课程设计报告

设计名称:

由日期得星期几

姓名:

学号:

专业班级:

学院:

设计时间:

设计地点:

 

成绩:

指导教师评语:

 

指导教师签字:

年月日

目录

1.课程设计目的

2.课程设计任务与要求

3.课程设计说明书

4.课程设计成果

5.程序调试过程

6.设计问题的不足和改进方案

7.课程设计心得

8.参考文献

1.课程设计目的

 

《软件设计基础-C++》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。

目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。

 

2.课程设计任务与要求:

要求:

本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。

要求:

1、对系统进行功能需求分析

2、设计合理的数据结构和系统框架

3、编程简练,程序功能齐全,能正确运行

4、说明书、流程图要清楚

5、课题完成后必须按要求提交课程设计报告

任务:

1.基本要求:

(1)要求用模块化设计和C++的思想来完成程序的设计;

(2)培养上机动手能力,巩固分支结构和循环结构。

(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。

(4)程序调试通过后,完成程序文档的整理,加必要的注释。

2.创新要求

在完成本课题要求外,创新性提出算法设计,评分将把创造性、程序是否优美作为重要标准,总之,创造是此题目的重要方面。

4.书写设计报告的要求

设计报告中包含以下几个方面:

(1)设计题目

(2)总体设计

①概述所作系统的功能及用途

②用自顶而下或自底而上的方法,划分功能模块。

③确定各模块的算法

(3)根据算法画出模块图

(4)列出程序清单,并加以必要的注释

(5)写出调试程序的方法

(6)指出所设计问题的不足和改进方案

(7)总结本次设计的收获及心得

 

3.课程设计说明书

概要设计

★模块说明:

在我设计的程序中一共包含了五个模块,输入模块,数据校验模块,计算距离基准日期(2012-1-1)天数模块,计算星期模块,显示星期模块。

★模块结构图:

Main主函数

 

While控制循环语句(true)

 

计算星期模块

显示星期模块

输入模块

 

计算距离基准日期天数模块

数据校验模块

 

详细设计

★总体流程图:

Main主函数

 

While控制循环语句(true)

利用while(true)循环输入

 

计算星期模块

显示星期模块

输入模块

利用switch语句控制显示

利用getWeek函数求出星期

 

计算距离天数模块块

数据校验模块

利用validate函数校验数据

利用数组Const,枚举出平年与闰年各月的天数

利用isPrime函数,计算出时闰年还是平年

 

利用getDistanceDays函数

 

★各功能模块流程图:

输入模块

while(true)循环输入

 

校验模块

validate函数

 

isPrime

getDistanceDays函数

计算距离天数模块

getWeek函数

计算星期模块

显示星期模块

利用switch语句控制显示

4.课程设计成果

★程序源代码

#include

usingnamespacestd;

//闰年各月的天数

constintdaysOfPrimeMonths[]

={0,31,29,31,30,31,30,31,31,30,31,30,31};

//平年各月的天数

constintdaysOfUnPrimeMonths[]

={0,31,28,31,30,31,30,31,31,30,31,30,31};

/*

*判断year是否为闰年

*是闰年返回true,否则返回false

*/

boolisPrime(intyear)

{

return((0==year%400)||((0==year%4)&&(year%100!

=0)));

}

/*

*计算year/month/day距离2012/1/1的天数

*/

intgetDistanceDays(intyear,intmonth,intday)

{

intdistanceDays=0;

inti,j;

if(year<2012)//2012/1/1以前某天距离该天的天数

{

for(i=year+1;i<2012;i++)

{

if(isPrime(i))

{

distanceDays+=366;

}

else

{

distanceDays+=365;

}

}

boolbPrime=isPrime(year);

if(bPrime)

{

for(j=month+1;j<=12;j++)

{

distanceDays+=daysOfPrimeMonths[j];

}

distanceDays+=(daysOfPrimeMonths[month]-day+1);

}

else

{

for(j=month+1;j<=12;j++)

{

distanceDays+=daysOfUnPrimeMonths[j];

}

distanceDays+=(daysOfUnPrimeMonths[month]-day+1);

}

}

else//2012/1/1以后某天距离该天的天数

{

for(i=2012;i

{

if(isPrime(i))

{

distanceDays+=366;

}

else

{

distanceDays+=365;

}

}

if(isPrime(year))

{

for(j=1;j

{

distanceDays+=daysOfPrimeMonths[j];

}

distanceDays+=(day-1);

}

else

{

for(j=1;j

{

distanceDays+=daysOfUnPrimeMonths[j];

}

distanceDays+=(day-1);

}

}

returndistanceDays;

}

/*

*若month>12||month<1返回-1

*若day<1||day>该月天数返回-2

*否则返回0

*/

intvalidate(intyear,intmonth,intday)

{

if(month>12||month<1)

{

return-1;

}

else

{

if(day<1)

{

return-2;

}

else

{

intdaysOfMonth=0;

if(isPrime(year))

{

daysOfMonth=daysOfPrimeMonths[month];

}

else

{

daysOfMonth=daysOfUnPrimeMonths[month];

}

if(day>daysOfMonth)

{

return-2;

}

else

{

//donothing

}

}

}

return0;

}

 

/*

*返回year/month/day是星期几(1~7)

*若month>12||month<1返回-1

*若day<1||day>该月天数返回-2

*/

intgetWeek(intyear,intmonth,intday)

{

intflag=validate(year,month,day);

if(flag!

=0)//月份或天错误

{

returnflag;

}

else//格式正确

{

intweek=0;

intdistanceDays=getDistanceDays(year,month,day);

distanceDays%=7;//7天一个循环

if(year<2012)//求2012/1/1前的某天是星期几

{

//前面i(0<=i<=6)天,为星期7-i

return7-distanceDays;

}

else//求2012/1/1及以后某天

{

if(0==distanceDays)

{

return7;

}

else

{

returndistanceDays;

}

}

}

}

intmain()

{

intyear,month,day;

intweek;

while(true)//一直接收用户输入,CTRL+C终止程序运行

{

cout<<"Pleaseinputyear:

";

cin>>year;

cout<<"Pleaseinputmonth:

";

cin>>month;

cout<<"Pleaseinputday:

";

cin>>day;

week=getWeek(year,month,day);

switch(week)

{

case1:

{

cout<<"Monday"<

}break;

case2:

{

cout<<"Tuesday"<

}break;

case3:

{

cout<<"Wednesday"<

}break;

case4:

{

cout<<"Thursday"<

}break;

case5:

{

cout<<"Friday"<

}break;

case6:

{

cout<<"Saturday"<

}break;

case7:

{

cout<<"Sunday"<

}break;

case-1:

//月份错误(不在1~12之间)

{

cout<<"Monthshouldbein1and12"<

}break;

default:

//天错误(不在1~该月天数之间)

{

intdaysOfMonth=isPrime(year)?

daysOfPrimeMonths[month]:

daysOfUnPrimeMonths[month];

cout<<"Dayshouldbein1and"<

}break;

}

}

return0;

}

★运行结果:

:

5.程序调试过程

●程序调试步骤:

1编译,检查是否有语法错误,如果有,则点击错处,就会在程序中指出,根据提示进行修改。

没有的话进行链接,如此时出现错误很有可能是算法的错误,如若没有,则运行程序。

2根据提示,分别输入年、月、日。

若年月日都符合要求,则输出正确的星期;否则提示你相应的年月日的正确的范围是什么,根据提示再正确输入年月日。

●调试中遇到的问题:

1忽略每个月天数,若与本月的天数不相符,比如day>该月天数,或者day<1,系统不能报错,导致输出错误的星期。

2初始值定义2012-01-01为星期六,再计算2012-01-01以前距离该填的天数时,忘记应先在本月的基础上再加一个月后,计算出距离的天数,最后再加上改天距离本月末的天数,才为最终的距离天数。

3在算出distanceDays%=7,七天一循环后,所余的天数直接当做星期数(因为基准日期2012-01-01为周日),忽略了基准以前的日期,

6.设计问题的不足和改进方案:

不能实现农历日期想星期的转变,没有设计出MFC的界面使日期向星期的转化更加清晰直观,

 

7.课程设计心得:

(1)培养我们综合利用C++语言进行程序设计的能力,更好学习了while循环与ifelse的嵌套,还有数组的使用。

(2)培养独立思考的习惯,清楚的了解日期与星期的内在关系

(3)提高我们自学能力。

更好的利用图书馆资料解答问题。

8.参考文献

(1)《标准C++程序设计》牛连强编著人民邮电出版社

(2)《C++编程习题与答案》JchnRHubbard编著机械工业出版社

(3)《VisualC++程序设计基础(第二版柴欣张红梅编著中国铁道出版设

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1