C++面向对象程序设计三角形的种类与面积.docx
《C++面向对象程序设计三角形的种类与面积.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计三角形的种类与面积.docx(23页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计三角形的种类与面积
湖南人文科技学院计算机系
课程设计说明书
课程名称:
C++面向对象程序设计
课程代号:
436103
题目:
三角形的种类与面积
年级/专业/班:
2010级软件工程专业一班
学生姓名:
学号:
指导教师:
开题时间:
2011年6月13日
完成时间:
2011年6月24日
摘要
C++是C语言的超集,它不仅保持了与C语言的兼容,而且还支持面向对象程序设计的特征,C++程序在可重用性、可扩充性、可维护性和可靠性等方面都较C语言得到了提高,使其更适合开发大中型的系统软件和应用程序。
本文论述了使用设计了判断三角形的种类和计算基面积的系统。
首先使用C++中的类设计了Point类、Line派生类和Triangle多级派生类;然后再编写intput()、al_line()、jud_tri()以及alg_tri()函数,它们的功能分别是输入数据、计算边长、判断种类以及计算和输出面积;最后在主程序中调用intput()、al_line()、jud_tri()以及alg_tri()函数实现整个程序的运行。
经过多次调试,结果成功通过编译并得出了正确的结果,使我的系统可以正常实现菜单选择、输入数据、进行判断和计算并输入结果等功能。
关键词:
VC6.0;派生类;多级派生类;
Abstract
C++isClanguageofsuperset,itnotonlykeepsupwiththeClanguagecompatible,butalsodoitsupportobject-orientedprogramdesign,whichisthecharacteristicsoftheC++programinthereusability,scalability,andreliability,maintainability.Andinsuchaspects,C++haveimproved,itbecomemoresuitableforthedevelopmentoflargeandmedium-sizedsystemsoftwareandapplication.Thispaperdiscussestheproblemthatuseingthetodesignasystemtojudgethetypesoftriangleandcalculationtheareaofit.Atfirst,weusetheclassofC++todesignaclassPoint,aderivedclassLineandamultilevelderivedclassTriangle.Thenwewritethefuctionsintput(),al_line(),jud_tri()andalg_tri().Theirfunctionsaredatainputting,lengthcalculation,typesjudgementandareaoutputting.Finally,thehostprogramcanrealizethewholeoperationbycallingthefunctionsintput(),al_line(),jud_tri()andalg_tri().Conclusively,wehavepastthecompilingandgetarightresultafterdebuggingmanytimes.Andthenwehaveknowmoursystemcanrealizethefunctionsaremenuselection,datainputting,judgementandresultoutputting.
Keywords:
VC6.0;Derivedclass;Multilevelderivedclass;
《C++程序设计》课程设计
------三角形的种类与面积
一、引言
《面向对象程序设计课程设计》是计算机科学与技术专业和软件工程专业集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
其目的在于加深对面向对象程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。
二、设计目的与任务
通过课程设计,让学生能够熟练运用C++进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。
通过课程设计,掌握使用一种面向对象程序设计语言开发工具如DEV-C++5或VisualC++等;培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力;通过课程设计,要求学生在指导教师的指导下,独立完成实习课题的全部内容,包括:
⑴通过调查研究和上机实习,收集和调查有关技术资料。
⑵掌握设计课题的基本步骤和方法。
⑶根据课题的要求进行上机实验调试。
任务要求
本课程设计了判断三角形的种类和计算并输出其面积的系统。
该系统能实现输入三角形的三个顶点坐标、判断三角形的种类以及计算并输出三角形的面积等功能。
三、设计方案
1、总体设计
经过我们分析,在本课程设计中,首先设计了如下总体设计流程图,如图1
图1总体设计流程序
然后在此基础上设计了Point类、Line类、Triangle类,其框架如下:
Point类
Line类
classline:
publicpoint//派生类line
{
public:
voidal_line(point&,point&,point&);//声明一个计算三条边长度的函数
floatget_l1(){returnl1;}//返回l1的值
floatget_l2(){returnl2;}//返回l2的值
floatget_l3(){returnl3;}//返回l3的值
private:
floatl1,l2,l3;//定义三条线段
};
Triangle类
2、详细设计
.层次(调用)关系:
经过我们集体更加细致的分析和讨论,首先得出了一个详细的层次关系设计流程图,如图2
图2层次关系设计流程图
2.2.类设计图:
通过我们大家的共同努力,我们设计出了类的详细代码,如下:
Point类
Line类
Line类
Triangle类
3、程序清单
#include
#include
#include
usingnamespacestd;
classpoint//定义一个point类
{
public:
voidintput();//声明一个输入函数
floatget_x(){returnx;}//返回x的值
floatget_y(){returny;}//返回y的值
private:
floatx,y;//定义对象x,y用来表示坐标
};
voidpoint:
:
intput()//定义输入坐标的函数
{
cin>>x>>y;
}
classline:
publicpoint//派生类line
{
public:
voidal_line(point&,point&,point&);//声明一个计算三条边长度的函数
floatget_l1(){returnl1;}//返回l1的值
floatget_l2(){returnl2;}//返回l2的值
floatget_l3(){returnl3;}//返回l3的值
private:
floatl1,l2,l3;//定义三条线段
};
voidline:
:
al_line(point&p1,point&p2,point&p3)//计算三条边的长度
{
l1=sqrt((p2.get_x()-p1.get_x())*(p2.get_x()-p1.get_x())+
(p2.get_y()-p1.get_y())*(p2.get_y()-p1.get_y()));
l2=sqrt((p3.get_x()-p1.get_x())*(p3.get_x()-p1.get_x())+
(p3.get_y()-p1.get_y())*(p3.get_y()-p1.get_y()));
l3=sqrt((p3.get_x()-p2.get_x())*(p3.get_x()-p2.get_x())+
(p3.get_y()-p2.get_y())*(p3.get_y()-p2.get_y()));
}
classtriangle:
publicline//派生类triangle
{
public:
voidjud_tri(line&);//声明一个判断三角形的种类函数
voidalg_tri(line&);//声明一个计算并输出三角形的面积函数
private:
floatp,s;//定义s计算面积,p为中间变量
};
voidtriangle:
:
jud_tri(line&l)//利用计算好的三边判断三角形的种类
{
if(l.get_l1()+l.get_l2()>l.get_l3()&&l.get_l1()+l.get_l3()>
l.get_l2()&&l.get_l2()+l.get_l3()>l.get_l1())
{
if(l.get_l1()==l.get_l2()&&l.get_l1()==l.get_l3())
{
cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"☆☆☆所求三角形为等边三角形☆☆☆"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<}
l3()||l.get_l1()==l.get_l2()||
l.get_l2()==l.get_l3())
{
cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"☆☆☆所求三角形为等腰三角形☆☆☆"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<}
elseif(l.get_l2()*l.get_l2()+l.get_l3()*l.get_l3()==
l.get_l1()*l.get_l1()||l.get_l1()*l.get_l1()+
l.get_l3()*l.get_l3()==l.get_l2()*l.get_l2()||
l.get_l1()*l.get_l1()+l.get_l2()*l.get_l2()==
l.get_l3()*l.get_l3())
{
cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"☆☆☆所求三角形为直角三角形☆☆☆"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<}
else{
cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"☆☆☆所求三角形为一般三角形☆☆☆"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<}
}
else{
cout<cout<<"\t"<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<cout<<"\t"<<"◆◆◆◆◆◆◆◆◆"<cout<<"\t"<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<cout<<"\t"<<"◆◆◆◆◆◆◆◆◆"<cout<<"\t"<<"◆◆◆◆◆◆◆◆◆◆◆◆◆"<cout<<"\t"<<"所输入的数据不能构成三角形,无法计算面积"<cout<<"\t\t"<<"☆☆☆请重新输入三个顶点的坐标或选择退出程序☆☆☆"<}
}
voidtriangle:
:
alg_tri(line&l)//利用工式计算三角形的面积
{
p=(l.get_l1()+l.get_l2()+l.get_l3())/2.0;
s=sqrt(p*(p-l.get_l1())*(p-l.get_l2())*(p-l.get_l3()));
cout<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"☆☆☆所求三角形为的面积为☆☆☆"<cout<<"\t"<<"☆☆☆"<
cout<<"\t"<<"☆☆☆☆☆☆"<cout<<"\t"<<"★★★★★★★★★★★★★★★★★★★★★★★★★"<}
intmain()
{
intn;
pointp1,p2,p3;//定义三个子对象,用来输入三个坐标准
linel;
trianglet;
cout<<"\t★☆★☆★☆★☆★☆★☆"<cout<<"\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<cout<<"\t★☆★☆★☆★☆★★☆★☆"<cout<<"\t★☆★☆┏━━━━━━━━━━━━━━━━━━━━━━┓☆★☆★"<cout<<"\t★☆★☆┃欢迎来到软件工程C++课程设计三角形种类与面积┃☆★☆★"<cout<<"\t★☆★☆┗━━━━━━━━━━━━━━━━━━━━━━┛☆★☆★"<cout<<"\t★☆★☆☆软工一班☆学号:
18号,19号,20号,21号,22号☆★☆★"<cout<<"\t★☆★☆指导老师:
袁辉勇☆★☆★"<cout<<"\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<cout<<"\t★☆★☆★☆★☆★☆★☆"<cout<cout<<"\t\t"<<"★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t\t"<<"☆☆☆☆☆☆本程序有以下功能☆☆☆☆☆☆"<cout<<"\t\t"<<"☆☆☆请参照下列说明选择您要实现的功能☆☆☆"<cout<<"\t\t"<<"☆☆☆☆☆☆"<cout<<"\t\t"<<"★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※"<cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※"<cout<<"\t\t※※※※☆1.输入三角形的三个顶点坐标※※※"<cout<<"\t\t※※※※☆2.判断三角形的种类※※※"<cout<<"\t\t※※※※☆3.计算并输出三角形的面积※※※"<cout<<"\t\t※※※※☆4.退出程序※※※"<cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※"<cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※"<cout<<"\t\t"<<"☆☆☆请在此处输入并以回车结束:
";
while(cin>>n)//参照上述的功能,输入一个要实现的功能
switch(n)//用switch实现菜单选择功能
{
case1:
cout<cout<<"\t\t"<<"☆☆☆请分别输入三角形的三个顶点坐标☆☆☆"<cout<cout<cout<<"\t\t"<<"请输入顶点1的坐标并以回车结束:
";
p1.intput();//调用三次intput()函数输入三角形三个顶点的坐标(第一次)
cout<<"\t\t"<<"请输入顶点2的坐标并以回车结束:
";
p2.intput();//调用三次intput()函数输入三角形三个顶点的坐标(第二次)
cout<<"\t\t"<<"请输入顶点3的坐标并以回车结束:
";
p3.intput();//调用三次intput()函数输入三角形三个顶点的坐标(第三次)
l.al_line(p1,p2,p3);//调用al_line()函数计算三条边的长度
cout<cout<<"\t"<<"☆☆☆请参照上述功能继续选择您要实现的功能(1~4)☆☆☆"<cout<<"\t\t"<<"☆☆☆请在此处输入并以回车结束:
";break;
case2:
t.jud_tri(l);//调用jud_tri()函数判断三角形的种类
cout<cout<<"\t"<<"☆☆☆请参照上述功能继续选择您要实现的功能(1~4)☆☆☆"<cout<<"\t\t"<<"☆☆☆请在此处输入并以回车结束:
";break;
case3:
t.alg_tri(l);//调用alg_tri()函数计算并输出三角形的面积
cout<cout<<"\t"<<"☆☆☆请参照上述功能继续选择您要实现的功能(1~4)☆☆☆"<cout<<"\t\t"<<"☆☆☆请在此处输入并以回车结束:
";break;
case4:
cout<cout<<"================================>>感谢您的使用!
"<<
"<<==============================="<cout<<"\t\t\t\t"<<"¤¤"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"6¤¤6"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"¤¤¤¤"<cout<<"\t\t\t\t"<<"¤¤"<cout<exit
(1);//退出程序
}
return0;
}
4、程序调试与体会
在程序调试的过程中,首先遇到了不知怎么调用类中的私有成员(如Point类中的x和y),后经过不断查询资料和调试后,才知道了用get_x()和get_y()两个函数来实现。
接着在判断三角形的种类和计算其面积上总出现错误,后来在XX里找了好多的资料,通过数学方法,再将其转化为程序语言,终于解决了这个问题。
然后便是用户界面的设计,这里我弄了很久,一直在设计一个既美观又实用的用户界面,在查询了不少资料还有和大家讨论后,终于得出了一个较好的用户界面。
可是在用户界面出来的时候,又出现了一个问题,那就是一般人会不知道你这个东西的第一步是要干什么,所以后来又经过了优化,加了一个xy方法来告诉用户,我们的程序第一步所要做的就是输入x和y。
最后在使用了while来控制输入的数据时,却发现程序不能退出,后来才发现用exit
(1)函数可以实现这个功能,这才将程序完善好了。
通过此次调试,让我学到了很多,首先是团队合作精神。
一直以来,团队合作的好坏都是作为一个项目能否顺利完的一个重要因素。
然后便是网络对于我们的帮助是非常大的,我们所为学计算机的,就一定要发挥好我们的这个优势。
还有就是书本永远是一个不可或缺的老师。
对于我们来说,老师不可能时刻跟着你,随时随地的帮助你,只有书本可以在你需要帮助的时候,给予你很好的帮助。
5、程序运行结果
在中执行程序,出现以下菜单,如图3所示:
图3主菜单(用户界面)
在图中选择“1”选项,出现图2
图4输入三角形的三个项点坐材料
在图中选择“2”,出现图3
图5通过判断,所输入的数据不能构成三角形,出现了错误
在图中再选择“1”,出现图4
图6重新输入三角形的三个顶点坐标
在图中再选择“2”后再选择“3”,出现图5
图7判断出所输入的数据构成一个直角三角形,且其面积为6
在图中选择“4”,出现图6
图8程序运行完毕,退出
四、结论
通过这次的实践我成功的掌握了类的派生与多级派生的使用,并在程序中使用Get来获取和设置私用成员的值,使用exit()来退出程序。
本程序的难点是对类的派生与多级派生的使用,由于在类的派生上学得不是很好,所以