文档介绍:枣庄学院
信息科学与工程学院课程设计任务书
题目: 万年历的设计与实现
姓名: ******
学号: ************
专业:计算机科学与技术
班级: 2009级本2班
课程: c++程序设计
指导教师:
完成时间: 2011年 12 月----2011年 12 月
枣庄学院信息科学与工程学院制
2011年12 月20日
课程设计任务书及成绩评定
课程设计的任务和具体要求
任务:学习和掌握C++程序设计方法以及上机调试技巧,培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。
具体要求:
本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。
设计一个万年历, 输入一个日期如:1980-05-25,要求:
计算出该日是星期几,
重载“+”操作,当万年历对象加一个天数时,生成一个新的万年历对象,注意满足交换律
重载“-”操作,当两个万年历对象相减时,获得其对象相差的天数
重载“==”,判断两万年历对象是否相等
指导教师签字: 、日期:
指导教师评语
成绩:____________ 指导教师签字: 日期:
指导教师评语
成绩:____________ 指导教师签字: 日期:
课程设计所需软件、硬件等
硬件环境:Iterl(R) Core(TM)2 Duo CPU,;内存3G;
硬盘320G以上;1024×768显示分辨率
软件环境: visual c++
课程设计进度计划
起至日期
工作内容
备注
到
设计一个万年历
使之输出相应的日期, 包括年月日
运用visualc++
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
[1] c++程序设计(第二版) 谭浩强编著清华大学出版社
:
万年历
总体设计:
计算星期
日期重载+ 主函数日期重载-
日期重载=
设计方案
计算星期函数:
要知道计算星期的公式,这可以在网上找到公式 W=(((C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;
其中:C=year/100即为年时的前两位数,y=year%100即为年数的后两位数,month为输入日期的月份,day为输入日期的天数。W为除以7后的余数,以为一个星期有7天。当余数为0是是星期天,为1时是星期一......为6是则为星期六。计算星期函数不需考虑闰年和平年的问题所以十分容易处理。
日期重载+函数:
日期重载+函数就相对比较麻烦,首先就是闰年平年的问题,其次就是各个月份天数的不同问题。对于天数的处理,我选择了有数组来保存各月天数。对于闰年和平年则选择再在日期重载+函数中在分两函数,分别处理闰年和平年。
日期重载==函数:
日期重载==函数就更好处理了,只要判断年月日相等就可以了。所以只要用bool类型重载就行( bool operator == (const CDate &dt1)const;),返回值为ture则说明相等,为false时则说明两日期不相等。
日期重载-函数:
日期重载-函数是最难处理的,要使两个日期相减得到相差的天数,还得用到重载-,而且重载-时两个类CDate dt相减返回的是一个int整形数值,所以是比较困难的。我在调试中将详细说明我所遇到的困难。现在我就简单的说明一下我的思路。输入两个日期,分别计算出它们到公元元年元月1日的天数,再将两天数相减,就得到两日期的天数差。计算输入日期到公元元年元月1日的天数得公式:
D=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+D1+day;
其中D即为天数,year为年份,D1为输入月份以前的几个月的天数和,day为输入的日期。
详细设计
共有五个模块:(1)计算星期模块;(2)日期重载+模块;(3)日期重载==模块;(4)日期重载-模块;(5)退出模块;
(1)计算星期模块:
主要功能:当输入一个日期是,计算出输入的日期是星期几。如图:
计算出2011年6月23日为星期四。
主要使用技术:
由于公式的要求,if(month==1||month==2) {month+=12; --year; }
当月份为1月或2月份时,月份要加12,即1月为13月,2月为14月,而年数则要减1,如2001年1月12日,1月要用13月来计算,年份2001年则用2000来计