測繪程序試驗報告_第1頁
測繪程序試驗報告_第2頁
測繪程序試驗報告_第3頁
測繪程序試驗報告_第4頁
測繪程序試驗報告_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗 1 Visual C+.Net環(huán)境和程序設(shè)計初步1. 掌握 VC+.net 語言的基本語法;2. 理解順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計的特點及應(yīng)用;3. 掌握對基于對話框的 MFC 應(yīng)用程序設(shè)計方法;4. 掌握一些簡單算法。5. 編寫一個方位角計算程序。提示:先使用反正切函數(shù)計算,然后利用坐標(biāo)增量 的符號來判斷所在的象限。設(shè)計思路:在按鈕下面添加程序。X 丫同時大于 0 在第一象限,方位角等于 arctan(y/x);X0,Y0 在第二象限,方位角等于 arctan(y/x)+90; X0,Y0 在第三象限,方位角等于arctan(y/x)+180 ; X0 在第四象限,方位角等于

2、arctan(y/x)+270 ;主要代碼:/ 0145110615 ymh 2.1Dlg.h :頭文件protected:HICON m_hlco n;/生成的了消息映射函數(shù)virtual BOOL Onln itDialog();afx_msg void On SysComma nd(UINT nID, LPARAM lParam);afx_msg void On Pai nt();afx_msg HCURSOR On QueryDraglco n();DECLARE_MESSAGE_MAP()界面設(shè)計:public:double x;double y;double Q;afx_msg v

3、oid OnBn ClickedOk();afx_msg void OnBn ClickedCa ncel();afx_msg void OnBn ClickedButto n1();double A;/ 0145110615 ymh 2.1Dlg.cpp :實現(xiàn)文件#in clude stdafx.h#i nclude 0145110615 ymh 2.1.h#i nclude 0145110615 ymh 2.1Dlg.h#in clude #ifdef _DEBUG#defi ne new DEBUG_NEW#en difvoid CMy0145110615ymh21Dlg:O nBn

4、ClickedOk() 計算/ TODO:在此添加控件通知處理程序代碼UpdateData(TRUE);if(x0)if(y0)Q=1;A=ata n(y /x);/x大于 y 大于在第一象限elseQ=4;A=ata n(y /x)+270;/x大于 y 小于在第四象限else if(y0)Q=2;A=ata n(y /x)+90;/x大于 y 小于在第二象限elseQ=3;A=ata n(y /x)+180;/x小于 y 小于在第三象限UpdateData(FALSE);/On OK();void CMy0145110615ymh21Dlg:O nBn ClickedCa ncel() 清

5、除/ TODO:在此添加控件通知處理程序代碼UpdateData(true);x=0;y=o;Q=o;A=0;UpdateData(false);void CMy0145110615ymh21Dlg:0 nBn ClickedButto n1() 退出/ TODO:在此添加控件通知處理程序代碼OnCan cel();運行結(jié)果:坐標(biāo)10象眼4方位角269,21460計尊淸除退出第一次做這個實驗的時候真的覺得挺難得可是當(dāng)我經(jīng)過更難的實驗的洗禮之后在返 回來看它真是頓時親切了許多,其實當(dāng)時是對這個軟件不了解簡單的東西把它想得很復(fù) 雜繞來繞去都不知道該怎么實現(xiàn)一些很簡單的東西了。實驗 2.2 .設(shè)計同

6、一參考橢球下的三維地心坐標(biāo)(笛卡兒坐標(biāo)系)與大地坐標(biāo)系轉(zhuǎn)換的 程序。曲0145110615 ymh 2.1(提示:用 dowhile 迭代,B H 初始為 0 進行迭代,直到 H 的精度達到 0.00001 米)注意:東經(jīng) 0180( Y0),西經(jīng):0-180(丫0)式中,B、L、H 為橢球面上的大地緯度、大地經(jīng)度、大地高;X、丫 Z 為空間直角坐標(biāo);N 為卯酉圈曲率半徑,e 為橢球的偏心率,a 為橢球的長半徑,b 為橢球的短半徑。(WGS84 橢球參數(shù):長半徑 a=6378137m 扁率a=1/298.257223563 )界面設(shè)J _E 0145110615 ymh 2.2主要代碼:/ 0

7、145110615 ymh 2.2Dlg.h :頭文件protected:HICON m_hlco n;/生成的消息映射函數(shù)virtual BOOL Onln itDialog();afx_msg void On SysComma nd(UINT nID, LPARAM lParam);afx_msg void On Pai nt();afx_msg HCURSOR On QueryDragIco n();設(shè)計思路:在按鈕下面設(shè)置主程序,按照指導(dǎo)書給的思路編輯公式大地坐標(biāo)空間直角坐標(biāo)示例煽輯框示例犒輯框示例編輯框示例漏輯框示版扁輯框退出計:DECLARE_MESSAGE_MAP()public

8、:double B;double L;double H;double X;double Y;double Z;afx_msg void OnBn ClickedOk();/ 0145110615 ymh 2.2Dlg.cpp :實現(xiàn)文件#in clude stdafx.h#i nclude 0145110615 ymh 2.2.h#i nclude 0145110615 ymh 2.2Dlg.h#in clude #ifdef _DEBUG#defi ne new DEBUG_NEW#en difvoid CMy0145110615ymh22Dlg:O nBn ClickedOk() 大地坐標(biāo)

