測繪程序?qū)嶒?yàn)報(bào)告_第1頁
測繪程序?qū)嶒?yàn)報(bào)告_第2頁
測繪程序?qū)嶒?yàn)報(bào)告_第3頁
測繪程序?qū)嶒?yàn)報(bào)告_第4頁
測繪程序?qū)嶒?yàn)報(bào)告_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)一2實(shí)驗(yàn)2.25實(shí)驗(yàn)2.37實(shí)驗(yàn)三12實(shí)驗(yàn)四16實(shí)驗(yàn)五19實(shí)驗(yàn)六25實(shí)驗(yàn)七31實(shí)驗(yàn)八3755實(shí)驗(yàn)1 Visual C+.Net環(huán)境和程序設(shè)計(jì)初步1.掌握 VC+.net 語言的基本語法;2.理解順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的特點(diǎn)及應(yīng)用;3.掌握對基于對話框的 MFC 應(yīng)用程序設(shè)計(jì)方法;4.掌握一些簡單算法。5.編寫一個(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<0,

2、Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;界面設(shè)計(jì):主要代碼:/ 0145110615 ymh 2.1Dlg.h : 頭文件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_MESSAG

3、E_MAP()public:double x;double y;double Q;afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();afx_msg void OnBnClickedButton1();double A;/ 0145110615 ymh 2.1Dlg.cpp : 實(shí)現(xiàn)文件#include "stdafx.h"#include "0145110615 ymh 2.1.h"#include "0145110615 ymh 2.1Dlg.h"#inclu

4、de <math.h>#ifdef _DEBUG#define new DEBUG_NEW#endifvoid CMy0145110615ymh21Dlg:OnBnClickedOk()/計(jì)算/ TODO: 在此添加控件通知處理程序代碼 UpdateData(TRUE);if(x>0)if(y>0)Q=1;A=atan(y/x);/x大于y大于在第一象限elseQ=4;A=atan(y/x)+270;/x大于y小于在第四象限else if(y>0)Q=2;A=atan(y/x)+90;/x大于y小于在第二象限elseQ=3;A=atan(y/x)+180;/x小于

5、y小于在第三象限UpdateData(FALSE);/OnOK();void CMy0145110615ymh21Dlg:OnBnClickedCancel()/清除/ TODO: 在此添加控件通知處理程序代碼UpdateData(true);x=0;y=0;Q=0;A=0;UpdateData(false);void CMy0145110615ymh21Dlg:OnBnClickedButton1()/退出 / TODO: 在此添加控件通知處理程序代碼 OnCancel();運(yùn)行結(jié)果:總 結(jié) 第一次做這個(gè)實(shí)驗(yàn)的時(shí)候真的覺得挺難得可是當(dāng)我經(jīng)過更難的實(shí)驗(yàn)的洗禮之后在返回來看它真是頓時(shí)親切了許多,

6、其實(shí)當(dāng)時(shí)是對這個(gè)軟件不了解簡單的東西把它想得很復(fù)雜繞來繞去都不知道該怎么實(shí)現(xiàn)一些很簡單的東西了。實(shí)驗(yàn)2.2 .設(shè)計(jì)同一參考橢球下的三維地心坐標(biāo)(笛卡兒坐標(biāo)系)與大地坐標(biāo)系轉(zhuǎn)換的程序。(提示:用 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.2

7、57223563)設(shè)計(jì)思路:在按鈕下面設(shè)置主程序,按照指導(dǎo)書給的思路編輯公式界面設(shè)計(jì):主要代碼: / 0145110615 ymh 2.2Dlg.h : 頭文件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 B;double L;do

8、uble H;double X;double Y;double Z;afx_msg void OnBnClickedOk();/ 0145110615 ymh 2.2Dlg.cpp : 實(shí)現(xiàn)文件#include "stdafx.h"#include "0145110615 ymh 2.2.h"#include "0145110615 ymh 2.2Dlg.h"#include <math.h>#ifdef _DEBUG#define new DEBUG_NEW#endifvoid CMy0145110615ymh22Dlg

9、:OnBnClickedOk()/大地坐標(biāo)轉(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*sin(B)*sin(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)*sin(B);UpdateData(false);/OnOK();運(yùn)行結(jié)果:???結(jié)這次實(shí)驗(yàn)的主要問題是算出來的結(jié)果和

10、老師給的不一樣,還有就是空間直角坐標(biāo)向大地坐標(biāo)轉(zhuǎn)換的按鈕點(diǎn)了沒反應(yīng)我檢查了UpdateData(TRUE)和UpdateData(FALSE)也沒有忘寫到最后我還是沒查出問題來,所以想請老師幫我看看什么地方出錯(cuò)了。實(shí)驗(yàn)2.3 .編寫一個(gè)后方交會(huì)計(jì)算程序。3.1 基本原理及計(jì)算公式若將 Pa、Pb、Pc 看成權(quán),則 P 點(diǎn)的坐標(biāo)即為三個(gè)已知點(diǎn)的加權(quán)平均值3.2 計(jì)算程序設(shè)計(jì)步驟(1)設(shè)計(jì)界面,用于輸入 3 個(gè)已知點(diǎn)的坐標(biāo)和三個(gè)觀測角a、b和g,以及用于輸出待定點(diǎn)坐標(biāo)的文本框(12 個(gè))、靜態(tài)標(biāo)簽框和 Button 按鈕;(2)定義文本框控件變量(Value);(3)根據(jù)已知點(diǎn)計(jì)算三個(gè)內(nèi)角 A、B

11、、C;(4)計(jì)算 Tan(a)、Tan()、Tan()、Tan(A)、Tan(B)、Tan(C);(5)計(jì)算 Pa、Pb、Pc;(6)計(jì)算待定點(diǎn)坐標(biāo) Xp、Yp。界面要求:三個(gè)坐標(biāo)輸入框,兩個(gè)角度輸入框一個(gè)坐標(biāo)結(jié)果輸出框一個(gè)計(jì)算按鈕,一個(gè)清除按鈕,一個(gè)退出按鈕。2.由三角形三個(gè)邊長求內(nèi)角函數(shù)計(jì)算公式:-+設(shè)計(jì)思路:通過示例編輯框添加變量,在按鈕下面添加程序。先將、的度分秒之轉(zhuǎn)換成度利用三角形內(nèi)角和等于180算出并將轉(zhuǎn)換成弧度。接著計(jì)算三角形的內(nèi)角,判斷P點(diǎn)是否在危險(xiǎn)圓上若不在則計(jì)算P點(diǎn)坐標(biāo)若在則彈出“該點(diǎn)在危險(xiǎn)圓上”。界面設(shè)計(jì):主要代碼:protected:HICON m_hIcon; / 生

12、成的消息映射函數(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 OnEnChangeEdit5();double XA;double YA;double XB;double YB;double XC;double YC;double alfa;double bet;double Xp;dou

13、ble Yp;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedOk();#include "stdafx.h"#include "dss2-3.h"#include "dss2-3Dlg.h"#include <math.h>const double PI=3.1415926535897932;#ifdef _DEBUG#define new DEBUG_NEW#endifvoid Cdss23Dlg:OnBnClickedButton1()/ TODO:

14、 在此添加控件通知處理程序代碼UpdateData(TRUE);double afAB,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)換成度D1=int(alfa);M1=int(alfa-D1)*100);S1=(alfa-D1)*100-M1)*100;alfa1=D1+M1/60+S1/3600;alfa2=alfa1*PI/180;/將bet轉(zhuǎn)換成度D2=int(bet);M2=int(bet-D2)*100);S

