版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、測(cè)繪程序設(shè)計(jì)(VC.net)上機(jī)實(shí)驗(yàn)報(bào)告(Visual C+.Net)班 級(jí): 學(xué) 號(hào): 姓 名: 序 號(hào): 二零一五年六月目 錄實(shí)驗(yàn)1 Visual C+.Net環(huán)境和程序設(shè)計(jì)初步1實(shí)驗(yàn)2 控制結(jié)構(gòu)程序設(shè)計(jì).5驗(yàn)3 數(shù)組與指針、函數(shù)18實(shí)驗(yàn)4 類的創(chuàng)建.26實(shí)驗(yàn)5 文 件30實(shí)驗(yàn)6 圖形程序設(shè)計(jì).36實(shí)驗(yàn)7 點(diǎn)云數(shù)據(jù)處理44實(shí)驗(yàn)8 平差程序設(shè)計(jì)基礎(chǔ).50總 結(jié)58.實(shí)驗(yàn)1 Visual C+.net環(huán)境和簡(jiǎn)單程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?#183; 掌握Visual S的安裝和啟動(dòng)。· 了解VC+ 2008的菜單系統(tǒng)、工具欄和各種基本窗體。· 理解VC+.net開發(fā)應(yīng)用程序的步驟
2、。· 掌握基于對(duì)話框的程序設(shè)計(jì)。· 掌握按鈕、文本框和標(biāo)簽框的基本使用方法· 掌握使用MSDN幫助文檔設(shè)計(jì)思路:在按鈕下面添加程序。根據(jù)海倫公式添加4個(gè)變量a.b.c.s的編輯框。界面設(shè)計(jì):主要代碼:class CMyGJJ_0145130602_ex1Dlg : public CDialog/ 構(gòu)造public:CMy GJJ_0145130602_ex1Dlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_MY GJJ_0145130602_ex1_DIALOG ;protected:virtual v
3、oid DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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);運(yùn)行結(jié)果:實(shí)驗(yàn)2 控制結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?#183; 掌握VC+.net語言的基本語法;· 理解順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的特點(diǎn)及應(yīng)用;· 掌握對(duì)基于對(duì)話框的MFC應(yīng)用程序設(shè)計(jì)方法;· 掌握一些簡(jiǎn)單算法。1.編寫一個(gè)方位角計(jì)算程序。提示:先使用反正切函數(shù)計(jì)算,然后利用坐標(biāo)增量的符號(hào)來判斷所在的象限。·設(shè)計(jì)思路:x,y同時(shí)大于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;界面設(shè)計(jì):主要代碼: class CGJJ_0602_ex21Dlg : public CDialog/ 構(gòu)造public:CGJJ_0602_ex21Dlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_0602_EX21_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持
8、/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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);運(yùn)行結(jié)果:2.設(shè)計(jì)同一參考橢球下的三維地心坐標(biāo)(笛卡兒坐標(biāo)系)與大地坐標(biāo)系轉(zhuǎn)換
11、的程序。(提示:用dowhile迭代,B、H初始為0進(jìn)行迭代,直到H的精度達(dá)到0.00001米) 注意:東經(jīng)0180(Y>0),西經(jīng):0-180(Y<0)式中,B、L、H為橢球面上的大地緯度、大地經(jīng)度、大地高;X、Y、Z為空間直角坐標(biāo);N為卯酉圈曲率半徑,e為橢球的偏心率,a為橢球的長半徑,b為橢球的短半徑。 (WGS84橢球參數(shù):長半徑a=6378137m,扁率=1/298.257223563)設(shè)計(jì)思路:先設(shè)計(jì)好對(duì)話框,根據(jù)以上公式添加變量然后根據(jù)公式編寫代碼。界面設(shè)計(jì):主要代碼:class CGJJ_0602_ex22Dlg : public CDialog/ 構(gòu)造public
12、:CGJJ_0602_ex22Dlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_0602_EX22_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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); /笛卡爾坐標(biāo)轉(zhuǎn)換為大地坐標(biāo)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) /計(jì)算經(jīng)度 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); /迭代運(yùn)算得到H,BdH=H0-H;H=H0;while(fabs(dH)>=(1e-5); /當(dāng)H的精度達(dá)到.00001時(shí)跳出循環(huán)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; /弧度轉(zhuǎn)換成度分秒格式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; /度分秒轉(zhuǎn)化為弧度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); /大地測(cè)量坐標(biāo)轉(zhuǎn)化為笛卡爾坐標(biāo) Y=(N+H)*cos(b)*sin(l); Z=(N*(1-e*e)+H)*sin(
18、b); UpdateData(FALSE);運(yùn)行結(jié)果:3.編寫一個(gè)后方交會(huì)計(jì)算程序。3.1基本原理及計(jì)算公式若將Pa、Pb、Pc看成權(quán),則P點(diǎn)的坐標(biāo)即為三個(gè)已知點(diǎn)的加權(quán)平均值設(shè)計(jì)思路:用于輸入3個(gè)已知點(diǎn)的坐標(biāo)和三個(gè)觀測(cè)角a、b和g,以及用于輸出待定點(diǎn)坐標(biāo)的文本框(12個(gè))、靜態(tài)標(biāo)簽框和Button按鈕。根據(jù)公式以上公式編寫代碼。界面設(shè)計(jì):主要代碼:class CGJJ_0602_ex23Dlg : public CDialog/ 構(gòu)造public:CGJJ_0602_ex23Dlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_
19、0602_EX23_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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轉(zhuǎn)換成度D1=int();M1=int(-D1)*100);S1=(-D1)*100-M1)*100;=D1+M1/60+S1/3600;=*PI/180;/將bet轉(zhuǎn)換成度D2=int();M2=int(-D2)*100);S2=(-D2)*100-M2)*100;=D2+M2/60+S2/3600; =*PI/180;/計(jì)算gama1的值=180-;=*PI/180;/將gama1的值轉(zhuǎn)換成弧度/計(jì)算已知點(diǎn)的三個(gè)內(nèi)角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;/判斷點(diǎn)是否在危險(xiǎn)圓上若不在則計(jì)算P點(diǎn)坐標(biāo)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/若在則彈出“該點(diǎn)位于危險(xiǎn)圓上”MessageBox(_T("該點(diǎn)位于危險(xiǎn)圓上");UpdateData(FALSE);/OnCancel();運(yùn)行結(jié)果:實(shí)驗(yàn)3 數(shù)組與指針、函數(shù)一、實(shí)驗(yàn)?zāi)康?#183; 掌握函數(shù)的定義、引用及應(yīng)用方法。二、實(shí)驗(yàn)內(nèi)容1.編寫一個(gè)求任意多邊形面積的程序。提示:通過界面輸入數(shù)據(jù),并把數(shù)據(jù)保存在一個(gè)二維數(shù)組或一個(gè)一維的自定義結(jié)構(gòu)體類型的數(shù)組中,然后再進(jìn)行計(jì)算。要求計(jì)算部分寫成函數(shù)的形式,使計(jì)算程序與界面無關(guān)。動(dòng)態(tài)數(shù)組創(chuàng)建動(dòng)態(tài)數(shù)組 l 結(jié)構(gòu)體的定義 多邊形面積計(jì)算原理及算法
24、 計(jì)算原理: 例如上圖:面積計(jì)算的算法: 經(jīng)整理后得:2高斯投影正反算計(jì)算函數(shù)設(shè)計(jì)編寫高斯投影正算與反算的兩個(gè)函數(shù),并設(shè)計(jì)簡(jiǎn)單界面對(duì)函數(shù)計(jì)算的正確性進(jìn)行測(cè)試。 正算公式:是弧度轉(zhuǎn)換為秒的轉(zhuǎn)換單位,是經(jīng)度L同當(dāng)前帶中央子午線的差值,單位為秒。X 為當(dāng)前點(diǎn)到赤道的子午線長度。長半軸第一偏心率反算公式:是要求的點(diǎn)到中央子午線的經(jīng)度差,為底點(diǎn)緯度 下標(biāo)“f”表示與有關(guān)的量 即,y=0時(shí) x 所對(duì)應(yīng)道的子午弧長注意:高斯投影正反算公式比較復(fù)雜,編寫程序時(shí)變量定義一定要十分的清晰設(shè)計(jì)思路:首先根據(jù)以上公式確定變量個(gè)數(shù)。將實(shí)現(xiàn)操作的寫在按鈕上。添加頂點(diǎn)按鈕上面實(shí)現(xiàn)創(chuàng)建動(dòng)態(tài)數(shù)組,確認(rèn)按鈕實(shí)現(xiàn)返回?cái)?shù)組大小值并將
25、添加的數(shù)據(jù)顯示到顯示框中去,通過計(jì)算按鈕實(shí)現(xiàn)多邊形面積的計(jì)算,清除按鈕實(shí)現(xiàn)清除輸入的數(shù)據(jù)。界面設(shè)計(jì):主要代碼:class CGJJ_0602_ex3Dlg : public CDialog/ 構(gòu)造public:CGJJ_0602_ex3Dlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_0602_EX3_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息
26、映射函數(shù)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);運(yùn)行結(jié)果:實(shí)驗(yàn)4 類的創(chuàng)建一、實(shí)驗(yàn)?zāi)康?. 掌握面向?qū)ο缶幊袒舅枷?. 掌握VC+.net中創(chuàng)建類3. 掌握建立和使用對(duì)象4. 掌握運(yùn)算符號(hào)重載5. 理解類的繼承和多態(tài)性二、 實(shí)驗(yàn)內(nèi)容1.角度類設(shè)計(jì)要求該類具有度分秒至度的換算、度至度分秒的換算、度與弧度的換算等功能。提示:設(shè)置一個(gè)角度大小屬性,并設(shè)定該屬性為缺省屬性
30、;另設(shè)一個(gè)狀態(tài)屬性,表示當(dāng)前設(shè)置的角度大小的形式;度分秒、度、弧度間的相互轉(zhuǎn)換的方法;定義運(yùn)算符號(hào)(加、減)方法,使得角度類能夠像一種普通的數(shù)據(jù)類型樣的方便使用;用設(shè)計(jì)好的角度類重新編寫后方交會(huì)定點(diǎn)程序。設(shè)計(jì)思路:先創(chuàng)建一個(gè)類,在.h頭文件類里編寫申明度到度分秒的轉(zhuǎn)換、度分秒到度的轉(zhuǎn)換、度到弧度的轉(zhuǎn)換、運(yùn)算符的重載。然后在.cpp里面編寫具體的函數(shù)實(shí)現(xiàn)轉(zhuǎn)換。然后再根據(jù)以前編寫的經(jīng)驗(yàn)編寫一個(gè)后方交會(huì)定點(diǎn)程序。界面設(shè)計(jì):主要代碼;class CGJJ_0602_ex4Dlg : public CDialog/ 構(gòu)造public:CGJJ_0602_ex4Dlg(CWnd* pParent = NU
31、LL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_0602_EX4_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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;/角度值A(chǔ)ngleStyle nstyle;/當(dāng)前角度值類型double Deg(double dDms)const;double Dms(double dDeg)const;public:/獲取制定的類型獲取角度值/由于返回的是dValue的引用,所以該值大小可以改變,即可以進(jìn)行賦值double& operator()(AngleStyle style);/重載,獲取指定的類型獲取角度值,不可變,是那個(gè)costCAngle類型變量的調(diào)用double operator()(AngleStyle style) const;/重載運(yùn)算符+ -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);/計(jì)算已知點(diǎn)的三個(gè)內(nèi)角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;/判斷點(diǎn)是否在危險(xiǎn)圓上若不在則計(jì)算P點(diǎn)坐標(biāo)if(CTEMP(DEG)>17
36、0&&CTEMP(DEG)<190)|(ATEMP(DEG)>170&&ATEMP(DEG)<190)|(BTEMP(DEG)>170&&BTEMP(DEG)<190)MessageBox(_T("該點(diǎn)位于危險(xiǎn)圓上");else/若在則彈出“該點(diǎn)位于危險(xiǎn)圓上”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);運(yùn)行結(jié)果:實(shí)驗(yàn)5 文 件一、實(shí)驗(yàn)?zāi)康?#183; 掌握文件對(duì)話框的使用方法。· 掌握C+文件操作的一般步驟及實(shí)現(xiàn)方法。· 了解MF
38、C文件操作的特點(diǎn)及使用方法。二、實(shí)驗(yàn)內(nèi)容1. 編制簡(jiǎn)單的Cass數(shù)據(jù)文件進(jìn)行數(shù)據(jù)整理的程序。整理后的數(shù)據(jù)文件中要求無重復(fù)點(diǎn)數(shù)據(jù),且數(shù)據(jù)按點(diǎn)號(hào)大小的升序進(jìn)行排序。要求整理后的數(shù)據(jù)按與原始數(shù)據(jù)文件同樣的格式保存為另外一個(gè)文件示例數(shù)據(jù)“民用園燃?xì)?dat”文件數(shù)據(jù)格式:總點(diǎn)數(shù)點(diǎn)號(hào),編碼,X,Y,H例如:設(shè)計(jì)思路:設(shè)計(jì)出兩個(gè)編輯框存放原始數(shù)據(jù)和整理后的數(shù)據(jù)。然后設(shè)計(jì)一個(gè)打開原始數(shù)據(jù)的按鈕,將實(shí)現(xiàn)代碼寫在上面。再放一個(gè)保存數(shù)據(jù)的按鈕。界面設(shè)計(jì):主要代碼:class CGJJ_0602_ex5Dlg : public CDialog/ 構(gòu)造public:CGJJ_0602_ex5Dlg(CWnd* pPa
39、rent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對(duì)話框數(shù)據(jù)enum IDD = IDD_GJJ_0602_EX5_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)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)/分割函數(shù)int M=0;/分割位置int N=0;/分割符的總數(shù)CString strLeft=str;CString strRight;/定義兩個(gè)字符串變量/計(jì)算字符串的總數(shù)while(M!=-1)M=strLeft.Find(split);/查找分割位置并賦給MstrRight=strLeft.Mid(M+1,str.GetLength();/把字符串位置和長度信息賦給strRight
42、字符串strLeft=strRight;N+;/字符串總數(shù)加一if(N=0)/如果分割符的總數(shù)為字符串?dāng)?shù)就是字符串本身isubstr=1;return NULL;isubstr=N+1;/字符串?dāng)?shù)等于分割符數(shù)加CString* pStrSlipt;/創(chuàng)建字符串指針pStrSlipt=new CStringisubstr;/創(chuàng)建字符串?dāng)?shù)組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");/創(chuàng)建打開文件的對(duì)話框if(dlgFile.DoModal()=IDCANCEL)return;/如果選擇取消按鈕則返回CString strFileName=dlgFile.GetPathName();/獲取打開文件文件全名(含全路徑)setlocale(LC_ALL,"");/設(shè)置語言環(huán)境CStdioFile sf;/設(shè)置文件對(duì)象if(!sf.Open(strFileName,CFile:modeRead)return;/如果沒有打開文件則返回CString strLine;/定義CString變量original.Empty();/文件和顯示框建立聯(lián)
45、系BOOL bEOF=sf.ReadString(strLine);/把文件中讀取的行之賦給變量bEOFwhile(bEOF)original+=strLine;bEOF=sf.ReadString(strLine);if(bEOF)original+=_T("n");/判斷文件是否結(jié)束sf.Close();/關(guān)閉文件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");/創(chuàng)建保存文件的對(duì)話框if(dlgFile.DoModal()=IDCANCEL)return;/如果選擇取消按鈕則返回CString strFileName=dlgFile.GetPathName();/獲取保存文件的文件全名(含路徑)setlocale(LC_ALL,"");/設(shè)置語言環(huán)境CStdioFile sf;/設(shè)置文件對(duì)象if(!sf.Open(strFileName,CFile:
47、modeRead)return;/如果沒有保存文件則返回sf.WriteString(original);/調(diào)用文件的寫函數(shù)sf.Close();int aLine;/定義行變量CString *pstrLine=Splitstring(original,'n',aLine);/將文件進(jìn)行分行并以此存入字符串?dāng)?shù)組中int TotalPoint;/總點(diǎn)數(shù)CString *strTmp=NULL;/定義字符串?dāng)?shù)組并初始化 TotalPoint=_ttoi(pstrLine0);/第一行為總點(diǎn)數(shù)if(TotalPoint!=aLine-1)MessageBox(_T("數(shù)據(jù)
48、有誤"); Point *pPoint=new PointTotalPoint;/創(chuàng)建大小為總點(diǎn)數(shù)的結(jié)構(gòu)體數(shù)組int n;/用Split函數(shù)將文件逐行分離,給點(diǎn)結(jié)構(gòu)體賦值for(int i=0;i<TotalPoint;i+)strTmp=Splitstring(pstrLinei+1,',',n);/分離的行逐行存入字符串?dāng)?shù)組中pPointi.number=_ttoi(strTmp0);/依次給結(jié)構(gòu)體里的元素賦值 pPointi.coder=strTmp1;pPointi.X=_tstof(strTmp2); pPointi.Y=_tstof(strTmp3)
49、; pPointi.H=_tstof(strTmp4); if(strTmp!=NULL)/賦值完畢時(shí)釋放字符串?dāng)?shù)組的空間 delete strTmp; strTmp=NULL; /判斷是否有相同的點(diǎn)號(hào)若有則刪除點(diǎn)號(hào)相同的點(diǎn)for(int i=0;i<TotalPoint;i+)for(int j=i+1;j<TotalPoint;j+)if(pPointi.number=pPointj.number)delete pPoint;/刪除了點(diǎn)后改變結(jié)構(gòu)體數(shù)組的大小并重新對(duì)其賦值for(int m=j;m<TotalPoint-1;m+)pPointm=pPointm+1;TotalPoint-;/按點(diǎn)號(hào)的生序排列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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租房退房要求打掃衛(wèi)生的合同(2篇)
- 咨詢服務(wù)類合同(2篇)
- 人教A版湖南省名校聯(lián)考聯(lián)合體2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試題
- 初中體育+障礙跑+作業(yè)設(shè)計(jì)
- 2023年國家公務(wù)員錄用考試《申論》真題(副省卷)及答案解析
- 第4課《一著驚海天-目擊我國航母艦載戰(zhàn)斗機(jī)首架次成功著艦》八年級(jí)語文上冊(cè)精講同步課堂(統(tǒng)編版)
- 西南林業(yè)大學(xué)《操作系統(tǒng)原理》2022-2023學(xué)年期末試卷
- 西京學(xué)院《新媒體交互設(shè)計(jì)》2022-2023學(xué)年第一學(xué)期期末試卷
- 獲獎(jiǎng)過程說明附件8
- 西京學(xué)院《工程地質(zhì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 工程造價(jià)咨詢服務(wù)收費(fèi)標(biāo)準(zhǔn)--魯價(jià)費(fèi)發(fā)〔2007〕205號(hào)
- 第一次工地會(huì)議內(nèi)容與議程
- 工作面安裝瓦斯監(jiān)控安全技術(shù)措施
- (2021更新)國家開放大學(xué)電大《課程與教學(xué)論》形考任務(wù)4試題及答案
- 單門門禁一體機(jī)操作流程
- 施工現(xiàn)場(chǎng)安全知識(shí)答題試卷-附答案版4頁
- 腸套疊實(shí)用教案
- 學(xué)??倓?wù)處行事歷
- 勝利油田鉆完井液技術(shù)現(xiàn)狀及發(fā)展趨勢(shì)鉆井院
- 通信工程勘察設(shè)計(jì)費(fèi)取費(fèi)標(biāo)準(zhǔn)[整理版]
- 墩身外觀質(zhì)量缺陷與防治
評(píng)論
0/150
提交評(píng)論