9、轉(zhuǎn)換為空間直角坐標(biāo) / TODO:在此添加控件通知處理程序代碼UpdateData(true);double r=1/298.257223563;double e=sqrt(2*r)-(r*r);int a=6378137;double W=sqrt(1-e*e*s in (B)*s in (B);double N=a/W;X=(N+H)*cos(B)*cos(L);Y=(N+H)*cos(B)*cos(L);Z=(N*(1-e*e)+H)*si n( B);UpdateData(false);/OnOK();運行結(jié)果:實驗 2.3 .編寫一個后方交會計算程序。3.1 基本原理及計算公式若將

10、Pa、Pb Pc 看成權(quán),則 P 點的坐標(biāo)即為三個已知點的加權(quán)平均值3.2 計算程序設(shè)計步驟(1)設(shè)計界面, 用于輸入 3 個已知點旳朋棟和一個址測加、和。 以歧匚 于輸出待定點坐標(biāo)的文本框(12個)、靜態(tài)標(biāo)簽框和 Butt on 按鈕;(2)定義文本框控件變量(Value);(3)根據(jù)已知點計算三個內(nèi)角 A、B、C;(4)計算 Tan( Q)、Tan(B)、Tan(丫)、Ta n(A)、Tan (B)、Tan(C);(5)計算 Pa、Pb、Pc;(6)計算待定點坐標(biāo) Xp、Ypo界面要求:三個坐標(biāo)輸入框,兩個角度輸入框HOIZ 2599536. 251204一個坐標(biāo)結(jié)果輸出框一個計算按鈕,一

11、個清除按鈕,一個退出按鈕2.由三角形三個邊長求內(nèi)角函數(shù) 計算公式:設(shè)計思路:通過示例編輯框添加變量,在按鈕下面添加程序。先將a、B、的度分秒 之轉(zhuǎn)換成度利用三角形內(nèi)角和等于 180 算出丫并將丫轉(zhuǎn)換成弧度。接著計算三角形的內(nèi) 角,判斷 P 點是否在危險圓上若不在則計算 P 點坐標(biāo)若在則彈出“該點在危險圓上”。 界面設(shè)計:_fc ds?2-3未知卓坐標(biāo)xp=示例扁輯框Yp=示例騙輯框計算主要代碼:protected:HICON m_hlco n;/生成的消息映射函數(shù)virtual BOOL Onln itDialog();afx_msg void On SysComma nd(UINT nID,

12、 LPARAM lParam);afx_msg void On Pai nt();afx_msg HCURSOR On QueryDragIco n();DECLARE_MESSAGE_MAP()A點坐標(biāo)B點坐標(biāo)XB-示例編輯僚坐標(biāo)示弱購曷輯框YA=示例編輯框YB=示例編輯框O示例編輯框0=示例騙輯框p=示框退岀public:afx_msg void OnEn Cha ngeEdit5();double XA;double YA;double XB;double YB;double XC;double YC;double alfa;double bet;double Xp;double Yp;

13、afx_msg void OnBn ClickedButto n1();afx_msg void OnBn ClickedOk(); 一#in elude stdafx.h#i nclude dss2-3.h#i nclude dss2-3Dlg.h#in clude con st double Pl=3.1415926535897932;#ifdef _DEBUG#defi ne new DEBUG_NEW#en difvoid Cdss23Dlg:O nBn ClickedButto n1()/ TODO:在此添加控件通知處理程序代碼UpdateData(TRUE);double afAB

14、,afAC,afBC,afBA,afCA,afCB,A,B,C,Pa,Pb,Pc; int D1,M1,D2,M2;double S1,S2,alfa1,bet1,gama1,alfa2,bet2,gama2;/將 alfa 轉(zhuǎn)換成度D 仁 in t(alfa);M1=i nt(alfa-D1)*100);S1=(alfa-D1)*100-M1)*100;alfa 仁 D1+M1/60+S1/3600;alfa2=alfa1*PI/180;/將 bet 轉(zhuǎn)換成度D2=i nt(bet);M2=i nt(bet-D2)*100);S2=(bet-D2)*100-M2)*100;bet 仁 D2+

15、M2/60+S2/3600; bet2=bet*PI/180;/計算 gama 的值gama1=180-bet1-alfa1;gama2=gama1*PI/180;將 gama 的值轉(zhuǎn)換成弧度 /計算已知點的三個內(nèi)角afAB=ata n(YB-YA)/(XB-XA);afAC=ata n(YC-YA)/(XC-XA);afBA=ata n( YA-YB)/(XA-XB);afBC=ata n(YC-YB)/(XC-XB);afCA=ata n( YA-YC)/(XA-XC);afCB=ata n(YB-YC)/(XB-XC);A=afAB-afAC;B=afBC-afBA;C=afCA-afC