15、2=(bet-D2)*100-M2)*100;bet1=D2+M2/60+S2/3600; bet2=bet*PI/180;/計(jì)算gama1的值gama1=180-bet1-alfa1;gama2=gama1*PI/180;/將gama1的值轉(zhuǎn)換成弧度/計(jì)算已知點(diǎn)的三個(gè)內(nèi)角afAB=atan(YB-YA)/(XB-XA);afAC=atan(YC-YA)/(XC-XA);afBA=atan(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

16、=afBC-afBA;C=afCA-afCB;/判斷點(diǎn)是否在危險(xiǎn)圓上若不在則計(jì)算P點(diǎn)坐標(biāo)if(alfa+bet+C<170|alfa+bet+C>190)Pa=(tan(alfa2)*tan(A)/(tan(alfa2)-tan(A);Pb=(tan(bet2)*tan(B)/(tan(bet2)-tan(B);Pc=(tan(gama2)*tan(C)/(tan(gama2)-tan(C);Xp=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc);Yp=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc);else/若在則彈出“該點(diǎn)位于危險(xiǎn)圓上”MessageB

17、ox(_T("該點(diǎn)位于危險(xiǎn)圓上");UpdateData(FALSE);/OnCancel();void Cdss23Dlg:OnBnClickedOk()/ 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);/OnOK();;運(yùn)行結(jié)果:總 結(jié) 本次實(shí)驗(yàn)剛開始還是遇到了很多問題的比如說根本不就不知道該如何用程序來實(shí)現(xiàn)后方交會(huì)這個(gè)過程,后來經(jīng)過問同學(xué)、上網(wǎng)查資料等大概弄懂了實(shí)現(xiàn)步驟可是寫完程序后我發(fā)現(xiàn)他根本計(jì)算不

18、了點(diǎn)計(jì)算按按鈕一點(diǎn)反應(yīng)都沒有。又開始找問題才發(fā)現(xiàn)是UpdateData(FALSE)和UpdateData(TRUE)忘寫了,還發(fā)現(xiàn)程序中沒有進(jìn)行度分秒到度的轉(zhuǎn)換,就順便把這個(gè)實(shí)現(xiàn)也加進(jìn)去了。這個(gè)程序也就算完成了。 實(shí)驗(yàn) 三 數(shù)組、指針與函數(shù)一、實(shí)驗(yàn)?zāi)康?#183; 掌握數(shù)組的定義、引用及應(yīng)用方法。· 掌握指針與動(dòng)態(tài)數(shù)組。· 掌握函數(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ù)

19、組l 結(jié)構(gòu)體的定義多邊形面積計(jì)算原理及算法計(jì)算原理:=面積計(jì)算的算法:L提示:顯示框用 Cedit 控件變量對每個(gè)輸入的坐標(biāo) 用 CString str 臨時(shí)變量 格式化,然后用 CEdit 的控件變量插入設(shè)計(jì)思路:將實(shí)現(xiàn)寫在按鈕在下面。添加頂點(diǎn)下面實(shí)現(xiàn)創(chuàng)建動(dòng)態(tài)數(shù)組,確認(rèn)按鈕實(shí)現(xiàn)返回?cái)?shù)組大小值并將添加的數(shù)據(jù)顯示到顯示框中去,通過計(jì)算按鈕實(shí)現(xiàn)多邊形面積的計(jì)算,清除按鈕實(shí)現(xiàn)清除輸入的數(shù)據(jù),退出按鈕退出程序。界面設(shè)計(jì):主要代碼:/ 實(shí)現(xiàn)protected:HICON m_hIcon; / 生成的消息映射函數(shù)virtual BOOL OnInitDialog();afx_msg void OnSysC

20、ommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double x;double y;double result;CEdit edit;afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton1();afx_

21、msg void OnBnClickedButton5();int n;double *px;double *py;CEdit m_strdis;#include "stdafx.h"#include "0145110615(3).h"#include "0145110615(3)Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于應(yīng)用程序“關(guān)于”菜單項(xiàng)的CAboutDlg 對話框double calarea(double x,double y,int n)double s=0;int

22、i;for(i=0;i<n;i+)s+=0.5*(xi+xi+1)*(yi+1-yi);return s;void CMy01451105173Dlg:OnBnClickedButton4()/ TODO: 在此添加控件通知處理程序代碼 UpdateData(TRUE);result=calarea(px,py,n);UpdateData(FALSE);void CMy01451105173Dlg:OnBnClickedButton3()/ TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);px=new doublen;py=new doublen;UpdateD

23、ata(FALSE);void CMy01451105173Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知處理程序代碼/ TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);delete px;delete py;px=NULL;py=NULL;n=0;result=0;m_strdis.SetWindowTextW(_T("");UpdateData(FALSE);int t=0;void CMy01451105173Dlg:OnBnClickedButton1()/ TODO: 在此添加控件通知處理程序代碼Upda

24、teData(TRUE);CString str;t+=1;if(t>n)MessageBox(_T("Warning!");str.Format(_T("No.%d % lf %lf rn"),t,x,y);m_strdis.ReplaceSel(str);pxt-1=x;pyt-1=y;UpdateData(FALSE);void CMy01451105173Dlg:OnBnClickedButton5()/ TODO: 在此添加控件通知處理程序代碼exit(0);運(yùn)行結(jié)果:總 結(jié):這個(gè)實(shí)驗(yàn)相比前面幾個(gè)實(shí)驗(yàn)感覺難了好多。首先是不知道怎么實(shí)現(xiàn)動(dòng)態(tài)

25、數(shù)組也不知道怎樣將輸入的內(nèi)容顯示到示例編輯框里??傊谘矍暗亩际且欢褑栴},但面臨的問題總得解決所以就只能看書、上網(wǎng)查資料、問同學(xué)等各種方法來解決問題,最終把問題解決。 實(shí)驗(yàn) 四 類的創(chuàng)建一、實(shí)驗(yàn)?zāi)康?. 掌握面向?qū)ο缶幊袒舅枷?. 掌握 VC+.net 中創(chuàng)建類3. 掌握建立和使用對象4. 掌握運(yùn)算符號(hào)重載5. 理解類的繼承和多態(tài)性二、實(shí)驗(yàn)內(nèi)容1.設(shè)計(jì)一個(gè)角度類。要求該類具有度分秒至度的換算、度至度分秒的換算、度與弧度的換算等功能。提示:設(shè)置一個(gè)角度大小屬性,并設(shè)定該屬性為缺省屬性;另設(shè)一個(gè)狀態(tài)屬性,表示當(dāng)前設(shè)置的角度大小的形式;度分秒、度、弧度間的相互轉(zhuǎn)換的方法;定義運(yùn)算符號(hào)(加、減)方法

