C++课程设计(日历的实现).doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
万年历的C++实现 课程设计目的 编写具有以下功能的C++程序: (1)、输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 (2)、输入年月,输出该月的日历。 (3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 要求该程序能提供日历的一些基本功能,且方便管理和操作,易于扩充 需求分析 现在的软件市场的确有各种各样的日历软件可供我们选择,这些软件大多含有其他的一些的功能,真正方便快捷的日历软件却并不多,因此设计一个能真正服务大家的日历程序是有必要的。 设计思路 (1)、在屏幕上输出某一年的日历。 考虑到程序有三个主要功能模块,于是运用了类的相关知识,建立一个calendar.h的头文件。 由于程序提供1940年以后年份的服务,因此首先要确定1940年1月1号为星期几,然后以此为基准点确定该天以后的日历,对于功能(1),需要推出一个算法,如下:k的初值为2, test=((year-1940)/4*5+((year-1940)%4==0?0:((year-1940)%4+1)))%7+2; k=test%7==0?7:test%7;//k=0表示星期天,test为一中间变量, 用来确定1940年以后每一年的1月1号为星期几,这样更方便输出每一年的日历,而且在程序中的循环过程也大大提供程序运行的效率。因为在日历里面,星期是连续不断地,七天一循环,所以在整个程序里面需要定义一个变量代表星期,更加方便月与月之间的联系,由于需要用到函数,所以又把该变量定义指针变量,这样更加方便操作,在后面的程序,有许多的变量都需要通过指针来达到更加高效的操作,具体见程序源代码。 (2)、输入年月,在屏幕上输出该月的日历。 同上面一样,为了要方便输出某一月份的日历,就要先确定该月的第一天为星期几,这样才比较方便,这样有需要一个算法,如下: for(int m=1;m*ymonth;m++) for(int j=1;j=(m!=2?month_numble[m-1]:(*year%4==0?29:28));j++) { *k=*k%7; *k+=1; } for(int h=1;h*k;h++) cout\t; 以上算法是用在自定义函数里面,因此有些地方用到指针,而且在确定月份时,还要注意区别是否为闰年二月。 (3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。通过上面两个子程序就可以实现输入的这一天为星期几,至于是否为公历节日,只需事先录入一些公历节日的具体日期,然后再程序里通过if语句就可以实现。输出距离今天有多少天,这就需要这就需要程序能够读取系统时间,因此要用到windows.h头文件,而且这同样需要一个算法,如下: int year_num,ymonth_num=0,day_num=0,tyear_num,tmonth_num=0,tday_num=0,fomer_num,today_num; year_num=(*year-1940)/4*(366+365*3)+((*year-1940)%4==0?0:((*year-1940)%4*365+1)); for(int i=0;i*month1-1;i++) for(int j=1;j=(i!=1?month_numble[i]:(*year%4==0?29:28));j++) ymonth_num+=1; for(int i=1;i*day1;i++) day_num+=1; fomer_num=year_num+ymonth_num+day_num;//从1940年1月1号到这一天的天数 tyear_num=(sys.wYear-1940)/4*(366+365*3)+((sys.wYear-1940)%4==0?0:((sys.wYear-1940)%4*365+1)); for(int i=0;isys.wMonth-1;i++) for(int j=1;j=(i!=1?month_numble[i]:(sys.wYear%4==0?29:28));j++) tmonth_num+=1; for(int i=1;isys.wDay;i++) tday_num+=1; today_num=tyear_num+tmonth_num+tday_num;//从1940年1月1号到今天的天数 (具体请见程序源代码)。 在源里面为了满足功能模块的需要,选择了switch—case语句,并且采用可库函数exit(0),退出程序,是的程序更加方便操作。为了使程序在错误输入时不会崩溃,因此在功能模块选择时采用了ASCII码。 运行流程 程序源代码

文档评论(0)

2749166188 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档