16、B;/判斷點是否在危險圓上若不在則計算 P 點坐標(biāo)if(alfa+bet+C190)Pa=(ta n(alfa2)*ta n( A)/(ta n(alfa2)-ta n( A);Pb=(ta n( bet2)*ta n(B)/(ta n(be t2)-ta n(B);Pc=(ta n( gama2)*ta n(C)/(ta n( gama2)-ta n(C);Xp=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc); Yp=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc);else/若在則彈出 該點位于危險圓上”MessageBox(_T(”該點位于危險圓上);Updat

17、eData(FALSE);/OnCan cel();void Cdss23Dlg:O nBn ClickedOk()/ TODO:在此添加控件通知處理程序代碼UpdateData(TRUE);XA=0;YA=0;XB=0;YB=0;XC=0;YC=0;alfa=0;bet=0;Xp=0;Yp=0;UpdateData(FALSE);/On OK();;運行結(jié)果:本次實驗剛開始還是遇到了很多問題的比如說根本不就不知道該如何用程序來實現(xiàn)后 方交會這個過程,后來經(jīng)過問同學(xué)、上網(wǎng)查資料等大概弄懂了實現(xiàn)步驟可是寫完程序后 我發(fā)現(xiàn)他根本計算不了點計算按按鈕一點反應(yīng)都沒有。又開始找問題才發(fā)現(xiàn)是 Update

18、Data( FALSE 和 UpdateData(TRUE 忘寫了,還發(fā)現(xiàn)程序中沒有進行度分秒到 度的轉(zhuǎn)換,就順便把這個實現(xiàn)也加進去了。這個程序也就算完成了。實驗三數(shù)組、指針與函數(shù)、實驗?zāi)康恼莆諗?shù)組的定義、引用及應(yīng)用方法。10掌握指針與動態(tài)數(shù)組。掌握函數(shù)的定義、引用及應(yīng)用方法。二、實驗內(nèi)容1.編寫一個求任意多邊形面積的程序。提示:通過界面輸入數(shù)據(jù),并把數(shù)據(jù)保存 在一個二維數(shù)組或一個一維的自定義結(jié)構(gòu)體類型的數(shù)組中,然后再進行計算。要 求計算部分寫成函數(shù)的形式,使計算程序與界面無關(guān)。動態(tài)數(shù)組創(chuàng)建動態(tài)數(shù)組結(jié)構(gòu)體的定義多邊形面積計算原理及算法計算原理: 面積計算的算法: 提示:顯示框用 Cedit 控

19、件變量對每個輸入的坐標(biāo)用 CString str 臨時變量格式化,然后用 CEdit 的控件變量插入 設(shè)計思路:將實現(xiàn)寫在按鈕在下面。添加頂點下面實現(xiàn)創(chuàng)建動態(tài)數(shù)組,確認按鈕實現(xiàn)返 回數(shù)組大小值并將添加的數(shù)據(jù)顯示到顯示框中去,通過計算按鈕實現(xiàn)多邊形面積的計 算,清除按鈕實現(xiàn)清除輸入的數(shù)據(jù),退出按鈕退出程序。主要代 碼: 實 現(xiàn)11protected:界面設(shè)計:HICON m_hlco n;/生成的消息映射函數(shù)virtual BOOL Onln itDialog();afx_msg void On SysComma nd(UINT nID, LPARAM lParam);afx_msg void

20、On Pai nt();afx_msg HCURSOR On QueryDragIco n();DECLARE_MESSAGE_MAP()public:double x;double y;double result;CEdit edit;afx_msg void OnBn ClickedButto n4();afx_msg void OnBn ClickedButto n3();afx_msg void OnBn ClickedButto n2();afx_msg void OnBn ClickedButto n1();afx_msg void OnBn ClickedButto n5();i

21、nt n;double *px;double *py;CEdit m_strdis; 一#in clude stdafx.h#i nclude 0145110615(3).h#i nclude 0145110615(3)Dlg.h#ifdef _DEBUG#defi ne new DEBUG_NEW#en dif/用于應(yīng)用程序關(guān)于”菜單項的 CAboutDlg 對話框double calarea(double x,double y,i nt n)double s=0;int i;for(i=0;i n)MessageBox(_T(Warni ng!);str.Format(_T(No.%d %

22、 lf %lf rn),t,x,y);13m_strdis.ReplaceSel(str);pxt-1=x;pyt-i=y;UpdateData(FALSE);void CMy01451105173Dlg:0 nBn ClickedButto n5()/ TODO:在此添加控件通知處理程序代碼exit(0);運行結(jié)果總結(jié):這個實驗相比前面幾個實驗感覺難了好多。首先是不知道怎么實現(xiàn)動態(tài)數(shù)組也不知 道怎樣將輸入的內(nèi)容顯示到示例編輯框里??傊谘矍暗亩际且欢褑栴},但面臨的問題 總得解決所以就只能看書、上網(wǎng)查資料、問同學(xué)等各種方法來解決問題,最終把問題解 決。實驗四類的創(chuàng)建、實驗?zāi)康?1.掌握面向?qū)ο?/p>