26、,使得角度類能夠像一種普通的數(shù)據(jù)類型樣的方便使用。設(shè)計(jì)思路:設(shè)計(jì)一個(gè)角度類在類的頭文件里申明度到度分秒的轉(zhuǎn)換、度分秒到度的轉(zhuǎn)換、度到弧度的轉(zhuǎn)換、運(yùn)算符的重載,在類的.cpp文件中寫出具體的函數(shù)實(shí)現(xiàn),在按鈕下面調(diào)用類的各個(gè)函數(shù)來實(shí)現(xiàn)角度的轉(zhuǎn)換。界面設(shè)計(jì):主要代碼: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_

27、MESSAGE_MAP()public:afx_msg void OnBnClickedCancel();double dgree;double dms;double hd;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedOk(); void Cymh4Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知處理程序代碼OnCancel();void Cymh4Dlg:O

28、nBnClickedButton1()/ TODO: 在此添加控件通知處理程序代碼UpdateData(true);Angle sf;sf.dgreetodms(dgree);UpdateData(false);void Cymh4Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知處理程序代碼UpdateData(true);Angle sf;sf.dmstodgree(dms);UpdateData(false);void Cymh4Dlg:OnBnClickedButton3()/ TODO: 在此添加控件通知處理程序代碼UpdateData(true);An

