C++实验报告2015_第1页
C++实验报告2015_第2页
C++实验报告2015_第3页
C++实验报告2015_第4页
C++实验报告2015_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、测绘程序设计(VC.net)上机实验报告(Visual C+.Net)班 级: 学 号: 姓 名: 序 号: 二零一五年六月目 录实验1 Visual C+.Net环境和程序设计初步1实验2 控制结构程序设计.5验3 数组与指针、函数18实验4 类的创建.26实验5 文 件30实验6 图形程序设计.36实验7 点云数据处理44实验8 平差程序设计基础.50总 结58.实验1 Visual C+.net环境和简单程序设计一、实验目的· 掌握Visual S的安装和启动。· 了解VC+ 2008的菜单系统、工具栏和各种基本窗体。· 理解VC+.net开发应用程序的步骤

2、。· 掌握基于对话框的程序设计。· 掌握按钮、文本框和标签框的基本使用方法· 掌握使用MSDN帮助文档设计思路:在按钮下面添加程序。根据海伦公式添加4个变量a.b.c.s的编辑框。界面设计:主要代码:class CMyGJJ_0145130602_ex1Dlg : public CDialog/ 构造public:CMy GJJ_0145130602_ex1Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_MY GJJ_0145130602_ex1_DIALOG ;protected:virtual v

3、oid DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOk();afx_msg void OnBn

4、ClickedCancel();double m_a;double m_b;double m_c;double m_s;afx_msg void OnBnClickedButton1();HCURSOR CMyGJJ_0145130602_ex1Dlg:OnQueryDragIcon()return static_cast<HCURSOR>(m_hIcon);double culsjx(double x,double y, double z)double ret,p;p = (x+y+z)/2;ret = sqrt(p*(p-x)*(p-y)*(p-z);return ret ;v

5、oid CMyGJJ_0145130602_ex1Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码/OnOK();UpdateData(TRUE);m_s = culsjx(m_a ,m_b,m_c);UpdateData(FALSE);void CMy GJJ_0145130602_ex1Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知处理程序代码/OnCancel();m_a=0;m_b=0;m_c=0;m_s=0;UpdateData(FALSE);void CMyGJJ_0145130602_ex1Dlg:OnBnClic

6、kedButton1()/ TODO: 在此添加控件通知处理程序代码exit(0);运行结果:实验2 控制结构程序设计一、实验目的· 掌握VC+.net语言的基本语法;· 理解顺序结构、选择结构和循环结构程序设计的特点及应用;· 掌握对基于对话框的MFC应用程序设计方法;· 掌握一些简单算法。1.编写一个方位角计算程序。提示:先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。·设计思路:x,y同时大于0在第一象限,方位角等于arctan(y/x);X>0,Y<0在第二象限,方位角等于arctan(y/x)+90;X<

7、;0,Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;界面设计:主要代码: class CGJJ_0602_ex21Dlg : public CDialog/ 构造public:CGJJ_0602_ex21Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_0602_EX21_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持

8、/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double x1;double x2;afx_msg void OnEnChangeEdit4();double y1;double y2;double A;double 象限;afx_msg

9、 void OnEnChangeEdit1();afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();afx_msg void OnBnClickedButton1();afx_msg void OnEnChangeEdit3();void CGJJ_0602_ex21Dlg:OnBnClickedOk()x1=0;y1=0;x2=0; y2=0;UpdateData(0);void CGJJ_0602_ex21Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知处理程序代码OnCancel();v

10、oid CGJJ_0602_ex21Dlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码UpdateData(1);A=(y2-y1)/(x2-x1);if (y2-y1)>0&&(x2-x1)>0)象限=1;else if (y2-y1)>0&&(x2-x1)<0) 象限=2; else if (y2-y1)<0&&(x2-x1)<0) 象限=3;else象限=4;UpdateData(0);运行结果:2.设计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换

11、的程序。(提示:用dowhile迭代,B、H初始为0进行迭代,直到H的精度达到0.00001米) 注意:东经0180(Y>0),西经:0-180(Y<0)式中,B、L、H为椭球面上的大地纬度、大地经度、大地高;X、Y、Z为空间直角坐标;N为卯酉圈曲率半径,e为椭球的偏心率,a为椭球的长半径,b为椭球的短半径。 (WGS84椭球参数:长半径a=6378137m,扁率=1/298.257223563)设计思路:先设计好对话框,根据以上公式添加变量然后根据公式编写代码。界面设计:主要代码:class CGJJ_0602_ex22Dlg : public CDialog/ 构造public