23、編程基本思想142.掌握 VC+.net 中創(chuàng)建類3.掌握建立和使用對象4.掌握運算符號重載5.理解類的繼承和多態(tài)性二、實驗內(nèi)容1.設(shè)計一個角度類。 要求該類具有度分秒至度的換算、 度至度分秒的換算、 度與 弧度的換算等功能。 提示:設(shè)置一個角度大小屬性,并設(shè)定該屬性為缺省屬性; 另設(shè)一個狀態(tài)屬性,表示當(dāng)前設(shè)置的角度大小的形式;度分秒、度、弧度間的相 互轉(zhuǎn)換的方法;定義運算符號(加、減)方法,使得角度類能夠像一種普通的數(shù) 據(jù)類型樣的方便使用。設(shè)計思路:設(shè)計一個角度類在類的頭文件里申明度到度分秒的轉(zhuǎn)換、 度分秒到度的轉(zhuǎn)換、 度到弧度的轉(zhuǎn)換、運算符的重載,在類的.cpp 文件中寫出具體的函數(shù)實現(xiàn),

24、在按鈕下面 調(diào)用類的各個函數(shù)來實現(xiàn)角度的轉(zhuǎn)換。界面設(shè)清除1-I計:15主要代碼:DECLARE_MESSAGE_MAP()public:double dmstodgree(double dmg);聲明度分秒到度的轉(zhuǎn)換函數(shù)double dgreetodms(double drgree);/聲明度到度分秒的轉(zhuǎn)換函數(shù)double dgreetohd(double dgree);/聲明度到弧度的轉(zhuǎn)換函數(shù);DECLARE_MESSAGE_MAP()public:afx_msg void OnBn ClickedCa ncel();double dgree;double dms;double hd;afx

25、_msg void OnBn ClickedButto n1();afx_msg void OnBn ClickedButto n2();afx_msg void OnBn ClickedButto n3();afx_msg void OnBn ClickedOk(); 一void Cymh4Dlg:O nBn ClickedCa ncel()/ TODO:在此添加控件通知處理程序代碼OnCan cel();void Cymh4Dlg:O nBn ClickedButto n1()/ TODO:在此添加控件通知處理程序代碼UpdateData(true);An gle sf;sf.dgreet

26、odms(dgree);UpdateData(false);16void Cymh4Dlg:O nBn ClickedButto n2()/ TODO:在此添加控件通知處理程序代碼UpdateData(true);An gle sf;sf.dmstodgree(dms);UpdateData(false);void Cymh4Dlg:O nBn ClickedButto n3()/ TODO:在此添加控件通知處理程序代碼UpdateData(true);An gle sf;sf.dgreetohd(dgree);UpdateData(false);void Cymh4Dlg:O nBn Cli

27、ckedOk()/ TODO:在此添加控件通知處理程序代碼 /On OK();UpdateData(true);dgree=0;dms=0;hd=0;UpdateData(false);運行結(jié)果:這個實驗調(diào)試最終沒有通過所以沒有結(jié)果這個實驗給我的最大的感受是細節(jié)決定成敗,實踐總會比想象的困難,雖然我非常清 除實驗原理可是但我按照我的思路去寫的時候各種調(diào)試改還是有錯,我不清楚為什么 An gle sf;sf.dgreetodms(dgree);這樣的語句在程序七中調(diào)試能通過而這個程序中卻死活不行實驗五文件一、 實驗?zāi)康恼莆瘴募υ捒虻氖褂梅椒āU莆?C+文件操作的一般步驟及實現(xiàn)方法。 了解 MF

28、C 文件操作的特點及使用方法。二、 實驗內(nèi)容1.編制簡單的 Cass 數(shù)據(jù)文件進行數(shù)據(jù)整理的程序。整理后的數(shù)據(jù)文件中要求無 重復(fù)點數(shù)據(jù),且數(shù)據(jù)按點號大小的升序進行排序。要求整理后的數(shù)據(jù)按與原始數(shù) 據(jù)文件同樣的格式保存為另外一個文件示例數(shù)據(jù)“民用園燃氣.dat ”文件數(shù)據(jù)格式:總點數(shù)點號,編碼,X,Y,H例如:要求:a. 用 SaveFileDialog 和 OpenFileDialog 控件獲取文件打開或保存的文件名。b. 自定義一個測量點數(shù)據(jù)結(jié)構(gòu)體,其元素包括:點號,編碼,X,Y,Hc. 用文本框顯示原始數(shù)據(jù)和整理后的數(shù)據(jù)d. .按編程規(guī)范進行編碼a.讀數(shù)據(jù)、保存數(shù)據(jù)、判斷一個點數(shù)據(jù)是否已經(jīng)

29、存在、排序、在文本框中 顯示文件內(nèi)容等可以分別定義成一個子過程或函數(shù)。c.編程技巧打開文件獲得總點數(shù)根據(jù)點數(shù)調(diào)整數(shù)組的大逐行讀取數(shù)據(jù),判斷該點是否已經(jīng)存在數(shù)組中,若不存在,則把該數(shù)據(jù)存放在數(shù)組中根據(jù)刪除重復(fù)點后的總點數(shù),重新調(diào)整數(shù)組大小按點號大小的升序排序按原數(shù)據(jù)格式輸出到另外一個文件設(shè)計思路:在按鈕下面設(shè)置主程序。通過打開文件按鈕將原文件打開并顯示到示例編輯 框內(nèi),通過保存文件按鈕實現(xiàn)對文件分行、刪除重復(fù)點、排序、保存更改后的文件并把 它顯示到示例編輯框中等操作。18界面設(shè)3 0145110517(5.x)S3計:主要代碼:實現(xiàn)protected:HICON m_hlco n;原始數(shù)捐打開原