29、gle sf;sf.dgreetohd(dgree);UpdateData(false);void Cymh4Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知處理程序代碼/OnOK();UpdateData(true);dgree=0;dms=0;hd=0;UpdateData(false); 運(yùn)行結(jié)果:這個(gè)實(shí)驗(yàn)調(diào)試最終沒有通過所以沒有結(jié)果總 結(jié) 這個(gè)實(shí)驗(yàn)給我的最大的感受是細(xì)節(jié)決定成敗,實(shí)踐總會(huì)比想象的困難,雖然我非常清除實(shí)驗(yàn)原理可是但我按照我的思路去寫的時(shí)候各種調(diào)試改還是有錯(cuò),我不清楚為什么Angle sf; sf.dgreetodms(dgree);這樣的語句在程序七

30、中調(diào)試能通過而這個(gè)程序中卻死活不行。實(shí)驗(yàn) 五文 件一、實(shí)驗(yàn)?zāi)康?#183; 掌握文件對話框的使用方法。· 掌握 C+文件操作的一般步驟及實(shí)現(xiàn)方法。· 了解 MFC 文件操作的特點(diǎn)及使用方法。二、實(shí)驗(yàn)內(nèi)容1. 編制簡單的 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例如:要求:a.用SaveFileDialog和OpenFileDialog控件獲取文件打開或保存的文件名。b.自定義一個(gè)