12、:CGJJ_0602_ex22Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_0602_EX22_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPain

13、t();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double B;double L;double H;double X;double Y;double Z;afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton1();#define PI 3.14159265358979323846const double f=1/298.257223563;double N,e=sqrt(2*f-f*f); /扁率f,第一偏心率e,卯酉圈半径Ndoub

14、le a=6378137;void CGJJ_0602_ex22Dlg:OnBnClickedButton1()UpdateData(TRUE); /笛卡尔坐标转换为大地坐标double dH,H0;double B2,L2,S,S1;int D,M,D1,M1;if(fabs(X)>=1e-5)L=atan(Y/X)*180/PI;else L=0;if(X>0) L=L;else if(X<0&&Y>0) /计算经度 L=L+180;else L=L-180;if(fabs(X)>=(1e-5)|(fabs(Y)>=(1e-5)B=ata

15、n(Z/sqrt(X*X+Y*Y);H=0;doN=a/sqrt(1-e*e*sin(B)*sin(B);H0=sqrt(X*X+Y*Y)/cos(B)-N;B=atan(Z/(sqrt(X*X+Y*Y)*(1-e*e*N/(N+H); /迭代运算得到H,BdH=H0-H;H=H0;while(fabs(dH)>=(1e-5); /当H的精度达到.00001时跳出循环elseB=0;N=a/sqrt(1-e*e*sin(B)*sin(B);H=sqrt(X*X+Y*Y)/cos(B)-N;B=B*180/PI;B=B+(1e-10);L=L+(1e-10); D=int(B);D1=in

16、t(L);B2=(B-D)*60; /弧度转换成度分秒格式L2=(L-D1)*60;M=int(B2);M1=int(L2);S=(B2-M)*60;S1=(L2-M1)*60;B=D+M/100+S/(1e4);L=D1+M1/100+S1/(1e4);UpdateData(FALSE);void CGJJ_0602_ex22Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double b,l,b1,l1;int D,M,D1,M1;double S,S1;D= int(B);D1 = int(L);M = int

17、(B - D) * 100);M1= int(L - D1) * 100);S = (B-D) * 100 - M) * 100;S1 = (L-D1) * 100 - M1) * 100;b1= D+ M / 60 + S / 3600; /度分秒转化为弧度l1= D1 + M/ 60 + S1 / 3600; b=(b1/180)*PI; l=(l1/180)*PI; N=a/sqrt(1-e*e*sin(b)*sin(b); X=(N+H)*cos(b)*cos(l); /大地测量坐标转化为笛卡尔坐标 Y=(N+H)*cos(b)*sin(l); Z=(N*(1-e*e)+H)*sin(

18、b); UpdateData(FALSE);运行结果:3.编写一个后方交会计算程序。3.1基本原理及计算公式若将Pa、Pb、Pc看成权,则P点的坐标即为三个已知点的加权平均值设计思路:用于输入3个已知点的坐标和三个观测角a、b和g,以及用于输出待定点坐标的文本框(12个)、静态标签框和Button按钮。根据公式以上公式编写代码。界面设计:主要代码:class CGJJ_0602_ex23Dlg : public CDialog/ 构造public:CGJJ_0602_ex23Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_

19、0602_EX23_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double XA

20、;double XB;double YB;double YA;double XC;double YC;double XP;double YP;double ;double ;double ;afx_msg void OnBnClickedButton1();#define PI 3.14159265358979323846void CGJJ_0602_ex23Dlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double afAB,afAC,afBC,afBA,afCA,afCB,A,B,C,Pa,Pb,Pc;int

21、D1,M1,D2,M2;double S1,S2,;/将alfa转换成度D1=int();M1=int(-D1)*100);S1=(-D1)*100-M1)*100;=D1+M1/60+S1/3600;=*PI/180;/将bet转换成度D2=int();M2=int(-D2)*100);S2=(-D2)*100-M2)*100;=D2+M2/60+S2/3600; =*PI/180;/计算gama1的值=180-;=*PI/180;/将gama1的值转换成弧度/计算已知点的三个内角afAB=atan(YB-YA)/(XB-XA);afAC=atan(YC-YA)/(XC-XA);afBA=a

22、tan(YA-YB)/(XA-XB);afBC=atan(YC-YB)/(XC-XB);afCA=atan(YA-YC)/(XA-XC);afCB=atan(YB-YC)/(XB-XC);A=afAB-afAC;B=afBC-afBA;C=afCA-afCB;/判断点是否在危险圆上若不在则计算P点坐标if(+C<170|+C>190)Pa=(tan()*tan(A)/(tan()-tan(A);Pb=(tan()*tan(B)/(tan()-tan(B);Pc=(tan()*tan(C)/(tan()-tan(C);XP=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc)

23、;YP=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc);else/若在则弹出“该点位于危险圆上”MessageBox(_T("该点位于危险圆上");UpdateData(FALSE);/OnCancel();运行结果:实验3 数组与指针、函数一、实验目的· 掌握函数的定义、引用及应用方法。二、实验内容1.编写一个求任意多边形面积的程序。提示:通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。要求计算部分写成函数的形式,使计算程序与界面无关。动态数组创建动态数组 l 结构体的定义 多边形面积计算原理及算法

24、 计算原理: 例如上图:面积计算的算法: 经整理后得:2高斯投影正反算计算函数设计编写高斯投影正算与反算的两个函数,并设计简单界面对函数计算的正确性进行测试。 正算公式:是弧度转换为秒的转换单位,是经度L同当前带中央子午线的差值,单位为秒。X 为当前点到赤道的子午线长度。长半轴第一偏心率反算公式:是要求的点到中央子午线的经度差,为底点纬度 下标“f”表示与有关的量 即,y=0时 x 所对应道的子午弧长注意:高斯投影正反算公式比较复杂,编写程序时变量定义一定要十分的清晰设计思路:首先根据以上公式确定变量个数。将实现操作的写在按钮上。添加顶点按钮上面实现创建动态数组,确认按钮实现返回数组大小值并将

25、添加的数据显示到显示框中去,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据。界面设计:主要代码:class CGJJ_0602_ex3Dlg : public CDialog/ 构造public:CGJJ_0602_ex3Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_0602_EX3_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息

26、映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedCancel();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3

27、();afx_msg void OnBnClickedOk();double x;double y;int n;double *px;double *py;double result;CEdit m_strdis;void CGJJ_0602_ex3Dlg:OnBnClickedButton4()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);result=calarea(px,py,n);UpdateData(FALSE);void CGJJ_0602_ex3Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知处理程序代码Update

28、Data(TRUE);px=new doublen;py=new doublen;UpdateData(FALSE);void CGJJ_0602_ex3Dlg:OnBnClickedButton3()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);delete px;delete py;px=NULL;py=NULL;n=0;result=0;UpdateData(FALSE);int t=0;void CGJJ_0602_ex3Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CString s

29、tr;t+=1;if(t>n)MessageBox(_T("Warning!");str.Format(_T("No.%d % lf %lf rn"),t,x,y);pxt-1=x;pyt-1=y;UpdateData(FALSE);运行结果:实验4 类的创建一、实验目的1. 掌握面向对象编程基本思想2. 掌握VC+.net中创建类3. 掌握建立和使用对象4. 掌握运算符号重载5. 理解类的继承和多态性二、 实验内容1.角度类设计要求该类具有度分秒至度的换算、度至度分秒的换算、度与弧度的换算等功能。提示:设置一个角度大小属性,并设定该属性为缺省属性

30、;另设一个状态属性,表示当前设置的角度大小的形式;度分秒、度、弧度间的相互转换的方法;定义运算符号(加、减)方法,使得角度类能够像一种普通的数据类型样的方便使用;用设计好的角度类重新编写后方交会定点程序。设计思路:先创建一个类,在.h头文件类里编写申明度到度分秒的转换、度分秒到度的转换、度到弧度的转换、运算符的重载。然后在.cpp里面编写具体的函数实现转换。然后再根据以前编写的经验编写一个后方交会定点程序。界面设计:主要代码;class CGJJ_0602_ex4Dlg : public CDialog/ 构造public:CGJJ_0602_ex4Dlg(CWnd* pParent = NU

31、LL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_0602_EX4_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();

32、DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOk();double Xa;double Ya;double Xc;double Yc;double Xb;double Yb;double Xp;double Yp;afx_msg void OnBnClickedCancel();double ;double ;double ;enum AngleStyleDEG,DMS,RAD;class CAngle public:CAngle(double vaule=0,AngleStyle style=DMS);CAngle(void);pr

33、ivate:double dValue;/角度值AngleStyle nstyle;/当前角度值类型double Deg(double dDms)const;double Dms(double dDeg)const;public:/获取制定的类型获取角度值/由于返回的是dValue的引用,所以该值大小可以改变,即可以进行赋值double& operator()(AngleStyle style);/重载,获取指定的类型获取角度值,不可变,是那个costCAngle类型变量的调用double operator()(AngleStyle style) const;/重载运算符+ -frie

34、nd CAngle operator+(const CAngle& m1,const CAngle& m2);friend CAngle operator-(const CAngle& m1,const CAngle& m2);#include "Angle.h"void CGJJ_0602_ex4Dlg:OnBnClickedOk()UpdateData(true);double a,b,c,Pa,Pb,Pc;CAngle A,B,C,ATEMP,BTEMP,CTEMP,;(DMS)=;(DMS)=;(DEG)=180-(DEG)-(DEG

35、);=(DMS);/计算已知点的三个内角a=sqrt(Xc-Xb)*(Xc-Xb)+(Yc-Yb)*(Yc-Yb);b=sqrt(Xc-Xa)*(Xc-Xa)+(Yc-Ya)*(Yc-Ya);c=sqrt(Xb-Xa)*(Xb-Xa)+(Yb-Ya)*(Yb-Ya);A(RAD)=acos(b*b+c*c-a*a)/(2*b*c);B(RAD)=acos(a*a+c*c-b*b)/(2*a*c);C(RAD)=acos(b*b+a*a-c*c)/(2*a*b);ATEMP=+A;BTEMP=+B;CTEMP=+C;/判断点是否在危险圆上若不在则计算P点坐标if(CTEMP(DEG)>17

36、0&&CTEMP(DEG)<190)|(ATEMP(DEG)>170&&ATEMP(DEG)<190)|(BTEMP(DEG)>170&&BTEMP(DEG)<190)MessageBox(_T("该点位于危险圆上");else/若在则弹出“该点位于危险圆上”Pa=(tan(RAD)*tan(A(RAD)/(tan(RAD)-tan(A(RAD);Pb=(tan(RAD)*tan(B(RAD)/(tan(RAD)-tan(B(RAD);Pc=(tan(RAD)*tan(C(RAD)/(tan(RA

37、D)-tan(C(RAD);Xp=(Xa*Pa+Xb*Pb+Xc*Pc)/(Pa+Pb+Pc);Yp=(Ya*Pa+Yb*Pb+Yc*Pc)/(Pa+Pb+Pc);UpdateData(false);void CGJJ_0602_ex4Dlg:OnBnClickedCancel()UpdateData(true);Xa=0;Ya=0;Xb=0;Yb=0;Xc=0;Yc=0;=0;=0;=0;Xp=0;Yp=0;UpdateData(false);运行结果:实验5 文 件一、实验目的· 掌握文件对话框的使用方法。· 掌握C+文件操作的一般步骤及实现方法。· 了解MF

38、C文件操作的特点及使用方法。二、实验内容1. 编制简单的Cass数据文件进行数据整理的程序。整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件示例数据“民用园燃气.dat”文件数据格式:总点数点号,编码,X,Y,H例如:设计思路:设计出两个编辑框存放原始数据和整理后的数据。然后设计一个打开原始数据的按钮,将实现代码写在上面。再放一个保存数据的按钮。界面设计:主要代码:class CGJJ_0602_ex5Dlg : public CDialog/ 构造public:CGJJ_0602_ex5Dlg(CWnd* pPa

39、rent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_GJJ_0602_EX5_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDr

40、agIcon();DECLARE_MESSAGE_MAP()public:CString original;CString after; CString*CGJJ_0602_ex5Dlg:Splitstring(CString str,char split,int &isubstr); afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel();#include <locale.h>#include <string.h>struct Pointint number;CString coder;do

41、uble X;double Y;double H;CString *CGJJ_0602_ex5Dlg:Splitstring(CString str,char split,int &isubstr)/分割函数int M=0;/分割位置int N=0;/分割符的总数CString strLeft=str;CString strRight;/定义两个字符串变量/计算字符串的总数while(M!=-1)M=strLeft.Find(split);/查找分割位置并赋给MstrRight=strLeft.Mid(M+1,str.GetLength();/把字符串位置和长度信息赋给strRight

42、字符串strLeft=strRight;N+;/字符串总数加一if(N=0)/如果分割符的总数为字符串数就是字符串本身isubstr=1;return NULL;isubstr=N+1;/字符串数等于分割符数加CString* pStrSlipt;/创建字符串指针pStrSlipt=new CStringisubstr;/创建字符串数组strLeft=str;CString strLeftss;for(int i=0;i<N;i+)M=strLeft.Find(split);strLeftss=strLeft.Left(M);strRight=strLeft.Mid(M+1,strLef

43、t.GetLength();/把字符串位置和长度信息赋给strRight字符串strLeft=strRight;pStrSlipti=strLeftss;pStrSliptN=strLeft;return pStrSlipt;void CGJJ_0602_ex5Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码OnOK();UpdateData(true);CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.tx

44、t");/创建打开文件的对话框if(dlgFile.DoModal()=IDCANCEL)return;/如果选择取消按钮则返回CString strFileName=dlgFile.GetPathName();/获取打开文件文件全名(含全路径)setlocale(LC_ALL,"");/设置语言环境CStdioFile sf;/设置文件对象if(!sf.Open(strFileName,CFile:modeRead)return;/如果没有打开文件则返回CString strLine;/定义CString变量original.Empty();/文件和显示框建立联

45、系BOOL bEOF=sf.ReadString(strLine);/把文件中读取的行之赋给变量bEOFwhile(bEOF)original+=strLine;bEOF=sf.ReadString(strLine);if(bEOF)original+=_T("n");/判断文件是否结束sf.Close();/关闭文件UpdateData(false);void CGJJ_0602_ex5Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知处理程序代码OnCancel();UpdateData(true);CFileDialog dlgFile(F

46、ALSE,_T("dat"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("文本文件)|*.dat");/创建保存文件的对话框if(dlgFile.DoModal()=IDCANCEL)return;/如果选择取消按钮则返回CString strFileName=dlgFile.GetPathName();/获取保存文件的文件全名(含路径)setlocale(LC_ALL,"");/设置语言环境CStdioFile sf;/设置文件对象if(!sf.Open(strFileName,CFile:

47、modeRead)return;/如果没有保存文件则返回sf.WriteString(original);/调用文件的写函数sf.Close();int aLine;/定义行变量CString *pstrLine=Splitstring(original,'n',aLine);/将文件进行分行并以此存入字符串数组中int TotalPoint;/总点数CString *strTmp=NULL;/定义字符串数组并初始化 TotalPoint=_ttoi(pstrLine0);/第一行为总点数if(TotalPoint!=aLine-1)MessageBox(_T("数据

48、有误"); Point *pPoint=new PointTotalPoint;/创建大小为总点数的结构体数组int n;/用Split函数将文件逐行分离,给点结构体赋值for(int i=0;i<TotalPoint;i+)strTmp=Splitstring(pstrLinei+1,',',n);/分离的行逐行存入字符串数组中pPointi.number=_ttoi(strTmp0);/依次给结构体里的元素赋值 pPointi.coder=strTmp1;pPointi.X=_tstof(strTmp2); pPointi.Y=_tstof(strTmp3)

49、; pPointi.H=_tstof(strTmp4); if(strTmp!=NULL)/赋值完毕时释放字符串数组的空间 delete strTmp; strTmp=NULL; /判断是否有相同的点号若有则删除点号相同的点for(int i=0;i<TotalPoint;i+)for(int j=i+1;j<TotalPoint;j+)if(pPointi.number=pPointj.number)delete pPoint;/删除了点后改变结构体数组的大小并重新对其赋值for(int m=j;m<TotalPoint-1;m+)pPointm=pPointm+1;TotalPoint-;/按点号的生序排列for(int i=0;i<TotalPoint;i+)for(int j=i+1;j<TotalPoint;j+)int t;if(pPointi.number>pPointj.number)t=pPointi.

温馨提示

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

最新文档

评论

0/150

提交评论