30、始數(shù)據(jù)19整理后數(shù)據(jù)示例編輯框保存整理后的數(shù)據(jù)/生成的消息映射函數(shù)virtual BOOL Onln itDialog();afx_msg void On SysComma nd(UINT nID, LPARAM IParam);afx_msg void On Pai nt();afx_msg HCURSOR On QueryDragIco n();DECLARE_MESSAGE_MAP()public:afx_msg void OnBn ClickedOk();afx_msg void OnBn ClickedCa ncel();CStri ng yua nshi;CStri ng xiug

31、ai;CStri ng *CMy0145110615ymh5Dlg:Splitstri ng(CStri ng str,char split,i nt&isubstr);/ 0145110615 ymh 5Dlg.cpp :實現(xiàn)文件#in clude stdafx.h#i nclude 0145110615 ymh 5.h#in clude 0145110615 ymh 5Dlg.h#in clude #i nclude #ifdef _DEBUG#defi ne new DEBUG_NEW#en dif/定義結(jié)構(gòu)體里面的數(shù)據(jù)類型包括點號、編碼、X、丫、Hstruct Poi ntin

32、t nu mber;CStri ng coder;double X;double Y;double H;CStri ng*CMy0145110615ymh5Dlg:Splitstri ng(CStri ngstr,charsplit,i nt& substr)/ 分割函數(shù)int M=0;/ 分割位置int N=0;/ 分割符的總數(shù)CStri ng strLeft=str;CStri ng strRight;/定義兩個字符串變量/計算字符串的總數(shù)while(M!=-1)M=strLeft.Find(split);/查找分割位置并賦給 MstrRight=strLeft.Mid(M+1,s

33、tr.GetLe ngth();把字符串位置和長度信息賦給 strRight 字符串20strLeft=strRight;N+;字符串總數(shù)加一 if(N=O)如果分割符的總數(shù)為字符串?dāng)?shù)就是字符串本身isubstr=1;return NULL;isubstr=N+1;字符串?dāng)?shù)等于分割符數(shù)加CStri ng* pStrSlipt;/創(chuàng)建字符串指針pStrSlipt=new CStri ngisubstr;創(chuàng)建字符串?dāng)?shù)組strLeft=str;CStri ng strLeftss;for(i nt i=0;iN;i+)M=strLeft.Fi nd(split);strLeftss=strLeft

34、丄 eft(M);strRight=strLeft.Mid(M+1,strLeft.GetLe ngth();把字符串位置和長度信息賦給 strRight 字符串strLeft=strRight; pStrSlipti=strLeftss;pStrSliptN=strLeft;return pStrSlipt;void CMy0145110615ymh5Dlg:0 nBn ClickedOk()/ TODO:在此添加控件通知處理程序代碼/On OK();UpdateData(true);CFileDialog dlgFile(TRUE,_T(txt),NULL, OFN_ALLOWMULTIS

35、ELECT|OFN_EXPLORER 文本文件)|*txt);倉 U 建打開文件的對話框if(dlgFile.DoModal()=IDCANCEL)return;如果選擇取消按鈕則返回CStri ng strFileName=dlgFile.GetPathName();獲取打開文件文件全名(含全路徑)setlocale(LC_ALL,);/設(shè)置語言環(huán)境CStdioFile sf;/ 設(shè)置文件對象if(!sf.Ope n(strFileName,CFile:modeRead)return;如果沒有打開文件則返回CString strLine;定義 CString 變量yua nshi.Empty

36、();文件和顯示框建立聯(lián)系BOOL bEOF=sf.ReadString(strLine);把文件中讀取的行之賦給變量 bEOFwhile(bEOF)21yua nshi+=strL ine; bEOF=sf.ReadStri ng(strLi ne); if(bEOF)yua nshi+=_T(n); 判斷文件是否結(jié)束 sf.Close();關(guān)閉文件UpdateData(false); void CMyO14511O615ymh5Dlg:O nBn ClickedCa ncel() / TODO:在此添加控件通知處理程序代碼UpdateData(true);CFileDialog dlgFi

37、le(FALSE,_T(dat),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORE 文本文件)|*dat);倉 U 建保存文件的對話框int TotalPoi nt;總點數(shù)CStri ng *strTmp=NULL; 定義字符串?dāng)?shù)組并初始化 TotalPoi nt=_ttoi(pstrLi ne0); 第一行為總點數(shù)if(TotalPoi nt!=aLi ne-1) MessageBox(_T(數(shù)據(jù)有誤);Poi nt *pPoi nt=new Poi ntTotalPoi nt;創(chuàng)建大小為總點數(shù)的結(jié)構(gòu)體數(shù)組int n;/用 Split 函數(shù)將文件逐行分離,給點結(jié)構(gòu)體

38、賦值for(i nt i=0;iTotalPoi nt;i+)strTmp=Splitstri ng(pstrLi nei+1, ,n);/分離的行逐行存入字符串?dāng)?shù)組中pPoi nti. number=_ttoi(strTmp0);依次給結(jié)構(gòu)體里的元素賦值pPo in ti.coder=strTmp1;pPoi nti.X=_tstof(strTmp2);pPoi nti.Y=_tstof(strTmp3);pPoi nti.H=_tstof(strTmp4);22if(strTmp!=NULL)賦值完畢時釋放字符串?dāng)?shù)組的空間delete strTmp; strTmp=NULL;if(dlgF

39、ile.DoModal()=IDCANCEL)return;CStri ng strFileName=dlgFile.GetPathName(); 徑)setlocale(LC_ALL,); 設(shè)置語言環(huán)境CStdioFile sf;設(shè)置文件對象if(!sf.Ope n(strFileName,CFile:modeRead)return;sf.WriteStri ng(yua nshi);/調(diào)用文件的寫函數(shù)sf.Close();int aLi ne;定義行變量CStri ng *pstrLi ne=Splitstri ng(yua nshi,n,aLi ne); 存入字符串?dāng)?shù)組中如果選擇取消按鈕

