测绘程序设计实验4 类的创建2.docx
- 文档编号:23750531
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:11
- 大小:201.45KB
测绘程序设计实验4 类的创建2.docx
《测绘程序设计实验4 类的创建2.docx》由会员分享,可在线阅读,更多相关《测绘程序设计实验4 类的创建2.docx(11页珍藏版)》请在冰豆网上搜索。
测绘程序设计实验4类的创建2
《测绘程序设计(VC.net)》
上机实验报告
(VisualC++.Net)
班级:
学号:
姓名:
序号:
2012-3-27
实验4类的创建
一、实验目的
1.掌握面向对象编程基本思想
2.掌握VC++.net中创建类
3.掌握建立和使用对象
4.掌握运算符号重载
5.理解类的继承和多态性
二、实验内容
1.设计一个角度类。
要求该类具有度分秒至度的换算、度至度分秒的换算、度与
弧度的换算等功能。
提示:
设置一个角度大小属性,并设定该属性为缺省属性;
另设一个状态属性,表示当前设置的角度大小的形式;度分秒、度、弧度间的相
互转换的方法;定义运算符号(加、减)方法,使得角度类能够像一种普通的数
据类型样的方便使用。
2.用设计好的角度类重新编写后方交会定点程序。
实验步骤新建一个基于对话框的MFC文件,并在对话框中添加相应需要的
如下图所示:
分为四个分组编辑框,并且在角度类型中使用combox
其中进行变量设置是其他的变量都是按照之前的设置为valuedouble型
而对于comble则设置为
将添加一个DIALG类型与角度计算建立调用关系
并添加如下代码
添加C++类一个是进行角度转换计算的Angle另一个是进行空间后方交会的Resection
对于Angle须在头文件中添加如下代码
对于Resection的头文件中添加如下代码
实验过程中一定要记得添加头文件
对于角度计算的函数
并且添加相应代码如下所示
voidAngleCompute:
:
OnBnClickedButton1()
{
UpdateData(TRUE);
if(State1==0||State2==0||State3==0)
AfxMessageBox(_T("请选择角度类型"));
else
{
doublea1=a;doubleb1=b;doubles1=s;
AngleA;
A.Angleconverttoarc(State1,a1);
A.Angleconverttoarc(State2,b1);
Angleca(a1),cb(b1),cs(s);
cs=ca+cb;
s1=cs.getval();
A.Angleconverttodegdms(State3,s1);
s=s1;
}
UpdateData(FALSE);
//TODO:
在此添加控件通知处理程序代码
}
voidAngleCompute:
:
OnBnClickedButton2()
{
UpdateData(TRUE);
if(State1==0||State2==0||State3==0)
AfxMessageBox(_T("请选择角度类型"));
else
{
doublea1=a;doubleb1=b;doubles1=s;
AngleA;
A.Angleconverttoarc(State1,a1);
A.Angleconverttoarc(State2,b1);
Angleca(a1),cb(b1),cs(s1);
cs=ca-cb;
s1=cs.getval();
A.Angleconverttodegdms(State3,s1);
s=s1;
}
UpdateData(FALSE);
//TODO:
在此添加控件通知处理程序代码
}
voidAngleCompute:
:
OnBnClickedOk()
{
a=0;b=0;s=0;
UpdateData(FALSE);
doubleAngle:
:
convertdegtodms(doubledDeg)//度转换成度分秒
{
//用于存放度、分、秒三个值的变量
intiDegree,iMin;
doubledSec,dDms;
//dDeg;//十进制角度(度),控件变量
//dDms;//度分秒格式角度,控件变量
doubledTmp;//临时变量
iDegree=int(dDeg);//截取度
dTmp=(dDeg-iDegree)*60;//把度的小数部分转换为分
iMin=int(dTmp);//截取分
dSec=(dTmp-iMin)*60;//把分的小数部分转换为秒
dDms=iDegree+double(iMin)/100+dSec/10000;//合并为度分秒形式
returndDms;
}
doubleAngle:
:
convertdmstodeg(doubledDms)//度分秒转换成度
{
//用于存放度、分、秒三个值的变量
intiDegree,iMin;
doubledSec,dDeg;
//dDeg;//十进制角度(度),控件变量
//dDms;//度分秒格式角度,控件变量
//注意ceil和floor两个取整函数的使用
iDegree=int(dDms);//截取整数部分,即度
iMin=int((dDms-iDegree)*100);//截取分
dSec=((dDms-iDegree)*100-iMin)*100;//获得秒
dDeg=iDegree+double(iMin)/60+dSec/3600;//把分和秒转换成度,再相加
returndDeg;
}
doubleAngle:
:
convertdegtoarc(doubledDeg)//度转换成弧度
{
doubledArc;
dArc=dDeg*PI/180;
returndArc;
}
doubleAngle:
:
convertarctodeg(doubledArc)//弧度转换成度
{
doubledDeg;
dDeg=dArc*180/PI;
returndDeg;
}
Angleoperator+(Angle&a,Angle&b)//友元函数加法重载
{
Anglet;
t.Val=a.Val+b.Val;
returnt;
}
Angleoperator-(Angle&a,Angle&b)//友元函数减法重载
{
Anglet;
t.Val=a.Val-b.Val;
returnt;
}
doubleAngle:
:
Angleconverttoarc(intState,double&angle)//度分秒和度转换成弧度
{
AngleA;
if(State==1)
{
angle=A.convertdmstodeg(angle);//度分秒转换成度
angle=A.convertdegtoarc(angle);//度转换成弧度
}
elseif(State==2)
{
angle=A.convertdegtoarc(angle);//度转换成弧度
}
return0;
}
doubleAngle:
:
Angleconverttodegdms(intState,double&angle)//弧度转换成度或度分秒
{
AngleA;
if(State==1)
{
angle=A.convertarctodeg(angle);
angle=A.convertdegtodms(angle);
}
elseif(State==2)
angle=A.convertarctodeg(angle);
return0;
}
运行成果如下
总体的运行结果是这样的
实验结果本次试验比之前所做的实验的实验量都大好多,而且难度也又增加,试验时间缩短了,但是这个更加考验我们的能力,虽然这个让我们在实验的过程中觉得非常的紧张,但是真的试验结束后还是觉得收获颇丰,这个实验中要添加很多头文件很容易弄混,一点有一个错误就会很难修好,而且在实验的时候要添加主函数和子函数的调用关系。
所以难度大大增加。
在本次试验中出现了一个错误让我一直都不知道怎么修改,
所以再找错的时候就增加了难度与工作量。
我觉得在这个时候可以问问别人,我问了同学,他一下就指出是这个函数相关的错误,我才发现是我在设置的时候设置错了y2的错误,所以就改变了。
但是幸好还是做完了,这其中有些是自己的独立完成的,还有的是通过同学的帮助,在实验过程还发现了一个很严重的问题,对于很多编程的只是不是很了解,所以还是要询问同学了,给我们敲响了警钟,以后一定要认真学习并谨记在心。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测绘程序设计实验4 类的创建2 测绘 程序设计 实验 创建
![提示](https://static.bdocx.com/images/bang_tan.gif)