c计算三角形面积课程设计1_第1页
c计算三角形面积课程设计1_第2页
c计算三角形面积课程设计1_第3页
c计算三角形面积课程设计1_第4页
c计算三角形面积课程设计1_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第页《C++程序设计》课程设计报告三角形的种类和面积班级:10级2班___姓名:沈茂良_____学号:101102025_____________指导教师:唐远翔___完成时间:2011年11目录TOC\f\o"1-9"\t"Heading3;3;Heading2;2;Heading1;1"\h摘要 一、引言 二、设计目的与任务 1、本课程设计的目的 2、本课程设计的任务 三、设计方案 四、程序清单 五、程序调试与体会 六、总结 摘要本次设计用类进行有关三角形的种类和面积的操作。通过类的继承及派生,调用类的成员函数实现判别三角形的种类,求三角形三条边的长度,求三角形的面积,数据存入文件,查看文件数据,清空数据文件等操作。程序中使用了类的继承,提高代码的复用性。程序主要由点类、线段类、三角形类以及主函数构成。《C++程序设计语言》课程设计——利用类的继承及派生求三角形的种类和面积一、引言随着人们生活水平的提高,计算机发展异常迅速。如今,计算机已经深入到我们社会的各个领域,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。通过计算机对各类问题求解已经成为一种高效、快捷的方式。本课程设计就是用C++研究三角形的种类及面积的问题,实现对三角形的种类和面积的求解及实现类的应用以及函数的调用。二、设计目的及任务1、本课程设计的目的1)通过课程设计更进一步理解C++的基础知识和面向对象的思想。2)训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。3)熟练掌握C++中类的继承及派生在程序中的应用,并熟练了解类中函数的调用。4)通过分工协作,激发团队合作精神,培养团队合作的能力。2、本课程设计的任务使用类实现对三角形的种类和面积求解,具体内容如下:1)设计菜单实现功能选择;2)输入三角形的三个顶点坐标;3)判断三角形的种类(一般三角形、等腰三角形、等边三角形、直角三角形和不能构成三角形);4)计算并输出三角形的面积5)对输入数据和输出结果均用文件实现三、设计方案(一)定义三个Point,Line,Triangle三个类,它们之间的关系。如图示:Point类Point类Line类Triangle类继承继承派生派生(二)详细设计private:doubleX1,X2,X3,Y1,Y2,Y3;private:doubleX1,X2,X3,Y1,Y2,Y3;Pointp1,p2,p3;Linel1,l2,l3;Point类:作为基类Line类:公有继承Point类Triangle类:公有继承Line类public:Point();Point(参数);public:Line();Line(参数);linelength();public:Triangle();Triangle(参数);trilineput();triarea();trijudgekind();trisave();tricheck();triclear();Private:doubleX;doubleY;private:doublePointp1,p2;详细注释:public:Point();:点类无参构造函数Point(参数);:点类带参构造函数Private:doubleX;:点的x坐标doubleY;:点的y坐标public:Line();:线段类无参构造函数Line(参数);:线段类带参构造函数private:doubleX1,X2,Y1,Y2;两个点的x坐标和y坐标Pointp1,p2;两个点类成员public:Triangle();:三角形类无参构造函数Triangle(参数);:三角形带参构造函数trilineput();:三角形边长输出函数triarea();:求三角形面积函数trijudgekind();:三角形类型判断函数trisave();:三角形点的数据及面积存入文件函数tricheck();:文件内容查看函数triclear();:文件内容清空函数private:doubleX1,X2,X3,Y1,Y2,Y3;:三角形三点的x坐标和y坐标Pointp1,p2,p3;:三个点类成员Linel1,l2,l3:三个线段类成员(三)其他自定义函数voidsetprecision();:设置输出数据精度函数viodtriin(Triangle&t);:初始化一个三角形对象函数voiddisplay();:主菜单显示函数(四)主函数:voiddisplay();switch(intn):调用操作四、程序清单#include"iostream.h"#include"math.h"#include"fstream.h"#include"ctype.h"#include"iomanip.h"#include"stdlib.h"staticintP=2;//点类//做线段类的基类classPointpublic:Point()//点类无参构造函数X=0;Y=0;Point(doublex,doubley)//点类带参构造函数X=x;Y=y;private:doubleX;//点类私有数据成员doubleY;//线段类classLine:publicPoint//公有继承点类public:Line()//线段类无参构造函数X1=0;X2=0;Y1=0;Y2=0;//给私有数据成员赋初值Line(doublex1,doubley1,doublex2,doubley2):Point(0,0),p1(x1,y1),p2(x2,y2)//线段类带参构造函数,初始化数据X1=x1;X2=x2;Y1=y1;Y2=y2;doublelinelength();//求两点距离函数private:Pointp1,p2;//私有点类成员doubleX1,X2,Y1,Y2;//私有数据成员doubleLine::linelength()//定义求两点距离函数,即三角形的边长returnsqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));//返回两点的距离值,即三角形边}//长的值//三角形类classTriangle:publicLine//公有继承线段类函数public:Triangle():l1(0,0,0,0),l2(0,0,0,0),l3(0,0,0,0)//三角形类无参构造函数,对私有数据成员赋缺省值X1=0;X2=0;X3=0;Y1=0;Y2=0;Y3=0;Triangle(doublex1,doubley1,doublex2,doubley2,doublex3,doubley3):Line(0,0,0,0),l1(x1,y1,x2,y2),l2(x1,y1,x3,y3),l3(x2,y2,x3,y3){//三角形带参构造函数,对私有数据进行初始化X1=x1;X2=x2;X3=x3;Y1=y1;Y2=y2;Y3=y3;voidtrilineput();//三角形边长输出函数doubletriarea();//求三角形面积函数voidtrijudgekind();//三角形判断函数voidtrisave();//数据存入函数voidtricheck();//查看文件数据voidtriclear();//清空数据函数private:Linel1,l2,l3;//私有线段类成员Pointp1,p2,p3;//私有点类成员doubleX1,X2,X3,Y1,Y2,Y3;//私有数据成员voidTriangle::trilineput()//输出三角形三条边的长度cout<<"这三个点组成三边的长度分别为:"<<setiosflags(ios::fixed)<<setprecision(P)//设定数据输出精度<<l1.linelength()<<"\t"<<l2.linelength()<<"\t"<<l3.linelength()<<endl;}//调用三角形类中的成员函数linelength()求边长doubleTriangle::triarea()//计算三角形的面积doublea=l1.linelength();//调用三角形类成员函数:求两点距离doubleb=l2.linelength();//调用三角形类成员函数:求两点距离doublec=l3.linelength();//调用三角形类成员函数:求两点距离doublep=(a+b+c)/2;returnsqrt(p*(p-a)*(p-b)*(p-c));//返回面积三角形的值voidTriangle::trijudgekind()//三角形的判断if((X1==X2&&X2==X3)||(Y1==Y2&&Y2==Y3)||((X3-X2)*(Y2-Y1)-(Y3-Y2)*(X2-X1))==0)//判断三点是否在一条直线上//三点所成直线及坐标轴垂直或者不垂直于直线cout<<"这三点在一条直线是上,不能构成三角形!"<<endl;elsedoublea=l1.linelength(),b=l2.linelength(),c=l3.linelength();//将三角形形三条边的长度分别赋给a,b,cif(a==b||b==c||a==c)//判断是否有两条边相等if(((X2-X1)*(X3-X2)+(Y2-Y1)*(Y3-Y2))==0||((X2-X1)*(X3-X1)+(Y2-Y1)*(Y3-Y1))==0||((X3-X2)*(X3-X1)+(Y3-Y2)*(Y3-Y1))==0)//判断直角cout<<"这是一个等腰直角三角形."<<endl<<"边长分别为:"<<setiosflags(ios::fixed)<<setprecision(P)//设定数据输出精度<<a<<"\t"<<b<<"\t"<<c<<endl;elseif(a==b&&b==c)//判断是否三条边相等cout<<"这是一个等边三角形,"<<"边长为:"<<setiosflags(ios::fixed)<<setprecision(P)//设定数据输出精度<<a<<"."<<endl;elseif(b==c)//判断底边的值cout<<setiosflags(ios::fixed)<<setprecision(P)<<"这是一个等腰三角形."<<"腰长为:"<<b<<","<<"底边长为:"<<a<<"."<<endl;elseif(a==b)cout<<setiosflags(ios::fixed)<<setprecision(P)<<"这是一个等腰三角形."<<"腰长为:"<<b<<","<<"底边长为:"<<c<<"."<<endl;elsecout<<setiosflags(ios::fixed)<<setprecision(P)<<"这是一个等腰三角形."<<"腰长为:"<<a<<","<<"底边长为:"<<b<<".";else//三条边不相等if(((X2-X1)*(X3-X2)+(Y2-Y1)*(Y3-Y2))==0||((X2-X1)*(X3-X1)+(Y2-Y1)*(Y3-Y1))==0||((X3-X2)*(X3-X1)+(Y3-Y2)*(Y3-Y1))==0) //判断直角cout<<"这是一个直角三角形."<<endl<<"边长分别为:"<<setiosflags(ios::fixed)<<setprecision(P)<<a<<"\t"<<b<<"\t"<<c<<endl;elseif((a*a+b*b-c*c)<0||(a*a+c*c-b*b)<0||(b*b+c*c-a*a)<0)cout<<"这是一个一般钝角三角形,"<<endl<<"边长分别为:"<<setiosflags(ios::fixed)<<setprecision(P)<<a<<"\t"<<b<<"\t"<<c<<endl;elsecout<<"这是一个一般锐角三角形,"<<endl<<"边长分别为:"<<setiosflags(ios::fixed)<<setprecision(P)<<a<<"\t"<<b<<"\t"<<c<<endl;voidTriangle::trisave()//定义点数据及面积数据存入ofstreamftriangle;charc;cout<<"\n保存三个点的坐标及面积数据,是否继续?[Y/N]:";cin>>c;if(toupper(c)!='Y')return;ftriangle.open("triangledata.txt",ios::out);ftriangle<<"<"<<X1<<","<<Y1<<">"<<endl<<"<"<<X2<<","<<Y2<<">"<<endl<<"<"<<X3<<","<<Y3<<">"<<endl<<"三点形成三角形的面积是:"<<triarea()<<endl;ftriangle.close();cout<<"\n保存点数据及面积数据已经完成...\n";voidTriangle::triclear()//清空文件中的数据charc;cout<<"\n将会清空数据,是否继续?[Y/N]:";cin>>c;if(toupper(c)=='Y')ofstreamftriangle;ftriangle.open("triangledata.txt");ftriangle.clear();ftriangle.close();cout<<"\n数据已经清空...\n";elsereturn;voidTriangle::tricheck()//查看文件中的数据charch;ifstreamftriangle("triangledata.txt",ios::binary|ios::nocreate);if(ftriangle)while(ftriangle.good())ftriangle.get(ch);if(!ch)break;cout<<ch;elsecout<<"error:Cannotopenfile'triangledata.txt'."<<endl;ftriangle.close();cout<<endl<<"文件数据读取完毕!...\n";voidtriin(Triangle&t)//录入三个点的坐标对操作数据进行初始化doublex1,x2,x3,y1,y2,y3;cout<<"输入第一个点的坐标值:";cin>>x1>>y1;cout<<endl<<"输入第二个点的坐标值:";cin>>x2>>y2;cout<<endl<<"输入第三个点的坐标值:";cin>>x3>>y3;cout<<endl;Trianglep(x1,y1,x2,y2,x3,y3);t=p;voidsetprecision()//设置数据的输出精度 cout<<"设置输出精度(0--15):"; intn; cin>>n; cout<<endl; P=n;voiddisplay()//显示菜单界面cout<<"\n\n\t\t********************************************************\n";cout<<"\t\t\t*********三角形的种类及面积*********\n\t\t********************************************************\n";cout<<"\n\t\t\t*********************************\n";cout<<"\t\t\t\t1--三角形的判断\n";cout<<"\t\t\t\t2--三条边的长度\n";cout<<"\t\t\t\t3--计算三角形的面积\n";cout<<"\t\t\t\t4--点数据及面积数据存入\n";cout<<"\t\t\t\t5--查看存入数据\n";cout<<"\t\t\t\t6--数据清空\n";cout<<"\t\t\t\t7--退出\n";cout<<"\t\t\t*********************************\n";cout<<"\t\t\t请选择(1-7):";intmain()Trianglet;charc;while(1)display();cin>>c;system("cls");switch(c)case'1':triin(t);setprecision();t.trijudgekind();cout<<endl;system("pause");break;case'2':triin(t);setprecision();t.trilineput();cout<<endl;system("pause");break;case'3':triin(t);setprecision();cout<<"这个三角形的面积为:"<<t.triarea()<<endl<<endl;system("pause");break;case'4':t.trisave();cout<<endl;system("pause");break;case'5':t.tricheck();cout<<endl;system("pause");break;case'6':t.triclear();cout<<endl;system("pause");break;case'7':gotoend;break;default:cout<<"请正确输入!\n";cout<<endl;system("pause");break;system("cls");end:cout<<"\nSeeyou\n\n";return0;五、程序调试及体会在开发一个软件项目的过程中,程序调试过程占了一个绝大部分的时间,可见程序调试它的重要性。通过程序调试,我们发现了程序中的达不到要求的地方,并且能够从中改进程序编写的内容,如结构的编排,更好的判断方法等等。调试实例:1、调试运行开始,显示菜单窗口:2、输入“1”,判断三角形的类别,(1)依次输入数据243245选择精度2回车则出现以下窗口:说明:这是三点能构成三角形的时(2)依次输入123456选择精度2回车则出现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论