40、則返回獲取保存文件的文件全名(含路如果沒有保存文件則返回將文件進行分行并以此/判斷是否有相同的點號若有則刪除點號相同的點for(i nt i=0;iTotalPoi nt;i+)for(i nt j=i+1;jTotalPoi nt;j+)if(pPoi nti. nu mber=pPoi ntj. nu mber)delete pPoi nt;/刪除了點后改變結(jié)構(gòu)體數(shù)組的大小并重新對其賦值for(i nt m=j;mTotalPoi nt-1;m+)pPoi ntm=pPoi ntm+1;TotalPoi nt-;/按點號的生序排列for(i nt i=0;iTotalPoi nt;i+)f

41、or(i nt j=i+1;jpPoi ntj. nu mber)t=pPo in ti. nu mber;pPo in tj. nu mber=t;pPo in ti. nu mber=pPo in tj. nu mber;/輸出調(diào)整后的文件xiugai.Format(_T(%drn),TotalPoi nt);第一行輸出點的總數(shù)CStri ng strOutPut;/定義字符串變量for(i nt i=0;iTotalPoi nt;i+)strOutPut.Format(_T(%d,%s,%lf,%lf,%lf),pPoi nti. number,pPoi nti.code r,pPoi

42、nti.X,pPointi.Y,pPoi nti.H);xiugai=xiugai+strOutPut;/將第一行和其他所有行合并CString strLine;定義 CString 變量xiugai.Empty();文件和顯示框建立聯(lián)系23BOOL bEOF=sf.ReadStri ng(strLi ne);把文件中讀取的行之賦給變量while(bEOF)xiugai+=strL ine;bEOF=sf.ReadStri ng(strLi ne);if(bEOF)yua nshi+=_T(n);sf.Close();關(guān)閉文件UpdateData(false);/OnCancel();總結(jié):這

43、次實 驗的主要問題是遇到主要問題是程序調(diào)試花了很多事間。因為要完完整整的自己寫出一個程序?qū)?我來說還是有難度的,所以我不得不照著書上和網(wǎng)上的一些寫法來寫的所以有一些語句 不是特別清楚,所以調(diào)試的時候很多錯誤都覺得很奇怪。盡管如此還是花了很多時間先 把程序的構(gòu)架和一些語句弄懂了最終才把問題解決實驗六圖形程序設(shè)計一、 實驗?zāi)康恼莆?VC+.net 坐標(biāo)系和各項設(shè)置方法。掌握 GDI 繪圖方法。理解交互式圖形程序設(shè)計二、 實驗內(nèi)容1.下列數(shù)據(jù)為一變形監(jiān)測點的 24 期位移監(jiān)測結(jié)果(分別為 X,Y,H),編制程序繪24bEOF判斷文件是否結(jié)束運行結(jié)果:啟改殳結(jié)構(gòu)體藪組的大小并翅對其制出該點的變形曲線圖

44、,每個方向一個位移序列圖。設(shè)計思路:用類 DeformationCurve 實現(xiàn)原始文件的讀入、文件的拆分、畫圖等功能,調(diào)用類的相關(guān)函數(shù)來實現(xiàn)相應(yīng)的功能。界面設(shè)計:因為是基于當(dāng)文本的所以沒有界面主要代碼:class Deformatio nCurve : public CWndDECLARE_DYNAMIC(Deformatio nCurve)public:Deformatio nCurve();virtual Deformati on Curve();protected:DECLARE_MESSAGE_MAP()public:CStri ng*Deformatio nCurve:Splits

45、tri ng(CStri ngstr,char split, int&isubstr);void Deformatio nCurve:ReadData(double *&X,double *&Y,double *&H);void Deformatio nCurve:Draw(CDC* pDC,CRect & rect);/ Deformatio nCurve.cpp :實現(xiàn)文件#in clude stdafx.h#i nclude 0145110615 ymh 6.h#in clude Deformatio nCurve.h#in clude CStri

