《C++几何图形面积周长计算(共16页).doc》由会员分享,可在线阅读,更多相关《C++几何图形面积周长计算(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上福建工程学院计算机与信息科学系实验报告 10 11 学年第 1 学期 任课老师: 林志强、郑积仕 课程名称面向对象课程设计班级计算机0802座号24姓名谢茂财实验题目图形多态实验时间实验开始日期: 报告提交日期: 实验目的、要求编写一个程序,计算任给一个几何形体的面积和周长。几何形体可以是矩形、三角型、圆形、扇型、梯形。要求:(1)由用户通过键盘输入要处理的几何形体,每次输入一个几何形体。输入规则是:程序输出提示信息,请用户选择要处理的几何形体的类型。如果输入字母“E”,表示要退出程序的运行,根据用户选择的几何形体类型,输出提示信息,请用户输入几何形体的描述数据。例如
2、圆形的中心点坐标和半径。要求在提示信息中说明输入数据的格式。由程序根据规定的格式读入数据,如果输入数据的格式不对、或错误(例如把一个负数作为圆形的半径输入),要输出提示信息请求用户输入正确的数据、并再次读入。(2)在用户输入一个几何形体后,程序输出该几何形体的面积和周长,要求在输出中注明哪个数据是面积、哪个数据是周长。然后回到上一步,继续处理新的几何形体,直到用户选择退出程序运行为止。 (3)在基类中加两个虚函数setfromfile(),printtofile()分别用于文件读写,文件统一后缀.geo,在输入文件名时不必输入。向文件输出时注意在每个输出后要输出 或n,否则从文件输入时会出错。
3、从文件输入时,只能屏幕输出,输出结果是按周长大小排序的。而从键盘输入时可以选择是屏幕输出还是文件输出,但都是按面积大小排序的。实验设计内容1、 设计说明程序共7个类,抽象类base、类point、以及5个图形类;抽象类中有4个纯虚函数,并派生出5个图形类,以实现多态;类point的对象作为图形类的成员。2、 流程图类的关系图: Base -area()=0:float/-girth()=0:float -setfromfile()=0:void -printftofile()=0:void tri Rec 继承 Cir Sca Tra -a,b,c:point -A:point/h,l:flo
4、at +Rec() -a:point/r:float -a:point/r,b:float -a:point/l1,l2,h,l,r:float +tri() (同base) +cir() +sca() +tra (同base) (同base) (同base) (同base) point -x,y:float +point()/getx()/gety()流程图: MAIN MENU Rectangle Triangle Circle Scall Trape H,L H,L H,L H,L H,L PRINTTOFILE LOAD SORT OUTPUT记录每次实验结果以及分析情况开始界面:矩形
5、:三角形:圆:扇形:梯形:文件输出:总结以及心得体会指导老师评阅意见指导老师: 年 月 日填写内容时,可把表格扩大。实验的源程序代码(要有注释)附在表后。/ 11.cpp : Defines the entry point for the console application./#include iostream.h/#include stdafx.h#include iostream.h#include #include string.h#include #define PI 3.14159using namespace std;class Basepublic:virtual float
6、 Area()=0;virtual float Girth()=0;virtual void setfromfile()=0;virtual void printtofile()=0;class Pointprivate:float x,y;public:Point(float x=0.0,float y=0.0):x(x),y(y)float getx()return x; float gety()return y;class Rec:public Base /矩形 private:Point a;float l,h;public:Rec(Point a=NULL,float h=0,flo
7、at l=0):a(a),h(h),l(l)float Area();float Girth();void setfromfile();void printtofile();float Rec:Area()return h*l; float Rec:Girth()return 2*(l+h);void Rec:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinte
8、rpret_cast(&l),sizeof(l);file.close();coutal;void Rec:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Tri:publ
9、ic Base /三角形 private:Point a,b,c;public: Tri(Point a=NULL,Point b=NULL,Point c=NULL):a(a),b(b),c(c)float Area();float Girth();void setfromfile();void printtofile();float Tri:Area() float l1=sqrt(a.getx()-b.getx()*(a.getx()-b.getx()+(a.gety()-b.gety()*(a.gety()-b.gety(); float l2=sqrt(a.getx()-c.getx
10、()*(a.getx()-c.getx()+(a.gety()-c.gety()*(a.gety()-c.gety(); float l3=sqrt(c.getx()-b.getx()*(c.getx()-b.getx()+(c.gety()-b.gety()*(c.gety()-b.gety(); if(l1+l2=l3|l2+l3=l1|l1+l3=l2) cout该三个点不能构成三角形endl; return 0; else float l=(l1+l2+l3)/2; return sqrt(l*(l-l1)*(l-l2)*(l-l3);float Tri:Girth() float l
11、1=sqrt(a.getx()-b.getx()*(a.getx()-b.getx()+(a.gety()-b.gety()*(a.gety()-b.gety(); float l2=sqrt(a.getx()-c.getx()*(a.getx()-c.getx()+(a.gety()-c.gety()*(a.gety()-c.gety(); float l3=sqrt(c.getx()-b.getx()*(c.getx()-b.getx()+(c.gety()-b.gety()*(c.gety()-b.gety(); if(l1+l2=l3|l2+l3=l1|l1+l3=l2) cout该三
12、个点不能构成三角形endl; return 0; else return l1+l2+l3;void Tri:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Tri:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofs
13、tream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth(); file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Cir:Base /圆形 private:Point a;float r;public: Cir(Point a=NULL,float r=0):r(r)float Area();float Girth();void
14、 setfromfile();void printtofile();float Cir:Area()return PI*r*r;float Cir:Girth()return 2*PI*r;void Cir:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Ci
15、r:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();class Sca:public Base /扇形 private:Point a;float r,b;public:Sca(Poi
16、nt a=NULL,float r=0,float b=0):a(a),r(r),b(b)float Area();float Girth();void setfromfile();void printtofile();float Sca:Area()return b/360*PI*r*r;float Sca:Girth()return 2*r+b/360*2*PI*r;void Sca:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterp
17、ret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Sca:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|ios_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&
18、l),sizeof(l);file.close();class Tra /梯形 private:Point a;float l1,l2,h,l,r;public:Tra(Point a=NULL,float l=0,float r=0,float l1=0,float l2=0,float h=0):a(a),l(l),r(r),l1(l1),l2(l2),h(h)float Area();float Girth();void setfromfile();void printtofile();float Tra:Area()return (l1+l2)/2*h;float Tra:Girth(
19、)return l1+l2+l+r;void Tra:setfromfile()char s20;coutendl请输入你要导出的文件名!s;ifstream file(s);strcat(s,.geo);float a,l;file.read(reinterpret_cast(&a),sizeof(a); file.read(reinterpret_cast(&l),sizeof(l);file.close();coutal;void Tra:printtofile()char s20;coutendl请输入你要保存的文件名!s;ofstream file(s,ios_base:app|io
20、s_base:binary);strcat(s,.geo);float a,l;a=Area();l=Girth();file.write(reinterpret_cast(&a),sizeof(a); file.write(reinterpret_cast(&l),sizeof(l);file.close();int Positive(float h,float l)if(h0&l0) return 1;else throw 0;int Positive(float r)if(r0) return 1;else throw 0;void Rectangle()coutendl请输入矩形的描述
21、数据:endlendl;float h,l,x,y; coutendlxy;coutendlhl;tryPositive(h,l);Point a(x,y);Rec m(a,h,l);cout面积:m.Area()周长:m.Girth();m.printtofile();catch(int) cout输入数据有误,请重输!endl; void Triangle()int x1,y1,x2,y2,x3,y3;coutendl请输入三角形的描述数据:endl;coutendlx1y1;coutendlx2y2; coutendlx3y3;Point a(x1,y1),b(x2,y2),c(x3,y
22、3); Tri t(a,b,c);cout面积:t.Area()周长:t.Girth()endl;t.printtofile(); void Circle()int x1,y1,r;coutendl请输入圆形的描述数据:endl;coutendlx1y1;coutendlr;Point a(x1,y1); Cir c(a,r);cout面积:c.Area()周长:c.Girth()endl;c.printtofile();void Scall()int x1,y1,r,b;coutendl请输入扇形的描述数据:endl;coutendlx1y1;coutendlr; coutendlb;Poi
23、nt a(x1,y1); Sca c(a,r,b);cout面积:c.Area()周长:c.Girth()endl;c.printtofile();void Trape()int x1,y1,l,r,l1,l2,h;coutendl请输入梯形的描述数据:endl;coutendlx1y1;coutendll1; coutendll2;coutendll; coutendlr;coutendlh;Point a(x1,y1); Tra t(a,l,r,l1,l2,h);cout面积:t.Area()周长:t.Girth()endl;t.printtofile();void Sort(float
24、a,float z,int count)for(int i=0;icount-1;i+)for(int j=i;jcount;j+)if(ajai)float t=ai;ai=aj;aj=t;float m=zi;zi=zj;zj=m;void Output(const float a,const float z,const int count)cout面积: 周长: endl; for(int i=0;icount;i+) coutai ziendl;void Load() cout请输入要显示的文件名!s;ifstream file(s);file.seekg(0);int count=0
25、;while(file)count+;file.read(reinterpret_cast(&ai),sizeof(ai); file.read(reinterpret_cast(&zi),sizeof(zi);i+; Sort(a,z,count-1);cout输出结果按面积大小排序endl;Output(a,z,count-1);void Menu() while(1)coutendl欢迎进入几何图形世界endlendl; cout | A:矩形世界 |endl; cout | B:三角型世界 |endl; cout | C:圆形世界 |endl; cout | D:扇型世界 |endl;
26、 cout | E:梯形世界 |endl; cout | F:从文件输出 |endl; cout | G:退出 |endl;coutendlendl; cout请选择你要操作的图形代号:num;switch(num)case a:case A:Rectangle();break; case b:case B:Triangle();break;case c:case C:Circle();break;case d:case D:Scall();break;case e:case E:Trape();break;case f:case F:Load();break;case g: case G:exit(0);default:break;int main(int argc, char* argv)Menu();return 0;专心-专注-专业