31、測量點(diǎn)數(shù)據(jù)結(jié)構(gòu)體,其元素包括:點(diǎn)號(hào),編碼,X,Y,Hc.用文本框顯示原始數(shù)據(jù)和整理后的數(shù)據(jù)d.按編程規(guī)范進(jìn)行編碼a. 讀數(shù)據(jù)、保存數(shù)據(jù)、判斷一個(gè)點(diǎn)數(shù)據(jù)是否已經(jīng)存在、排序、在文本框中顯示文件內(nèi)容等可以分別定義成一個(gè)子過程或函數(shù)。c.編程技巧打開文件獲得總點(diǎn)數(shù)根據(jù)點(diǎn)數(shù)調(diào)整數(shù)組的大逐行讀取數(shù)據(jù),判斷該點(diǎn)是否已經(jīng)存在數(shù)組中,若不存在,則把該數(shù)據(jù)存放在數(shù)組中根據(jù)刪除重復(fù)點(diǎn)后的總點(diǎn)數(shù),重新調(diào)整數(shù)組大小按點(diǎn)號(hào)大小的升序排序按原數(shù)據(jù)格式輸出到另外一個(gè)文件設(shè)計(jì)思路:在按鈕下面設(shè)置主程序。通過打開文件按鈕將原文件打開并顯示到示例編輯框內(nèi),通過保存文件按鈕實(shí)現(xiàn)對文件分行、刪除重復(fù)點(diǎn)、排序、保存更改后的文件并把它顯示