46、ng *DeformationCurve:Splitstring(CStringstr,char split,int&isubstr)/分割函數(shù)int M=0;/ 分割位置int N=0;/ 分割符的總數(shù)CStri ng strLeft=str;CStri ng strRight;/定義兩個字符串變量/計算字符串的總數(shù)while(M!=-1)M=strLeft.Find(split);/查找分割位置并賦給 MstrRight=strLeft.Mid(M+1,str.GetLe ngth();把字符串位置和長度信息賦給 strRight 字符串strLeft=strRight;N+;/字

47、符串總數(shù)加一if(N=0)/如果分割符的總數(shù)為字符串?dāng)?shù)就是字符串本身isubstr=1;return NULL;25isubstr=N+1; 字符串?dāng)?shù)等于分割符數(shù)加CStri ng* pStrSlipt;/創(chuàng)建字符串指針pStrSlipt=new CStri ngisubstr;創(chuàng)建字符串?dāng)?shù)組strLeft=str;CStri ng strLeftss;for(i nt i=0;iN;i+)M=strLeft.Fi nd(split);strLeftss=strLeft 丄 eft(M);strRight=strLeft.Mid(M+1,strLeft.GetLe ngth();把字符串位置和

48、長度信息賦給 strRight 字符串strLeft=strRight; pStrSlipti=strLeftss;pStrSliptN=strLeft;return pStrSlipt;void Deformatio nCurve:ReadData(double *&X,double *&Y,double *&H)/讀取原始文件中的數(shù)據(jù)CFileDialog dlgFile(TRUE,_T(txt),NULL, OFN_ALLOWMULTISELECT|OFN_EXPLORER 文本文件)|*txt);倉U建打開文件的對話框if(dlgFile.DoModal()=I

49、DCANCEL)return;如果選擇取消按鈕則返回CStri ng strFileName=dlgFile.GetPathName();獲取打開文件文件全名(含全路徑)setlocale(LC_ALL,);設(shè)置語言環(huán)境CStdioFile sf;/ 設(shè)置文件對象if(!sf.Ope n(strFileName,CFile:modeRead)return;如果沒有打開文件則返回CStri ng str;CStri ng strLi ne;str.Empty();文件和顯示框建立聯(lián)系BOOL bEOF=sf.ReadString(strLine);把文件中讀取的行之賦給變量 bEOFwhile(

50、bEOF)str+=strLi ne;bEOF=sf.ReadStri ng(strLi ne);if(bEOF)st 葉=_T(n);判斷文件是否結(jié)束sf.Close();/ 關(guān)閉文件int aLi ne;定義行變量CStri ng *pstrLi ne=Splitstri ng(str,n,aLi ne);將文件進行分行并以此存入字符串?dāng)?shù)組中if(aL in e2)26MessageBox(_T(”數(shù)據(jù)不完整); return;CStri ng *strTmp=NULL; 定義字符串?dāng)?shù)組并初始化int TotalPoi nt=_ttoi(pstrLi ne0);第一行為總點數(shù)/建立三個大小

