ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:46.36KB ,
资源ID:27169251      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27169251.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++课程设计日历的实现.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++课程设计日历的实现.docx

1、C+课程设计日历的实现万年历的C+实现1、 课程设计目的编写具有以下功能的C+程序:(1)、输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。(2)、输入年月,输出该月的日历。(3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。要求该程序能提供日历的一些基本功能,且方便管理和操作,易于扩充2、 需求分析现在的软件市场的确有各种各样的日历软件可供我们选择,这些软件大多含有其他的一些的功能,真正方便快捷的日历软件却并不多,因此设计一个能真正服务大家的日历程序是有必要的。3、 设计思路(1)、在屏幕上输出某一年的日历。考虑到程序有三个主要功能模块,于

2、是运用了类的相关知识,建立一个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号为星期几,这样更方便输出每一年的日历,而且在程序中的循环过程也大大提供程序运行的效率。因为在日历里面,星期是连续不断地,七天一循环

3、,所以在整个程序里面需要定义一个变量代表星期,更加方便月与月之间的联系,由于需要用到函数,所以又把该变量定义指针变量,这样更加方便操作,在后面的程序,有许多的变量都需要通过指针来达到更加高效的操作,具体见程序源代码。(2)、输入年月,在屏幕上输出该月的日历。同上面一样,为了要方便输出某一月份的日历,就要先确定该月的第一天为星期几,这样才比较方便,这样有需要一个算法,如下:for(int m=1;m*ymonth;m+) for(int j=1;j=(m!=2?month_numblem-1:(*year%4=0?29:28);j+) *k=*k%7; *k+=1; for(int h=1;h*

4、k;h+) coutt;以上算法是用在自定义函数里面,因此有些地方用到指针,而且在确定月份时,还要注意区别是否为闰年二月。(3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。通过上面两个子程序就可以实现输入的这一天为星期几,至于是否为公历节日,只需事先录入一些公历节日的具体日期,然后再程序里通过if语句就可以实现。输出距离今天有多少天,这就需要这就需要程序能够读取系统时间,因此要用到windows.h头文件,而且这同样需要一个算法,如下: int year_num,ymonth_num=0,day_num=0,tyear_num,tmonth_num=0,tday_num=0,f

5、omer_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_numblei:(*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=(s

6、ys.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_numblei:(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号到今天的天数(具体请见程序源代码)。在源里面为了满足

7、功能模块的需要,选择了switchcase语句,并且采用可库函数exit(0),退出程序,是的程序更加方便操作。为了使程序在错误输入时不会崩溃,因此在功能模块选择时采用了ASCII码。4、 运行流程进入程序 5、 程序源代码 Calendar.h#includeiostream#includewindows.h/获取系统时间#includestringvoid year();void ymonth();void day();万年历.cpp#includecalendar.husing namespace std;void main()char menu_choose();while(1)int

8、 choice=menu_choose()-48;switch(choice)case 1:year(); break;case 2:ymonth();break;case 3:day(); break;case 4:exit(0); /退出程序char menu_choose()char choice;cout1.输出该年日历n;cout2.输出该年该月的日历n;cout3.输出距离今天还有多少天,为星期几,是否为公历节日n;cout4.退出程序n;coutchoice;if(choice+0)=49&(choice+0)=52)break;elsecout输入的数字有误,请重新输入14:;

9、return choice;Year.cpp#includecalendar.h/#includeusing namespace std;void yue(int i,int*k,int*month_numble,int*year);void year()int year;while(1)coutyear;if(year=1940)int month_numble12=31,29,31,30,31,30,31,31,30,31,30,31;int month=1,k=2,test;/k=2表示对应的天为星期一,1940年1月1号为星期一,以这一天为基准确定之后的日历test=(year-194

10、0)/4*5+(year-1940)%4=0?0:(year-1940)%4+1)%7+2;k=test%7=0?7:test%7;/确定每年的第一天为星期几for(int i=0;i12;i+)switch(month+i)case 1: yue(i,&k,month_numble,&year);break;case 2: yue(i,&k,month_numble,&year);break;case 3: yue(i,&k,month_numble,&year);break;case 4: yue(i,&k,month_numble,&year);break;case 5: yue(i,&

11、k,month_numble,&year);break;case 6: yue(i,&k,month_numble,&year);break;case 7: yue(i,&k,month_numble,&year);break;case 8: yue(i,&k,month_numble,&year);break;case 9: yue(i,&k,month_numble,&year);break;case 10:yue(i,&k,month_numble,&year);break;case 11:yue(i,&k,month_numble,&year);break;case 12:yue(i,

12、&k,month_numble,&year);break;break;elsecout输入的年份不在范围之内,请输入1940及以后的年份。endl;void yue(int i,int*k,int*month_numble,int*year)/函数实现输出每月的日历cout=i+1月=endlendl;cout日t一t二t三t四t五t六endl;for(int h=1;h*k;h+)coutt;/控制每月1号从对应的星期几开始输出for(intj=1;j=(i!=1?month_numblei:(*year%4=0?29:28);j+)/区分平年和闰年if(j%7!=(8-*k)%7)cout

13、jt;elsecoutjendl;for(intj=1;j=(i!=1?month_numblei:(*year%4=0?29:28);j+)*k=*k%7;*k+=1;coutendlendlendl;Ymonth.cpp#includecalendar.hvoid yue1(int*k,int*month_numble,int*year,int*ymonth);using namespace std;void ymonth()int year,ymonth,k=2,test;while(1)coutyear;if(year=1940)int month_numble12=31,29,31,

14、30,31,30,31,31,30,31,30,31;/k=2表示对应的天为星期一,1940年1月1号为星期一,以这一天为基准确定之后的日历test=(year-1940)/4*5+(year-1940)%4=0?0:(year-1940)%4+1)%7+2;k=test%7=0?7:test%7;/确定每年的第一天为星期几while(1)coutymonth;if(ymonth=1&ymonth=12)yue1(&k,month_numble,&year,&ymonth);break;elsecout输入的月份不在范围之内,请输入正确的月份。endl;break;elsecout输入的年份不

15、在范围之内,请输入1940及以后的年份。endl;void yue1(int*k,int*month_numble,int*year,int*ymonth)/函数实现输出每月的日历cout=*ymonth月=endlendl;cout日t一t二t三t四t五t六endl;for(int m=1;m*ymonth;m+)for(intj=1;j=(m!=2?month_numblem-1:(*year%4=0?29:28);j+)*k=*k%7;*k+=1;for(int h=1;h*k;h+)coutt;/控制每月1号从对应的星期几开始输出for(int j=1;j=month_numble*y

16、month-1;j+)/区分平年和闰年if(j%7!=(8-*k)%7)coutjt;elsecoutjendl;coutendlendlendl;Day.cpp#includecalendar.hvoid day2(int*k,int*month_numble,int*year,int*month1,int*day1);using namespace std;void day()int year,month1,day1;int month_numble12=31,29,31,30,31,30,31,31,30,31,30,31;int month=1,k=2,test;while(1)cou

17、tyear;/k=2表示对应的天为星期一,1940年1月1号为星期一,以这一天为基准确定之后的日历test=(year-1940)/4*5+(year-1940)%4=0?0:(year-1940)%4+1)%7+2;k=test%7=0?7:test%7;/确定每年的第一天为星期几if(year=1940)while(1)coutmonth1;if(month1=1&month1=12)while(1)coutday1;if(day1=1&day1=(month1!=2?month_numblemonth1-1:(year%4=0?29:28)day2(&k,month_numble,&ye

18、ar,&month1,&day1);break;elsecout输入的天数不在范围之内,请输入正确的天数:endl;break;elsecout输入的月份不在范围之内,请输入正确的月份:endl;break;elsecout输入的年份不在范围之内,请输入1940及以后的年份:endl;void day2(int*k,int*month_numble,int*year,int*month1,int*day1)for(int m=1;m*month1;m+)for(intj=1;j=(m!=2?month_numblem-1:(*year%4=0?29:28);j+)*k=*k%7;*k+=1;f

19、or(int j=2;j=*day1;j+)*k=*k%7;*k+=1;cout这一天为星期;/输出这一天为星期几switch(*k-1)case 0: cout天endl;break;case 1: cout一endl;break;case 2: cout二endl;break;case 3: cout三endl;break;case 4: cout四endl;break;case 5: cout五endl;break;case 6: cout六endl;break;if(*month1=1&*day1=1)cout这一天为元旦endl;if(*month1=4&*day1=4)cout这一

20、天为清明节endl;if(*month1=5&*day1=1)cout这一天五一国际劳动节endl;if(*month1=6&*day1=1)cout这一天为儿童节endl;if(*month1=10&*day1=1)cout这一天为国庆节endl;if(*month1=12&*day1=25)cout这一天为圣诞节endl;/输出这一天是否为公历节日SYSTEMTIME sys;GetLocalTime(&sys);/获取系统时间intyear_num,ymonth_num=0,day_num=0,tyear_num,tmonth_num=0,tday_num=0,fomer_num,tod

21、ay_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(intj=1;j=(i!=1?month_numblei:(*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

22、+365*3)+(sys.wYear-1940)%4=0?0:(sys.wYear-1940)%4*365+1);for(int i=0;isys.wMonth-1;i+)for(intj=1;j=(i!=1?month_numblei:(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号到今天的天数cout这一天与今天相距的天数为:abs(today_num-fomer_num)endlendl;/输出这一天与今天相距多少天

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

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