32、到示例編輯框中等操作。界面設(shè)計(jì):主要代碼:/ 實(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 OnBnClickedCancel();CString yuan

33、shi;CString xiugai; CString *CMy0145110615ymh5Dlg:Splitstring(CString str,char split,int &isubstr);/ 0145110615 ymh 5Dlg.cpp : 實(shí)現(xiàn)文件#include "stdafx.h"#include "0145110615 ymh 5.h"#include "0145110615 ymh 5Dlg.h"#include <locale.h>#include <string.h>#ifde

34、f _DEBUG#define new DEBUG_NEW#endif/定義結(jié)構(gòu)體里面的數(shù)據(jù)類型包括點(diǎn)號(hào)、編碼、X、Y、Hstruct Pointint number;CString coder;double X;double Y;double H;CString *CMy0145110615ymh5Dlg:Splitstring(CString str,char split,int &isubstr)/分割函數(shù)int M=0;/分割位置int N=0;/分割符的總數(shù)CString strLeft=str;CString strRight;/定義兩個(gè)字符串變量/計(jì)算字符串的總數(shù)whil

35、e(M!=-1)M=strLeft.Find(split);/查找分割位置并賦給MstrRight=strLeft.Mid(M+1,str.GetLength();/把字符串位置和長度信息賦給strRight字符串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 strLeft

36、ss;for(int i=0;i<N;i+)M=strLeft.Find(split);strLeftss=strLeft.Left(M);strRight=strLeft.Mid(M+1,strLeft.GetLength();/把字符串位置和長度信息賦給strRight字符串strLeft=strRight;pStrSlipti=strLeftss;pStrSliptN=strLeft;return pStrSlipt;void CMy0145110615ymh5Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知處理程序代碼/OnOK();UpdateData(t

37、rue);CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt");/創(chuàng)建打開文件的對話框if(dlgFile.DoModal()=IDCANCEL)return;/如果選擇取消按鈕則返回CString strFileName=dlgFile.GetPathName();/獲取打開文件文件全名(含全路徑)setlocale(LC_ALL,"");/設(shè)置語言環(huán)境CStdioFile sf;/設(shè)置文件對象if(!

38、sf.Open(strFileName,CFile:modeRead)return;/如果沒有打開文件則返回CString strLine;/定義CString變量yuanshi.Empty();/文件和顯示框建立聯(lián)系BOOL bEOF=sf.ReadString(strLine);/把文件中讀取的行之賦給變量bEOFwhile(bEOF)yuanshi+=strLine;bEOF=sf.ReadString(strLine);if(bEOF)yuanshi+=_T("n");/判斷文件是否結(jié)束sf.Close();/關(guān)閉文件UpdateData(false);void C

39、My0145110615ymh5Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知處理程序代碼UpdateData(true);CFileDialog dlgFile(FALSE,_T("dat"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("文本文件)|*.dat");/創(chuàng)建保存文件的對話框if(dlgFile.DoModal()=IDCANCEL)return;/如果選擇取消按鈕則返回CString strFileName=dlgFile.GetPathName();/獲取保存文件

40、的文件全名(含路徑)setlocale(LC_ALL,"");/設(shè)置語言環(huán)境CStdioFile sf;/設(shè)置文件對象if(!sf.Open(strFileName,CFile:modeRead)return;/如果沒有保存文件則返回sf.WriteString(yuanshi);/調(diào)用文件的寫函數(shù)sf.Close();int aLine;/定義行變量CString *pstrLine=Splitstring(yuanshi,'n',aLine);/將文件進(jìn)行分行并以此存入字符串?dāng)?shù)組中int TotalPoint;/總點(diǎn)數(shù)CString *strTmp=NU

41、LL;/定義字符串?dāng)?shù)組并初始化 TotalPoint=_ttoi(pstrLine0);/第一行為總點(diǎn)數(shù)if(TotalPoint!=aLine-1)MessageBox(_T("數(shù)據(jù)有誤"); 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(

42、strTmp0);/依次給結(jié)構(gòu)體里的元素賦值 pPointi.coder=strTmp1;pPointi.X=_tstof(strTmp2); pPointi.Y=_tstof(strTmp3); 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.n

43、umber)delete pPoint;/刪除了點(diǎn)后改變結(jié)構(gòu)體數(shù)組的大小并重新對其賦值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.number;pPointj.number=t;pPointi.number=pPointj.number;/輸出調(diào)整后的文件xiugai

44、.Format(_T("%drn"),TotalPoint);/第一行輸出點(diǎn)的總數(shù)CString strOutPut;/定義字符串變量for(int i=0;i<TotalPoint;i+)strOutPut.Format(_T("%d,%s,%lf,%lf,%lf"),pPointi.number,pPointi.coder,pPointi.X,pPointi.Y,pPointi.H);xiugai=xiugai+strOutPut;/將第一行和其他所有行合并CString strLine;/定義CString變量xiugai.Empty();/

45、文件和顯示框建立聯(lián)系BOOL bEOF=sf.ReadString(strLine);/把文件中讀取的行之賦給變量bEOFwhile(bEOF) xiugai+=strLine;bEOF=sf.ReadString(strLine);if(bEOF)yuanshi+=_T("n");/判斷文件是否結(jié)束sf.Close();/關(guān)閉文件 UpdateData(false);/OnCancel();運(yùn)行結(jié)果:總 結(jié): 這次實(shí)驗(yàn)的主要問題是遇到主要問題是程序調(diào)試花了很多事間。因?yàn)橐晖暾淖约簩懗鲆粋€(gè)程序?qū)ξ襾碚f還是有難度的,所以我不得不照著書上和網(wǎng)上的一些寫法來寫的所以有一些語