51、為總點數(shù)的數(shù)組int n;X= new doubleTotalPoi nt;Y= new doubleTotalPoi nt;H= new doubleTotalPo in t;/間原始數(shù)據(jù)逐行、三個方向分離for(i nt i=1;iSelectObject(&pe n);pDC-Recta ngle(rect);int dOrgX,dOrgY;int dEn dX,dE ndY;dOrgX=rect.left+i nt(0.2*rect.Width();dOrgY=rect.bottom-i nt(0.2*rect.Height();dEn dX=rect.right-i nt(0

52、.1*rect.Width();dEn dY=rect.top+i nt(0.2*rect.Height();pDC-MoveTo(rect.left,rect.top+dOrgY);pDC-Li neTo(rect.right,rect.top+dOrgY);繪制 X 軸pDC-MoveTo(rect.left+dOrgX,rect.bottom);pDC-Li neTo(rect.left+dOrgX,rect.top);繪制 Y 軸int dx,dy;/定義兩個變量用來表是 X 軸和 Y 軸的間隔dy=(dOrgY-dEndY)/3;/Y 軸的間隔為 dx=(dOrgX-dEndX)/2

53、4;/X 軸的間隔為/繪制水平線for(i nt i=0;iMoveTo(dOrgX,dE ndY+i*dy); pDC-Li neTo(dE ndX,dE ndY+i*dy);pDC-SelectObject(pOldPe n);畫筆回到原點LOGFONT lf;/定義變量memset(&l f,0,sizeof(LOGFONT);lf.lfHeight=16;_tcs ncpy_s(lf.lfFaceName, LF_FACESIZE, _T( 宋體),4);CFo nt font;/創(chuàng)建字體fon t.CreateFo ntl ndirectW(&lf);CFont*pO

54、ldFont=pDC-SelectObject(&font);/創(chuàng)建 CFont 指針指向 fontCStri ng str;/繪制時間刻度for(i nt i=1;iMoveTo(dx*i+dOrgX,dOrgY);pDC-Li neTo(dx*i+dOrgX,dOrgY - 5);str.Format(_T(%d),i);if(i!=0) pDC-TextOutW(dx*i+dOrgX, dOrgY + 10,str);pDC-TextOut(dOrgX+400,dOrgY+30,_T(時間);/ 確定 X 軸和 Y 軸的間隔分別是和 個單位pDC-TextOut(dOrgX+30

55、0,dEndY-50,_T(藍:X 方向綠:Y 方向紅:H 方向);pDC-SelectObject(pOldFo nt);畫筆回到原來的位置font.DeleteObject();/刪除 font 的對象/繪制坐標(biāo) X、Y、H 的刻度CFont fon tA;/ 創(chuàng)建坐標(biāo)字體fon tA.CreateFo ntln directW( &lf);pOldFo nt=pDC-SelectObject(&fon tA);pDC-TextOut(dOrgX-60,dE ndY-30,_T(X),1);繪制 X 軸的刻度pDC-TextOut(dOrgX-120,dE ndY-30,_

56、T(Y),1);繪制 Ytt的刻度pDC-TextOutW(dOrgX-180,dEndY-30,_T(H),1);繪制誹由的刻度pDC-SelectObject(pOldFo nt);for(i nt i=0;iTextOutW(dOrgX-60,dE ndY+i*dy,str);for(i nt i=0;iTextOutW(dOrgX-120,dE ndY+i*dy,str);for(i nt i=0;iTextOutW(dOrgX=180,dE ndY+i*dy,str);fon tA.DeleteObject();/調(diào)用函數(shù)讀取數(shù)據(jù),獲得變形數(shù)據(jù)double *X=NULL;doubl

57、e *Y=NULL;double *H=NULL;ReadData(X,Y,H);/ 創(chuàng)建藍色畫筆CPen pen Blue;pe nBlue.CreatePe n(PS_SOLID,2,RGB(0,0,255);pDC-SelectObject(pe nBlue);POINT ptX256;定義結(jié)構(gòu)體變量/實際坐標(biāo)與屏幕坐標(biāo)的轉(zhuǎn)換for(i nt i=0;iPolyli ne(ptX,24);繪制 X 方向的變形曲線/回復(fù)原來繪圖屬性pDC-SelectObject(pOldPe n);pen Blue.DeleteObject();/創(chuàng)建綠色畫筆繪制丫方向變形曲線CPen pen Gree

58、 n;pe nGree n.CreatePe n(PS_SOLID,2,RGB(0,255,0);pDC-SelectObject(pe nGree n);POINT ptY256;for(i nt i=0;iPolyli ne(ptY,24);/回復(fù)原來的繪圖屬性pDC-SelectObject(pOldPe n);pen Gree n.DeleteObject();/創(chuàng)建紅色畫筆繪制 H 方向的變形曲線CPen pen Red;29pe nRed.CreatePe n(PS_SOLID,2,RGB(255,0,0); pDC-SelectObject(pe nRed);POINT ptH2

59、56;for(int i=0;iPolyli ne(ptH,24);/恢復(fù)原來繪圖屬性pDC-SelectObject(pOldPe n);pen Red.CreateObject();運行結(jié)這次實驗也遇到了實驗五同樣的問題調(diào)試的時間也花了好多,但有了之前實驗五的經(jīng)驗做起來稍稍好一些,不過程序運行出來之后我發(fā)現(xiàn)前面的折線有三條而后面卻只有一 條并且老師給的示例里面也只有一條線。我也不清楚我哪兒弄錯了總之改了好多地方還 是這樣。每次做完實驗我都只想感嘆自己的 C+基礎(chǔ)是在是太差了很多東西別人輕而易舉就弄 出來了而我就是要在哪兒搗鼓好久,效率超級低人家實驗八都已近快完成了可我還還停 留在實驗六里不

60、停地出錯不停的改錯, 一次一次的重復(fù)著有的時候真的很煩很想放棄可 是想想老師考試會很難的樣子,萬一掛了就麻煩了還是硬著頭皮往下做,最終還是做出 來了。所以還是不能隨隨便便放棄。30實驗七常用測量程序設(shè)計一、 實驗?zāi)康撵柟填惖膭?chuàng)建與使用掌握數(shù)組參數(shù)的傳遞掌握常用測繪程序設(shè)計的技巧二、 實驗內(nèi)容編寫高斯投影正、反算程序設(shè)計思路:設(shè)計了一個 Transformation 類這個類實現(xiàn)度分秒換成度、度換成度分秒、定義各類坐標(biāo)的坐標(biāo)參數(shù)、計算 S 計算 Bf、正算和反算的功能。變量從示例編輯框中添加,在按鈕下面調(diào)用類的各種函數(shù)來實現(xiàn)坐標(biāo)的轉(zhuǎn)換。 界面設(shè)|JJLE 0145110615 ymh 7S3計:蠢考坐標(biāo)系Spktl當(dāng)?shù)刂醒胱游缇€經(jīng)度示例編輯框大地坐祐B-示例編輯框示例騙輯框L.=示例編輯框Y=示例編輯框正算退出31主要代碼:#pragma on

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論