用c++编写计算日期的函数

用c++编写计算日期的函数

ID:33808576

大小:270.83 KB

页数:6页

时间:2019-03-01

用c++编写计算日期的函数_第1页
用c++编写计算日期的函数_第2页
用c++编写计算日期的函数_第3页
用c++编写计算日期的函数_第4页
用c++编写计算日期的函数_第5页
资源描述:

《用c++编写计算日期的函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、14.1分解与抽象人类解决复杂问题采用的主要策略是“分而治之”,也就是对问题进行分解,然后分别解决各个子问题。著名的计算机科学家Parnas认为,巧妙的分解系统可以有效地系统的状态空间,降低软件系统的复杂性所带来的影响。对于复杂的软件系统,可以逐个将它分解为越来越小的组成部分,直至不能分解为止。这样在小的分解层次上,人就很容易理解并实现了。当所有小的问题解决完毕,整个大的系统也就解决完毕了。在分解过程中会分解出很多类似的小问题,他们的解决方式是一样的,因而可以把这些小问题,抽象出来,只需要给出一个实现即可,凡是需要用到该问题时直接使用即可。案例日期运算给定日期由年、月、

2、日(三个整数,年的取值在1970-2050之间)组成,完成以下功能:(1)判断给定日期的合法性;(2)计算两个日期相差的天数;(3)计算一个日期加上一个整数后对应的日期;(4)计算一个日期减去一个整数后对应的日期;(5)计算一个日期是星期几。针对这个问题,很自然想到本例分解为5个模块,如图14.1所示。图14.1日期计算功能分解图仔细分析每一个模块的功能的具体流程:1.判断给定日期的合法性:首先判断给定年份是否位于1970到2050之间。然后判断给定月份是否在1到12之间。最后判定日的合法性。判定日的合法性与月份有关,还涉及到闰年问题。当月份为1、3、5、7、8、10、

3、12时,日的有效范围为1到31;当月份为4、6、9、11时,日的有效范围为1到30;当月份为2时,若年为闰年,日的有效范围为1到29;当月份为2时,若年不为闰年,日的有效范围为1到28。图14.2日期合法性判定盒图判断日期合法性要要用到判断年份是否为闰年,在图14.2中并未给出实现方法,在图14.3中给出。图14.3闰年判定盒图2.计算两个日期相差的天数计算日期A(yearA、monthA、dayA)和日期B(yearB、monthB、dayB)相差天数,假定A小于B并且A和B不在同一年份,很自然想到把天数分成3段:2.1A日期到A所在年份12月31日的天数;2.2A之

4、后到B之前的整年的天数(A、B相邻年份这部分没有);2.3B日期所在年份1月1日到B日期的天数。图14.4日期差分段计算图若A小于B并且A和B在同一年份,直接在年内计算。2.1和2.3都是计算年内的一段时间,并且涉及到闰年问题。2.2计算整年比较容易,但是也要涉及到闰年问题。这里先不讨论具体流程,分析完下面几个模块后再讨论。3.计算一个日期加上一个整数天数后对应的日期计算日期A(yearA、monthA、dayA)加上一个整数天数days对应的日期,若days小于A日期到A所在年份12月31日的天数则对应结果日期在本年中计算,yearA不变。否则yearA加days。若

5、天数剩下的的部分够整年(闰年问题),则循环yearA加days;days去掉一年天数;对days剩下的不够一年的天数,在该年计算对应日期。图14.5日期加整数分段计算图4.计算一个日期减去一个整数天数后对应的日期计算日期A(yearA、monthA、dayA)减去一个整数天数days对应的日期,若days小于A所在年份1月1日到A日期的天数则对应结果日期在本年中计算,yearA不变。否则yearA减1。若days剩下的的部分够整年(闰年问题),则循环yearA减1;days去掉一年天数;对days剩下的不够一年的天数,在该年计算对应日期。图14.6日期减整数分段计算图5

6、.计算一个日期是星期几计算日期A(yearA、monthA、dayA)为星期几,需要找到一个参照的日期B,只需要知道日期B为星期几,然后计算出A和B相差的天数,就很容易计算出A为星期几。此处又需要用到计算两个日期的差。通过上述分析,发现到处都在计算一段日期天数,这种一段日期天数分为3种:年内1月1日到某日期的天数(年内的前半段);年内某日期到12月31日的天数(年内的后半段);整年的天数。只有整年天数容易计算,其他两种较为复杂,能不能回避呢?对于日期A和B的差,可以选定日期C(1970年1月1日),计算C到A的天数CA,再计算C到B的天数CB,则CB减CA为A到B的天数

7、。而对C到A,只需要计算整年(因为C为1月1日)加上A的年内前半段,C到B同理。这样就回避掉了计算年内后半段的问题。把从选定日期C(1970年1月1日)到某日期A的天数用函数dateToDays(A)来描述,有了该函数,则问题2和5都很容易解决了。对于问题3和4,可以把日期A通过dateToDays函数转化为天数,再加减一个整数,变成一个新的天数,只需要再定义一个函数daysToDate(days)把天数转换为从1970年1月1日经过该天数对应的日期即可。daysToDate函数也只需要处理若干整年(因为从1970年1月1日起)和结果年份

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。