46、句不是特別清楚,所以調(diào)試的時(shí)候很多錯(cuò)誤都覺得很奇怪。盡管如此還是花了很多時(shí)間先把程序的構(gòu)架和一些語句弄懂了最終才把問題解決 實(shí)驗(yàn) 六 圖形程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?#183; 掌握 VC+.net 坐標(biāo)系和各項(xiàng)設(shè)置方法。· 掌握 GDI 繪圖方法。· 理解交互式圖形程序設(shè)計(jì)二、實(shí)驗(yàn)內(nèi)容1.下列數(shù)據(jù)為一變形監(jiān)測點(diǎn)的 24 期位移監(jiān)測結(jié)果(分別為 X,Y,H),編制程序繪制出該點(diǎn)的變形曲線圖,每個(gè)方向一個(gè)位移序列圖。設(shè)計(jì)思路:用類DeformationCurve實(shí)現(xiàn)原始文件的讀入、文件的拆分、畫圖等功能,調(diào)用類的相關(guān)函數(shù)來實(shí)現(xiàn)相應(yīng)的功能。界面設(shè)計(jì):因?yàn)槭腔诋?dāng)文本的所以沒有界面主要

47、代碼:class DeformationCurve : public CWndDECLARE_DYNAMIC(DeformationCurve)public:DeformationCurve();virtual DeformationCurve();protected:DECLARE_MESSAGE_MAP()public:CString *DeformationCurve:Splitstring(CString str,char split,int &isubstr);void DeformationCurve:ReadData(double *&X,double *&

48、;Y,double *&H);void DeformationCurve:Draw(CDC* pDC,CRect& rect);/ DeformationCurve.cpp : 實(shí)現(xiàn)文件#include "stdafx.h"#include "0145110615 ymh 6.h"#include "DeformationCurve.h"#include <locale.h>CString *DeformationCurve:Splitstring(CString str,char split,int &a

49、mp;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字符串strLeft=strRight;N+;/字符串總數(shù)加一if(N=0)/如果分割符的總數(shù)為字符串?dāng)?shù)就是字符串本身isubstr=1;return NULL;isubstr=N+1

50、;/字符串?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,strLeft.GetLength();/把字符串位置和長度信息賦給strRight字符串strLeft=strRight;pStrSlipti=strLeftss;pStrSliptN=strL

51、eft;return pStrSlipt;void DeformationCurve:ReadData(double *&X,double *&Y,double *&H)/讀取原始文件中的數(shù)據(jù) CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt");/創(chuàng)建打開文件的對話框if(dlgFile.DoModal()=IDCANCEL)return;/如果選擇取消按鈕則返回CString strFileName=dlgFile.GetPathName();/獲取打開文件文件全名(含全路徑)setlocale(LC_ALL,"");/設(shè)置語言環(huán)境CStdioFile sf;/設(shè)置文件對象if(!sf.Open(strFileName,CFile:modeRead)return;/如果沒有打開文件則返回CString str;CStri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論