日历C++课程设计报告(共18页).doc
《日历C++课程设计报告(共18页).doc》由会员分享,可在线阅读,更多相关《日历C++课程设计报告(共18页).doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上-日历的设计(良好组)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)、异常(except
2、ion)、RTTI、名字空间(name space)逐渐被加入标准。日历在古代是为皇历。日历在日常生活中有着非常重要的作用。有了它,我们的生活更有节奏,有规律。认这个高级动物与低级动物的最大差别在于,认识会思考,会计划的。他们有着有规律的计划。而日历无疑是他们规律计划的媒介。现全世界都在用日历。而在中国,又分为国历和农历。我国始有历法大约在四千多年以前。根据甲骨文中的一页甲骨历,证明殷代的历法已具有相当的水平,这一页甲骨。历是全人类最古老的历书实物,这页甲骨历也就叫日历。 但真正的日历产生,大约在一千一百多年前的唐顺宗永贞元年,皇宫中就已经使用皇历。最初一天一页,记载国家、宫廷大事和皇帝的言行
3、。皇历分为十二册,每册的页数和每月的天数一样,每一页都注明了天数和日期。发展到后来,就把月日、于支、节令等内容事先写在上面,下部空白处留待记事,和现在的“台历”相似。那时,服侍皇帝的太监在日历空白处记下皇帝的言行,到了月终,皇帝审查证明无误后,送交史官存档,这在当时叫日历,这些日历以后就作为史官编写国史的依据。 后来,朝廷大臣们纷纷仿效,编制自家使用的日历。 至于月历以后又发展成挂历、台历等各种形式,只是近一个世纪的事。 随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!正文2.1 设计程序的目的和思想 2.1.1 设计程序的目
4、的:(1)加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。(2)熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。(3)学会上机调试程序。2.1.2 设计程序的思想:程序设计语言类课程的指导思想是:既能使学生通过学习高级编程语言的知识、编程技术和基本算法,又能掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系
5、统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C+,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。2.2 设计环境对于本次设计的软硬件要求如下:操作系统 Win9x/Me/NT/2000/XP/2003内存容量 512MB显卡要求 集成MX200以上交互工具 鼠标CPU要求 AMD2200+(赛扬2.4GHz)以上硬盘空间 40GB显示器 VGA以上显示器开发软件 Microsoft Visual C+ 6
6、.02.3 设计目的掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。 为了能更好地了解C+语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是
7、可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。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大月和
8、小月的定义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 isleapy
9、ear()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; coutendlsetw(40) setw(5)year年setw(5)i月份endl; coutsetw(30) *endl;coutsetw(30) ;fo
10、r(int j=0;j7;j+) coutsetw(5)weekdayj; coutendlsetw(30) *endl;coutsetw(30) ;for(int k=1;kn;k+,t+) coutsetw(5) ; /输入每月第一天的起始位置,即该天为星期几,用空格补充for(int d=1;d=monthday(i);d+,t+) coutsetw(5)d; if(t=7) coutendlsetw(30) ; /控制每行只输出7个数字t=0; /控制一行输出到星期日,如果到星期日则重新计数 n=t%7; if(n=0) /输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的
11、起始位置 n=7; coutendlsetw(30) *endl;设计这种输出方法主要运用for语句,多重循环,以每个月为单位循环,将一个月划分为7列,控制每行不超过7个数字,月头和月尾分别用空格补齐,如此循环而得。2.横向输出方法void display1()coutsetw(35)” ”year”年日历”;print(1);print(2);print(3);print(4);横向输出相对居中输出有难度,所以在设计横向输出时将其划分为两个函数,display1为横向总的输出函数,它的作用主要是输出日历的头和调用下面的print函数。void print(int x)char *a,*b,*
12、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等分别用来表示每个月从
13、第一天到最后一天. 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+18
14、2)%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;coutsetw(12) asetw(17) bsetw(18) cendlendl;cout
15、 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+)coutsetw(3) ;for(d
16、of=1;dof=7-modf;dof+)coutsetw(3)dof;for (i=1;i=mods;i+)coutsetw(3) ;for(dos=1;dos=7-mods;dos+)coutsetw(3)dos;for (i=1;i=modt;i+)coutsetw(3) ;for(dot=1;dot=7-modt;dot+)coutsetw(3)dot;coutendl;for(j=1;j=5;j+)for(i=1;ifm)coutsetw(3) ;else coutsetw(3)dof;dof+;for(i=1;ism)coutsetw(3) ;else coutsetw(3)dos
17、;dos+;for(i=1;itm)coutsetw(3) ;else coutsetw(3)dot;dot+;coutendl;coutendl;从写的程序来看横向输出要难的多,但主要思想不变,还是依赖多重循环,因为最终要求三个月为一组输出,所以在设计时便将每三月作为一个整体,最后有四组,因为每个月按7列最多可排列5行,所以在一组中仅计算天数又有7列五行,如以上所标注的那样。3.主函数的设计int main()Date a; coutsetw(6)万年历查询endl; cout*endl; int choose;w:while(choose!=0)cout1 以横向模式显示该年万年历 end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日历 C+ 课程设计 报告 18
限制150内