由日期得星期几C++课程设计报告书.docx
- 文档编号:10041659
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:20
- 大小:72.15KB
由日期得星期几C++课程设计报告书.docx
《由日期得星期几C++课程设计报告书.docx》由会员分享,可在线阅读,更多相关《由日期得星期几C++课程设计报告书.docx(20页珍藏版)》请在冰点文库上搜索。
由日期得星期几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++程序设计基础(第二版柴欣张红梅编著中国铁道出版设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日期 星期 C+ 课程设计 报告书
![提示](https://static.bingdoc.com/images/bang_tan.gif)