西安科技大学2009级C++实验报告1面向对象技术实验报告(万年历)第1页共14页1.实验目的掌握一种编程工具和面向对象程序设计的基本思想和方法,培养我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。为我们提供一个综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能力和工程实践能力,并培养和锻炼我们学生的自学创新能力。为了能更好地了解C++语言,因此开设了此次课程设计,程序设计教学课程的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。2.功能简介万年历,输入年份,可以显示出这一年的每个月份和所对应的星期天,可以查询每一天.西安科技大学2009级C++实验报告23.流程图4.代码#includeiostream#includecmathusingnamespacestd;inti,c,day,year,k,a[50];voidf1(intx)//大月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';//1号前均为空格for(i=k;i31+k;i++)a[i]=a[i-1]+1;}打印一年日历VoidfVoidq主函数大月小月闰年二月输出日历表一月的定义闰二月的定义非闰二月的定义三月四月五月六月七月八月九月十月十一月十二月非闰年二月西安科技大学2009级C++实验报告3voidf2(intx)//小月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i30+k;i++)a[i]=a[i-1]+1;}voidf3(intx)//闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i29+k;i++)a[i]=a[i-1]+1;}voidf4(intx)//非闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i28+k;i++)a[i]=a[i-1]+1;}voidg(inty[],intz)//输出日历表{cout日'\t'一'\t'二'\t'三'\t'四'\t'五'\t'六endl;for(i=0;i50;i++){if(a[i]==0)cout(char)a[i]'\t';if(a[i]!=0&&a[i]!=33)couta[i]'\t';else;if(i%7==0)coutendl;}coutendlendlendl;}intmain()西安科技大学2009级C++实验报告4{ints,count=0;cout请输入年份:;cinyear;coutendl;c=year;for(s=1;s=year;s++)if(((s-1)%4==0&&(s-1)%100!=0)||(s-1)%400==0)count++;day=365*c+count;//相差天数cout*********************year年日历*********************;coutendlendlendlendl;k=(day%7+6)%7+1;cout一月endlendl;f1(k);g(a,50);if((year%4==0&&year%100!=0)||year%400==0)//闰年二月{k=((day+31)%7+6)%7+1;cout二月endlendl;f3(k);g(a,50);day=day+31+29;}else//非闰年二月{k=((day+31)%7+6)%7+1;cout二月endlendl;f4(k);g(a,50);day=day+31+28;}k=(day%7+6)%7+1;cout三月endlendl;f1(k);g(a,50);k=((day+31)%7+6)%7+1;cout四月endlendl;f2(k);g(a,50);西安科技大学2009级C++实验报告5k=((day+31+30)%7+6)%7+1;cout五月endlendl;f1(k);g(a,50);k=((day+31+30+31)%7+6)%7+1;cout六月endlendl;f2(k);g(a,50);k=((day+31+30+31+30)%7+6)%7+1;cout七月endlendl;f1(k);g(a,50);k=((day+31+30+31+30+31)%7+6)%7+1;cout八月endlendl;f1(k);g(a,50);k=((day+31+30+31+30+31+31)%7+6)%7+1;cout九月endlendl;f2(k);g(a,50);k=((day+31+30+31+30+31+31+30)%7+6)%7+1;cout十月endlendl;f1(k);g(a,50);k=((day+31+30+31+30+31+31+30+31)%7+6)%7+1;cout十一月endlendl;f2(k);g(a,50);k=((day+31+30+31+30+31+31+30+31+30)%7+6)%7+1;cout十二月endlendl;f1(k);g(a,50);return0;}西安科技大学2009级C++实验报告65.代码分析大月和小月的定义voidf1(intx)//大月{for(i=0;i50;i++)西安科技大学2009级C++实验报告7a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';//1号前均为空格for(i=k;i31+k;i++)a[i]=a[i-1]+1;}主要运用了数组的循环语句进行对大月的定义。voidf2(intx)//小月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i30+k;i++)a[i]=a[i-1]+1;}依然用数组的循环语句进行对小月的定义。数组的循环语句是C++中一个很重要的知识,数组可以节省很多的定义,一个句子就可以就可以输出很多的数,这样大大减少了计算机的存储空间。这正是一个很打的进步。2.5.2闰年与非闰年二月的定义voidf3(intx)//闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i29+k;i++)a[i]=a[i-1]+1;}voidf4(intx)//非闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i28+k;i++)a[i]=a[i-1]+1;}用两个函数定义了在闰年与非闰年时,二月的不同定义。这主要运用到变量的不同定义。从而分辨出它们的不同,使可打印出任一年的日历。2.5.3日历表的输出西安科技大学2009级C++实验报告8ints,count=0;cout请输入年份:;cinyear;coutendl;c=year;for(s=1;s=year;s++)if(((s-1)%4==0&&(s-1)%100!=0)||(s-1)%400==0)count++;day=365*c+count;//相差天数cout*********************year年日历*********************;coutendlendlendlendl;在此运用了C++中函数的运算,计算出该年的每月每日的不同。还有一年的输入和输出。在C++语言中,函数的运算又分为很多种,此次用的是在输出时,闰年与非闰年二月的输出法的定义if((year%4==0&&year%100!=0)||year%400==0)//闰年二月{k=((day+31)%7+6)%7+1;cout二月endlendl;f3(k);g(a,50);day=day+31+29;}else//非闰年二月{k=((day+31)%7+6)%7+1;cout二月endlendl;f4(k);g(a,50);day=day+31+28;}此处主要运用了if语句来对闰年与非闰年的二月的不同定义的输出。if语句一种可跳过不符合条件的语句,继续下面的语句的执行。它具有很强的实用性。在实际的操作中经常会用到的,是一个很重要的知识。6.改进措施程序的显示面板颜色程序没有,太难看了,因此将面板颜色的程序加上了西安科技大学2009级C++实验报告97.改进后的代码#includeiostream#includewindows.h#includecmathusingnamespacestd;inti,c,day,year,k,a[50];voidf1(intx)//大月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';//1号前均为空格for(i=k;i31+k;i++)a[i]=a[i-1]+1;}voidf2(intx)//小月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i30+k;i++)a[i]=a[i-1]+1;}voidf3(intx)//闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i29+k;i++)a[i]=a[i-1]+1;}voidf4(intx)//非闰年二月{for(i=0;i50;i++)a[i]=33;for(i=k-1;i=0;i--)a[i]='\000';for(i=k;i28+k;i++)a[i]=a[i-1]+1;}西安科技大学2009级C++实验报告10voidg(inty[],intz)//输出日历表{cout日'\t'一'\t'二'\t'三'\t'四'\t'五'\t'六endl;for(i=0;i50;i++){if(a[i]==0)cout(char)a[i]'\t';if(a[i]!=0&&a[i]!=33)couta[i]'\t';else;if(i%7==0)coutendl;}coutendlendlendl;}intmain(){ints,count=0;HANDLEhStdout=::GetStdHandle(STD_OUTPUT_HANDLE);::SetConsoleTextAttribute(hStdout,FOREGROUND_RED|BACKGROUND_BLUE);system(colorac);cout请输入年份:;cinyear;coutendl;c=year;for(s=1;s=year;s++)if(((s-1)%4==0&&(s-1)%100!=0)||(s-1)%400==0)