欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    日历C++课程设计报告(共18页).doc

    • 资源ID:14982273       资源大小:2.82MB        全文页数:18页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    日历C++课程设计报告(共18页).doc

    精选优质文档-倾情为你奉上-日历的设计(良好组)C+课程设计专业:计算机科学与技术完成时间: 2022年5月10日专心-专注-专业目录前言C+是美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C+(最初这种语言被称作“C with Classes”)。一开始C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。日历在古代是为皇历。日历在日常生活中有着非常重要的作用。有了它,我们的生活更有节奏,有规律。认这个高级动物与低级动物的最大差别在于,认识会思考,会计划的。他们有着有规律的计划。而日历无疑是他们规律计划的媒介。现全世界都在用日历。而在中国,又分为国历和农历。我国始有历法大约在四千多年以前。根据甲骨文中的一页甲骨历,证明殷代的历法已具有相当的水平,这一页甲骨。历是全人类最古老的历书实物,这页甲骨历也就叫日历。 但真正的日历产生,大约在一千一百多年前的唐顺宗永贞元年,皇宫中就已经使用皇历。最初一天一页,记载国家、宫廷大事和皇帝的言行。皇历分为十二册,每册的页数和每月的天数一样,每一页都注明了天数和日期。发展到后来,就把月日、于支、节令等内容事先写在上面,下部空白处留待记事,和现在的“台历”相似。那时,服侍皇帝的太监在日历空白处记下皇帝的言行,到了月终,皇帝审查证明无误后,送交史官存档,这在当时叫日历,这些日历以后就作为史官编写国史的依据。 后来,朝廷大臣们纷纷仿效,编制自家使用的日历。 至于月历以后又发展成挂历、台历等各种形式,只是近一个世纪的事。 随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!正文2.1 设计程序的目的和思想 2.1.1 设计程序的目的:(1)加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。(2)熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。(3)学会上机调试程序。2.1.2 设计程序的思想:程序设计语言类课程的指导思想是:既能使学生通过学习高级编程语言的知识、编程技术和基本算法,又能掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C+,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。2.2 设计环境对于本次设计的软硬件要求如下:操作系统 Win9x/Me/NT/2000/XP/2003内存容量 512MB显卡要求 集成MX200以上交互工具 鼠标CPU要求 AMD2200+(赛扬2.4GHz)以上硬盘空间 40GB显示器 VGA以上显示器开发软件 Microsoft Visual C+ 6.02.3 设计目的掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。 为了能更好地了解C+语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。2.4 设计流程开始主要设计算法流程输入year判断闰年二月29天二月28天判断大小月判断大小月1,3,5,7,8,10,12大月,31天1,3,5,7,8,10,12大月,31天4,6,9,11小月30天4,6,9,11小月30天计算输入的年份和几点年份之间相差的天数计算输入年份的1月1号是星期几依次递增,按照每月的天数按照要求排列用两种方式输出日历横向输出,每三月为一行居中竖向输出主菜单选择,整合程序结束2.5设计内容2.5.1大月和小月的定义int monthday(int i)if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) /1,3,5,7,810,12有31天为大月,4,6,9,11为小月30天,2月要判断是否为闰年 return 31; else if (i=2) if(isleapyear() /判断闰年 return 29; /是的话返回29天 else return 28;/不是闰年返回28天 else return 30; 运用简单的if语句来设定大小月。If语句是c+中常用且简单的判断语句,用途相当广泛,使用起来简单易懂,易操作。2.5.2 闰年与非闰年二月的定义int isleapyear()if(year%4=0&&year%100!=0|year%400=0) return 1; else return 0; 构造闰月的判断函数,用返回值1和0来表示是否为闰年,对于后来的函数调用起来简单不容易出错,如果出现bug,修改起来也简单。2.5.3两种不同的输出方法1.居中输出void display2()int n=judgeweek(); for(int i=1;i<=12;i+) /总共12个月份 int t=1; cout<<endl<<setw(40)<<" "<<setw(5)<<year<<"年"<<setw(5)<<i<<"月份"<<endl; cout<<setw(30)<<" "<<"*"<<endl;cout<<setw(30)<<" "for(int j=0;j<7;j+) cout<<setw(5)<<weekdayj; cout<<endl<<setw(30)<<" "<<"*"<<endl;cout<<setw(30)<<" "for(int k=1;k<n;k+,t+) cout<<setw(5)<<" " /输入每月第一天的起始位置,即该天为星期几,用空格补充for(int d=1;d<=monthday(i);d+,t+) cout<<setw(5)<<d; if(t=7) cout<<endl<<setw(30)<<" " /控制每行只输出7个数字t=0; /控制一行输出到星期日,如果到星期日则重新计数 n=t%7; if(n=0) /输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的起始位置 n=7; cout<<endl<<setw(30)<<" "<<"*"<<endl;设计这种输出方法主要运用for语句,多重循环,以每个月为单位循环,将一个月划分为7列,控制每行不超过7个数字,月头和月尾分别用空格补齐,如此循环而得。2.横向输出方法void display1()cout<<setw(35)<<” ”<<year<<”年日历”;print(1);print(2);print(3);print(4);横向输出相对居中输出有难度,所以在设计横向输出时将其划分为两个函数,display1为横向总的输出函数,它的作用主要是输出日历的头和调用下面的print函数。void print(int x)char *a,*b,*c;int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j; int total=0;total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400;swtich(x)case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29;else sm=28;modf=total%7;mods=(modf+31)%7;fm和tm和sm分别代表一组中三个月依次的天数,modf等代表每个月依次的第一天的位置,dof等分别用来表示每个月从第一天到最后一天. if(islearpyear()modt=(mods+29)%7;else modt=(mods+28)%7;break;case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break;case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break;case 4:a=”十月”,b=”十一月”,c=”十二月”; fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break;default:cout<<”数据溢出”; break;cout<<setw(12)<<" "<<a<<setw(17)<<" "<<b<<setw(18)<<" "<<c<<endl<<endl;cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六"cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六" ;cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六" << endl;for (i=1;i<=modf;i+)cout<<setw(3)<<" "for(dof=1;dof<=7-modf;dof+)cout<<setw(3)<<dof;for (i=1;i<=mods;i+)cout<<setw(3)<<" "for(dos=1;dos<=7-mods;dos+)cout<<setw(3)<<dos;for (i=1;i<=modt;i+)cout<<setw(3)<<" "for(dot=1;dot<=7-modt;dot+)cout<<setw(3)<<dot;cout<<endl;for(j=1;j<=5;j+)for(i=1;i<=7;i+)if(dof>fm)cout<<setw(3)<<" "else cout<<setw(3)<<dof;dof+;for(i=1;i<=7;i+)if(dos>sm)cout<<setw(3)<<" "else cout<<setw(3)<<dos;dos+;for(i=1;i<=7;i+)if(dot>tm)cout<<setw(3)<<" "else cout<<setw(3)<<dot;dot+;cout<<endl;cout<<endl;从写的程序来看横向输出要难的多,但主要思想不变,还是依赖多重循环,因为最终要求三个月为一组输出,所以在设计时便将每三月作为一个整体,最后有四组,因为每个月按7列最多可排列5行,所以在一组中仅计算天数又有7列五行,如以上所标注的那样。3.主函数的设计int main()Date a; cout<<setw(6)<<"万年历查询"<<endl; cout<<"*"<<endl; int choose;w:while(choose!=0)cout<<"1 以横向模式显示该年万年历 "<<endl; cout<<”2以竖向模式显示该年万年历“<<endl; cout<<"3 查询某天对应的星期数"<<endl; cout<<"4 退出系统"<<endl; cout<<"请选择1-4进行操作:" cin>>choose; switch(choose) /功能选择 case 1:a.getyear();a.display1();break; case 2:a.getyear();a.display2();break; case 3:a.getday();a.searchday();break; case 4:cout<<"谢谢使用万年历系统,请关闭!"<<endl;exit(0);break; default:cout<<"您输入有误,请重新输入"<<endl;goto w; return 0;主函数主要包括,日历的主界面,主菜单,上面各种函数的调用,其中选择使用while和switc函数两者结合,主函数是一个总结过程,将程序从头到尾整理依次运行。2.6关键技术就本程序使用的技术有方面。都是使用的是简单的如if语句,switch语句,for循环语句, 输入和输出,变量的定义,等。总结通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C+,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。效果图刚运行时如:图 1图 1输入2012时,如:图 2图 2横向输出图3 图3程序结束 图4致谢经过两周的不懈努力,很高兴能完成一个C+编程,紧张的心终于可以平静了。从中体会到以及学习到很多关于C+的很大方面的只是,是我更加了解了C+,并更加熟练了C+。在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于C+的基础知识,为本次的课程设计打好了很好的基础。从而使我能够顺利完成这次课程设计。在本次做课程设计过程中,要感谢陆建锋老师的悉心关照,一直陪伴我们,并为大家讲解不懂的地方,很是辛苦,也很是忙碌。还要感谢学院为我们此次课程设计提供机房,让我们有了良好的学习环境可以利用所学做课程设计,从很大的程度上增强了我们对于C+学习的兴趣。和小组成员一块讨论,多听听别人的想法,想办法改进自己,这是我受益匪浅。只有比较才知道自己的不足。我们一定要好好的改正自己的不足之处,完善自己。不做最好,只做更好!努力在老师规定的时间内完成老师所规定的任务。结束课设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。参考文献1谭浩强 著.C+面向程序程序设计.北京:清华大学出版社,2006.72吴乃陵,况迎辉,李海文 著.VC+程序设计.北京:高等教育出版社,2003.83邓宗明,张睿哲,张晓竞,等编著.Visual C+ 6.0 编程实用技术与案例.北京:清华大学出版社,2001.54李海文,吴乃陵 等编C+程序设计及实践教程北京:高等教育出版社,2003.9 附录1:#include<iostream>#include<fstream>#include<iomanip>#include<string>#include<stdlib.h>using namespace std;class Datepublic: void getyear(); /输入想要查询的年份 void getday(); /输入想要查询的日期 int isleapyear(); /判断该年是否为闰年 int judgeweek(); /判断该年的1月1日是星期几 int monthday(int i);/判断该年每个月的天数 void display1(); /以横向模式输出结果 void display2(); /以居中模式输出结果 void print(int x); /横向输出的计算 void putfile(); /结果存入文件 void searchday(); /判断具体某天为星期几private:int year;int month;int day;string weekday7= "一","二","三","四","五","六",”日”; /记录星期一到星期日void Date:getyear()cout<<"请输入要查询的年份:" cin>>year; void Date:getday()cout<<"请输入日期:" cin>>year; cin>>month; cin>>day;int Date:isleapyear()if(year%4=0&&year%100!=0|year%400=0) return 1; else return 0; int Date:judgeweek() int total=0; /以01年1月1日(星期一)为基点 int n; total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; /计算基点到输入年份的天数 n=total%7;if(n=0) return 0; else return n+1; /返回该年的1月1日为星期几int Date:monthday(int i)if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) return 31; else if (i=2) if(isleapyear() return 29; else return 28; else return 30; void Date:display1()cout<<setw(35)<<” ”<<year<<”年日历”;print(1);print(2);print(3);print(4);void Date:print(int x)char *a,*b,*c;int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j;int total=0;total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400;swtich(x)case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29;else sm=28;modf=total%7;mods=(modf+31)%7;if(islearpyear()modt=(mods+29)%7;else modt=(mods+28)%7;break;case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break;case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break;case 4:a=”十月”,b=”十一月”,c=”十二月”; fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break;default:cout<<”数据溢出”; break;cout<<setw(12)<<" "<<a<<setw(17)<<" "<<b<<setw(18)<<" "<<c<<endl<<endl;cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六"cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六" ;cout << setw(3) <<"日" << setw(3) <<"一" << setw(3) <<"二" ;cout << setw(3) <<"三" << setw(3) <<"四" << setw(3) <<"五" ;cout << setw(3) <<"六" << endl;for (i=1;i<=modf;i+)cout<<setw(3)<<" "for(dof=1;dof<=7-modf;dof+)cout<<setw(3)<<dof;for (i=1;i<=mods;i+)cout<<setw(3)<<" "for(dos=1;dos<=7-mods;dos+)cout<<setw(3)<<dos;for (i=1;i<=modt;i+)cout<<setw(3)<<" "for(dot=1;dot<=7-modt;dot+)cout<<setw(3)<<dot;cout<<endl;for(j=1;j<=5;j+)for(i=1;i<=7;i+)if(dof>fm)cout<<setw(3)<<" "else cout<<setw(3)<<dof;dof+;for(i=1;i<=7;i+)if(dos>sm)cout<<setw(3)<<" "else cout<<setw(3)<<dos;dos+;for(i=1;i<=7;i+)if(dot>tm)cout<<setw(3)<<" "else cout<<setw(3)<<dot;dot+;cout<<endl;cout<<endl;void Date:display1()cout<<setw(35)<<” ”<<year<<”年日历”;print(1);print(2);print(3);print(4);void Date:display2()int n=judgeweek(); for(int i=1;i<=12;i+) /总共12个月份 int t=1; cout<<endl<<setw(40)<<" "<<setw(5)<<year<<"年"<<setw(5)<<i<<"月份"<<endl; cout<<setw(30)<<" "<<"*"<<endl;cout<<setw(30)<<" "for(int j=0;j<7;j+) cout<<setw(5)<<weekdayj; cout<<endl<<setw(30)<<" "<<"*"<<endl;cout<<setw(30)<<" "for(int k=1;k<n;k+,t+) cout<<setw(5)<<" " /输入每月第一天的起始位置,即该天为星期几,用空格补充for(int d=1;d<=monthday(i);d+,t+) cout<<setw(5)<<d; if(t=7) cout<<endl<<setw(30)<<" " /控制每行只输出7个数字t=0; /控制一行输出到星期日,如果到星期日则重新计数 n=t%7; if(n=0) /输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的起始位置 n=7; cout<<endl<<setw(30)<<" "<<"*"<<endl;void Date:searchday() int total=0; int n; total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100;for(int j=1;j<month;j+)total+=monthday(j);total+=day;n=(total-1)%7; if(n=0) cout<<"星期一" <<endl; else cout<<"星期"<<weekdayn<<endl;int main()Date a; cout<<setw(6)<<"万年历查询"<<endl; cout<<"*"<<endl; int choose;w:while(choose!=0)cout<<"1 以横向模式显示该年万年历 "<<endl; cout<<”2以竖向模式显示该年万年历“<<endl; cout<<"3 查询某天对应的星期数"<<endl; cout<<"4 退出系统"<<endl; cout<<"请选择1-4进行操作:" cin>>choose; switch(choose) /功能选择 case 1:a.getyear();a.display1();break; case 2:a.getyear();a.display2();break; case 3:a.getday();a.searchday();break; case 4:cout<<"谢谢使用万年历系统,请关闭!"<<endl;exit(0);break; default:cout<<"您输入有误,请重新输入"<<endl;goto w; return 0;

    注意事项

    本文(日历C++课程设计报告(共18页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开