GPSGPZDA數(shù)據(jù)解析C語言_第1頁
GPSGPZDA數(shù)據(jù)解析C語言_第2頁
GPSGPZDA數(shù)據(jù)解析C語言_第3頁
GPSGPZDA數(shù)據(jù)解析C語言_第4頁
GPSGPZDA數(shù)據(jù)解析C語言_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、摘要GPS(Global Positioning System)可說是目前最熱門、最受人矚目的一項(xiàng)科技。簡單的說,GPS是利用位于地球同步軌道上的同步衛(wèi)星,以其相對位置的關(guān)系,來測出精確的位置,事實(shí)上,接收機(jī)往往可以鎖住4顆以上的衛(wèi)星,這時(shí),接收機(jī)可按衛(wèi)星的星座分布分成若干組,每組4顆,然后通過算法挑選出誤差最小的一組用作定位,從而提高精度。GPS除了可作為精確的定位工具之外,同時(shí)也可以用作精密的測量工具。在進(jìn)行大范圍、大面積的地面測量時(shí),往往受限于地球本身的弧度與測量儀器的精密程度,甚至于當(dāng)時(shí)的天候狀況或測量人員本身的許多因素,導(dǎo)致測量的結(jié)果產(chǎn)生或多或少的誤差。倘若利用GPS來作為測量工具,

2、由于人造衛(wèi)星高懸于地表上空,受地表彎曲弧度的影響相對減少。透過GPS與GIS的結(jié)合,更可以讓我們更快速、精確地處理所需的資料。發(fā)明準(zhǔn)確的計(jì)時(shí)工具之后的短時(shí)間內(nèi),沒有人會(huì)想象得到有了準(zhǔn)確的時(shí)間會(huì)帶來改變世界的沖擊,影響了我們的生活,新興的產(chǎn)品和服務(wù)產(chǎn)業(yè)都由其引發(fā)。GPS對精確的位置就有如時(shí)鐘對精確的時(shí)間一樣,因此其得到大范圍使用。由于GPS定位需要非常精確的時(shí)間,每顆GPS衛(wèi)星上都有精密的原子鐘,所以發(fā)送的信號可以附帶精確的時(shí)間信息。對于接收機(jī)也就有一定要求,GPS衛(wèi)星接收機(jī)種類很多,根據(jù)型號分為測地型、全站型、定時(shí)型、手持型、集成型;根據(jù)用途分為車載式、船載式、機(jī)載式、星載式、彈載式。 隨著通

3、信技術(shù)的迅速發(fā)展,為適應(yīng)社會(huì)的需求,滿足用戶的需要,必須提高軟件開發(fā)水平,近些年隨著嵌入式操作系統(tǒng)的興起,嵌入式終端與GPS的結(jié)合更加完善了GPS的可視性、功能性和操作性,使GPS的泛用性得到增強(qiáng),用戶的數(shù)量增多使功能需求越來越復(fù)雜,其中就有部分用戶對時(shí)間精度要求較高,需要專門的語句格式來解析,這也是GPZDA得到應(yīng)用并推廣的原因之一。無論是生活還是軍事,GPS全球衛(wèi)星定位系統(tǒng)都已經(jīng)成為最重要的定位系統(tǒng)。它的信號所包含的信息中有位置信號和時(shí)間信號,NMEA-0183協(xié)議的其他語句格式解析可以為用戶指明自己的所處方位,時(shí)間信息卻不是很準(zhǔn)確。用戶所需要的除了準(zhǔn)確的位置信息,還有收到信號時(shí)的準(zhǔn)確時(shí)間

4、。GPZDA是NMEA0183協(xié)議中專門為解析時(shí)間準(zhǔn)備的編碼,比NMEA0183協(xié)議中的其他語句格式更加精確,因此其專用性受到用戶認(rèn)可。經(jīng)過20余年的實(shí)踐證明,GPS系統(tǒng)是一個(gè)高精度、全天候和全球性的無線電導(dǎo)航、定位和定時(shí)的多功能系統(tǒng)。 GPS技術(shù)已經(jīng)發(fā)展成為多領(lǐng)域、多模式、多用途、多機(jī)型的國際性高新技術(shù)產(chǎn)業(yè)。關(guān)鍵字:GPS 0183協(xié)議 GPZDA目 錄圖索引1前言2第一章GPS原理3第二章0183協(xié)議簡介42.1編譯技術(shù)的簡介42.2語法格式42.3協(xié)議類型4信息源5查詢5屬性52.4 GPZDA語句格式5第三章方案設(shè)計(jì)63.1總程序83.2程序運(yùn)行截圖11設(shè)計(jì)中遇到的問題及解決方案14心

5、得體會(huì)15參考文獻(xiàn)16圖索引圖1 GPS衛(wèi)星環(huán)繞圖3圖2 NMEA-0183協(xié)議框架4圖3 編譯過程流程圖4圖4 主流程圖7圖5 解析子流程圖8圖6 程序運(yùn)行截圖112圖7 程序運(yùn)行截圖212圖8 程序運(yùn)行截圖313圖 9 程序運(yùn)行截圖413圖10 程序運(yùn)行截圖514前言 GPS全球衛(wèi)星定位系統(tǒng)是目前世界上應(yīng)用最廣的定位系統(tǒng),其準(zhǔn)確性與可靠性都是首屈一指,由于GPS技術(shù)所具有的全天候、高精度和自動(dòng)測量的特點(diǎn),作為先進(jìn)的測量手段和新的生產(chǎn)力,已經(jīng)融入了國民經(jīng)濟(jì)建設(shè)、國防建設(shè)和社會(huì)發(fā)展的各個(gè)應(yīng)用領(lǐng)域。GPS的信號不僅能傳輸三維位置和三維速度,還能傳輸時(shí)間信號,它的衛(wèi)星系統(tǒng)是在地面監(jiān)測站的監(jiān)控下進(jìn)行

6、工作的,衛(wèi)星上的精密電子鐘經(jīng)常與監(jiān)測站校時(shí),以保證時(shí)間信號的準(zhǔn)確。因此,其時(shí)間信號也是GPS信號解析的一部分。全球定位系統(tǒng)由三部分構(gòu)成:(1)地面控制部分,由主控站(負(fù)責(zé)管理、協(xié)調(diào)整個(gè)地面控制系統(tǒng)的 工作)、地面天線(在主控站的控制下,向衛(wèi)星注入尋電文)、監(jiān)測站(數(shù)據(jù)自動(dòng)收集中心)和通訊輔助系統(tǒng)(數(shù)據(jù)傳輸)組成;(2)空間部分,由24顆衛(wèi)星組成,分布在6個(gè)道平面上;(3)用戶裝置部分, 主要由GPS接收機(jī)和衛(wèi)星天線組成。 全球定位系統(tǒng)的主要用途:(1)陸地應(yīng)用,主要包括車輛導(dǎo)航、應(yīng)急反應(yīng)、大氣物理觀測、地球物理資源勘探、工程測量、變形監(jiān)測、地殼運(yùn)動(dòng)監(jiān)測、市政規(guī)劃控制等;(2)海洋應(yīng)用,包括遠(yuǎn)洋

7、船最佳航程航線測定、船只實(shí)時(shí)調(diào)度與導(dǎo)航、海洋救援、海洋探寶、水文地質(zhì)測量以及海洋平臺(tái)定位、海平面升降監(jiān)測等;(3)航空航天應(yīng)用,包括飛機(jī)導(dǎo)航、航空遙感姿態(tài)控制、低軌衛(wèi)星定軌、導(dǎo)彈制導(dǎo)、航空救援和載人航天器防護(hù)探測等。GPS的主要特點(diǎn):(1)全天候;(2)全球覆蓋;(3)三維定速定時(shí)高精度;(4)快速省時(shí)高效率;(5)應(yīng)用廣泛多功能。NMEA-0183是美國國家海洋電子協(xié)會(huì)為海用電子設(shè)備制定的標(biāo)準(zhǔn)格式。目前業(yè)已成了GPS導(dǎo)航設(shè)備統(tǒng)一的RTCM標(biāo)準(zhǔn)協(xié)議。大多數(shù)常見的GPS接收機(jī)、GPS數(shù)據(jù)處理軟件、導(dǎo)航軟件都遵守或者至少兼容這個(gè)協(xié)議。GPS接收機(jī)根據(jù)NMEA-0183協(xié)議的標(biāo)準(zhǔn)規(guī)范,將位置、速度等

8、信息通過串口傳送到PC機(jī)、PDA等設(shè)備。NMEA通訊協(xié)議所規(guī)定的通訊語句都是以ASCII碼為基礎(chǔ)的,NMEA-0183協(xié)議語句的數(shù)據(jù)格式如下:“$”為語句起始標(biāo)志;“,”為域分隔符;“*”為校驗(yàn)和識別符,其后面的兩位數(shù)為校驗(yàn)和,代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個(gè)字符);“/”為終止符,所有的語句必須以它來結(jié)束,也就是ASCII字符的“回車”(十六進(jìn)制的0D)和“換行”(十六進(jìn)制的0A)。NMEA-0183協(xié)議包括GPGGA,GPRMC,GPGSA,GPGSV,GPZDA等語句格式,其中GPZDA的功能就是解析衛(wèi)星信號中的時(shí)間信息,將其信號序列變?yōu)榉菍I(yè)人員可讀取的文字。

9、通過這次課程設(shè)計(jì)我們可以了解,如何用GPZDA解析GPS的時(shí)間信號,在計(jì)算機(jī)上輸出普通用戶所能理解的語句,讓用戶能夠在時(shí)間信息這方面更加精確地得到信息,給用戶提供更可靠的更高水準(zhǔn)的服務(wù)。第一章GPS原理GPS全球衛(wèi)星定位系統(tǒng)由21顆工作衛(wèi)星和3顆備用衛(wèi)星組成。它們分布在6個(gè)等間距的軌道平面上,每個(gè)軌道面上有4顆工作衛(wèi)星。GPS能覆蓋全球,能夠連續(xù)、實(shí)時(shí)、隱蔽地定位,一次定位時(shí)間僅幾秒到十幾秒,用戶不發(fā)射任何電磁信號,只要接受衛(wèi)星導(dǎo)航信號即可定位,所以可全天候晝夜作業(yè)。 GPS的衛(wèi)星系統(tǒng)對于地面觀測者來說,每天將提前4分鐘見到同一顆GPS衛(wèi)星位于地平線以上的衛(wèi)星顆數(shù)隨著時(shí)間和地點(diǎn)的不同而不同,最

10、少可見到4顆,最多可見到11顆。地面設(shè)備監(jiān)控衛(wèi)星上的各種設(shè)備是否工作正常,以及衛(wèi)星是否一直沿著預(yù)定軌道運(yùn)行。除此之外,使用者接收機(jī)能夠捕獲到按一定衛(wèi)星高度截止角所選擇的待測衛(wèi)星的信號,并跟蹤這些衛(wèi)星的運(yùn)行,對所接收到的GPS信號進(jìn)行變換、放大和處理,以便測量出GPS信號從衛(wèi)星到接收機(jī)天線的傳播時(shí)間,解譯出GPS衛(wèi)星所發(fā)送的導(dǎo)航電文,實(shí)時(shí)地圖1 GPS衛(wèi)星環(huán)繞圖計(jì)算出測站的三維位置,三維速度和時(shí)間。GPS通過掌握衛(wèi)星的位置,測定所在地點(diǎn)與衛(wèi)星之間的距離,運(yùn)用數(shù)學(xué)計(jì)算測得測站的三維位置,另外,接收機(jī)往往可以鎖住4顆以上的衛(wèi)星,收到四顆則加上高程值這時(shí),接收機(jī)可按衛(wèi)星的星座分布分成若干組,每組4顆,

11、然后通過算法挑選出誤差最小的一組用作定位,從而提高精度。要了解衛(wèi)星所處的準(zhǔn)確位置,需要優(yōu)化設(shè)計(jì)衛(wèi)星運(yùn)行軌道,并且,地面監(jiān)測站要連續(xù)不斷監(jiān)測衛(wèi)星的運(yùn)行狀態(tài),適時(shí)發(fā)送控制指令,使衛(wèi)星保持在正確的運(yùn)行軌道。每顆GPS衛(wèi)星上都裝置有十分精密的電子鐘,并由監(jiān)測站經(jīng)常進(jìn)行校準(zhǔn)。衛(wèi)星除了發(fā)送定位導(dǎo)航信息,也能發(fā)送時(shí)間信息,GPS接收機(jī)收到信息后就能對時(shí)間進(jìn)行校準(zhǔn)。所以,GPS接收機(jī)除了能準(zhǔn)確定位之外,還可產(chǎn)生精確的時(shí)間信息。第二章0183協(xié)議簡介NMEA0183通信方式是由美國國家海洋電子協(xié)會(huì)開發(fā)、維護(hù)并發(fā)布的標(biāo)準(zhǔn),目前大多數(shù)GPS接收設(shè)備都遵循這一標(biāo)準(zhǔn),該接口協(xié)議定義了在波特率4800的串口數(shù)據(jù)總線上傳輸

12、的電器信號需求、數(shù)據(jù)傳輸協(xié)議和時(shí)間以及詳細(xì)的句型格式,以“句子”為單位進(jìn)行發(fā)送。假如數(shù)據(jù)域中的某個(gè)值無效,該值將被簡單的忽略,但對應(yīng)的“,”仍需發(fā)送。 圖2 NMEA-0183協(xié)議框架圖3 編譯過程流程圖2.1編譯技術(shù)的簡介編譯過程主要分為四個(gè)階段,分別是詞法分析、語法分析、語義分析和代碼生成。第一個(gè)階段是詞法分析,它是從左到右一個(gè)字符一個(gè)字符的讀取源程序并對字符進(jìn)行掃描和分解,從而識別一個(gè)一個(gè)單詞。第二個(gè)階段是語法分析,它是在詞法分析的基礎(chǔ)上將一個(gè)一個(gè)的單詞組成各類語法短語,如“程序”、“語句”、“表達(dá)式”等。第三個(gè)階段是語義分析,它的任務(wù)是審查源程序有無語義上的錯(cuò)誤并且為代碼收集類型信息。

13、最后一個(gè)階段是代碼生成,它是在語法分析和語義分析的基礎(chǔ)上生成最終的目標(biāo)程序。 2.2語法格式NMEA 0183的信息格式一般如下所示: $aaaaa,df1,df2,.CRLF所有的信息由$開始,以換行結(jié)束,緊跟著$后的五個(gè)字符解釋了信息的基本類型,多個(gè)參數(shù)之間用逗號隔開。2.3協(xié)議類型NMEA0183中有以下三種基本的協(xié)議類型:信息源信息源的標(biāo)準(zhǔn)格式為:$ttsss,df1,df2,.CRLF在緊隨$后的兩個(gè)字符是用來識別作為信息內(nèi)容識別碼的后面三個(gè)字符,信息識別碼定義了保留的數(shù)據(jù)區(qū),在NMEA0183的標(biāo)準(zhǔn)下,每個(gè)類型的數(shù)據(jù)區(qū)的信息內(nèi)容是符合標(biāo)準(zhǔn)的。例如:$HCHDM,238,MCRLF。

14、其中“HC”信息源是一個(gè)磁性的羅盤,“HDM”是表明后面的代表磁性的船首向航向,238是船首向航向的值,M則表示船首向航向值的磁性。查詢查詢的標(biāo)準(zhǔn)格式為:$ttllQ,sss,CRLF前面兩個(gè)字符表示請求者的信息源的識別碼,后面兩個(gè)字符是被查詢設(shè)備的識別碼,最后一個(gè)字符說明這是一個(gè)查詢的信息。緊跟著的字符(SSS)包含了三個(gè)字的被查詢內(nèi)容的記憶信息。例如: $CCGPQ,ZDACRLF “CC”說明計(jì)算機(jī)正從“GP”這個(gè)設(shè)備查詢ZDA中的內(nèi)容。GPS將會(huì)每隔1秒發(fā)送內(nèi)容直到有新的請求。屬性這是一種使用沒有在標(biāo)準(zhǔn)下預(yù)定義的特殊內(nèi)容的方法。它通常的格式為:$PmmmA,df1,df2,.,CRLF

15、P說明是屬性內(nèi)容,mmm定義為廠商信息代碼,A(A-Z)表明信息類型。NMEA-0183協(xié)議定義的語句非常的多,主要有$GPGLL、 $GPGGA、$GPVTG、$GPZDA等。因?yàn)楸敬握n題我們需要使用GPS-GPZDA進(jìn)行數(shù)據(jù)解析所以我們只介紹GPZDA標(biāo)準(zhǔn)格式的樣式。2.4 GPZDA語句格式UTC時(shí)間/日期及本地時(shí)區(qū)偏移量$GPZDA, <1>,<2>,<3>,<4>,*<5>CRLF<1> UTC時(shí)間,格式hhmmss.ss(前導(dǎo)位數(shù)不足則補(bǔ)0)。<2> UTC日期,01到31(前導(dǎo)位數(shù)不足則補(bǔ)0)。&

16、lt;3> UTC月份,01到12(前導(dǎo)位數(shù)不足則補(bǔ)0)。<4> UTC年,格式y(tǒng)yyy。<5> 校驗(yàn)和。第三章方案設(shè)計(jì)編程的主要思想:由于GPZDA的形式是:$GPZDA,hhmmss,XX,XX,XXXX,*hh,所以,我們學(xué)習(xí)老師的課件及上課的內(nèi)容從而確定編程的主線:通過對逗號的掃描來確定每一段的解析數(shù)據(jù),需要進(jìn)一步解析的就再次解析,從而最終解析出所有我們需要的數(shù)據(jù)。具體的程序流程圖如下,由主流程圖和子流程圖組成。圖4 主流程圖對程序流程圖的說明主流程圖:通過對switch(n)語句中的n的值的輸入選擇:n=0,打開文件a,并準(zhǔn)備解析其中的數(shù)據(jù);n=1,打開

17、文件b,并準(zhǔn)備解析其中的數(shù)據(jù);n=2,手動(dòng)輸入數(shù)據(jù),并準(zhǔn)備對數(shù)據(jù)的解析。若輸入n為以上其它值,那么會(huì)出現(xiàn)報(bào)錯(cuò)并提示用戶重新輸入n的值。其中打開文件部分,若失敗則會(huì)顯示Not Open。接著將數(shù)據(jù)放入到數(shù)組中然后進(jìn)行解析,解析結(jié)果輸出并保存到文件c中。然后將數(shù)組中的數(shù)據(jù)全部清零,再次詢問用戶是否繼續(xù)解析數(shù)據(jù),若是則輸入0,否就是輸入0以外的其它的值,從而結(jié)束程序。子流程圖:采用順序結(jié)構(gòu),依次解析出,時(shí)分秒,年,月,日,最后將時(shí)分秒進(jìn)一步解析,從而解析出最終單個(gè)的顯示結(jié)果,最后輸出的時(shí)候按照年月日時(shí)分秒的順序顯示即可。注:主子流程圖均采用Visio軟件繪制 圖5 解析子流程圖3.1總程序#incl

18、ude <stdio.h>main() FILE *fp; char ch128='0' char ch110='0' char chday5='0' char chmonth5='0' char chyear5='0' char chhour5='0' char chmin5='0' char chsec8='0' char chsum10='0' char afterch128='0' int i,j,n,m; /*定義

19、并初始化一些數(shù)組,指針,整型變量等用于后續(xù)程序使用*/ printf("This program is finished by our team:nShenJianFeng WangTing HeXiaoTiannSongZhenZhong WuYunChao CaiQiWein"); printf("Finished Time: 2010-12-20 nn");HERE: printf("Welcome!Please input n (n=0 or 1 or2)n 0 means Open the File 'a.txt'n

20、1 means Open the File 'b.txt'n 2 means Manual Operation Input):"); scanf("%d",&n); while(n!=0&&n!=1&&n!=2) printf("Error!n Plaese input n again (n=0 or 1 or 2):"); scanf("%d",&n); switch(n) case(0): printf("Open the File 'a.

21、txt' and analysis: "); if(fp=fopen("a.txt","r")=NULL) printf("Not openn"); exit(0); fscanf(fp,"%s",&ch); printf("%sn",ch); fclose(fp); /*打開文件a并讀入需要解析的數(shù)據(jù),并關(guān)閉文件*/ break; case(1): printf("Open the File 'b.txt' and analysis: &qu

22、ot;); if(fp=fopen("b.txt","r")=NULL) printf("Not openn"); exit(0); fscanf(fp,"%s",&ch); printf("%sn",ch); fclose(fp); /*打開文件b并讀入需要解析的數(shù)據(jù),并關(guān)閉文件*/ break; case(2): printf("Please input the GPZDA data(such as:$GPZDA,hhmmss,XX,XX,XXXX,*hh):")

23、; scanf("%s",&ch); break; /*switch選擇語句用于實(shí)現(xiàn)a文件的打開,或b文件的打開,或手動(dòng)輸入的選擇,不在選擇范圍內(nèi)報(bào)錯(cuò)*/ for(i=0;i<128;i+) afterchi-1=chi-1; if(chi!=','); else break; /*解析$GPZDA*/ for(i=i+1,j=0;i<128;i+) /*j清0是為了再次的循環(huán)(第二次亂碼的原因)*/ if(chi!=',') ch1j=chi; j+; else break; /*整體解析HHMMSS*/ for(i=i

24、+1,j=0;i<128;i+) if(chi!=',') chdayj=chi; j+; else break; /*解析日*/ for(i=i+1,j=0;i<128;i+) if(chi!=',') chmonthj=chi; j+; else break; /*解析月*/ for(i=i+1,j=0;i<128;i+) if(chi!=',') chyearj=chi; j+; else break; /*解析年*/ for(i=i+1,j=0;chi!='0'i+) if(chi!=','

25、;&&chi!='*') chsumj=chi; j+; /*解析校驗(yàn)和*/ i=0; for(j=0;j<2;j+,i+) chhourj=ch1i; for(j=0;j<2;i+,j+) chminj=ch1i; for(j=0;j<5;i+,j+) chsecj=ch1i; /*進(jìn)一步解析HHMMSS中的HH,MM,SS*/ fp=fopen("c.txt","a+"); fprintf(fp,"%srn 年%srn 月%srn 日%srn 時(shí)%srn 分%srn 秒%srn 校驗(yàn)和:%s

26、rn",afterch,chyear,chmonth,chday,chhour,chmin,chsec,chsum); fclose(fp); /*將解析結(jié)果寫入追加型文件c中,并輸出*/ printf("%sn year:%sn month:%sn day:%sn hour:%sn min:%sn sec:%sn JYH:%sn",afterch,chyear,chmonth,chday,chhour,chmin,chsec,chsum); /*WIN-TC界面顯示輸出*/ memset(ch,'0',sizeof(ch); memset(ch1

27、,'0',sizeof(ch1); memset(chday,'0',sizeof(chday); memset(chmonth,'0',sizeof(chmonth); memset(chyear,'0',sizeof(chyear); memset(chhour,'0',sizeof(chhour); memset(chmin,'0',sizeof(chmin); memset(chsec,'0',sizeof(chsec); memset(chsum,'0',s

28、izeof(chsum); memset(afterch,'0',sizeof(afterch); /*清空所有的數(shù)組,以便再次解析不發(fā)生覆蓋*/ printf("Do you wana use again?n Please input 0(YES) or else(NO):"); scanf("%d",&m); if(m=0) goto HERE; else printf("Thanks for your using,BYE!"); /*if語句用于判斷是否需要再次的解析*/ getch();3.2程序運(yùn)行截

29、圖圖6 程序運(yùn)行截圖1上圖所示為:運(yùn)行程序,出現(xiàn)如上圖所示的指引界面,前段為我們團(tuán)隊(duì)的信息和完成時(shí)間,后段提示用戶需要輸入0,1,2其中之一來選擇打開文件a,或打開文件b,或手動(dòng)輸入。圖7 程序運(yùn)行截圖2上圖所示為:用戶在指引界面上輸入0,就打開文件a,并解析其中的內(nèi)容,并且在解析完后顯示提示信息,再次輸入0或其他來表征是繼續(xù)還是結(jié)束程序。圖8 程序運(yùn)行截圖3上圖所示為:在選擇是否繼續(xù)的時(shí)候輸入0,繼續(xù)。并再次輸入1來表示打開文件b,并解析其中的數(shù)據(jù),同樣在解析完以后詢問用戶是否繼續(xù)。圖 9 程序運(yùn)行截圖4上圖所示為:在選擇是否繼續(xù)的時(shí)候輸入0,繼續(xù)。并再次輸入2來表示手動(dòng)輸入GPZDA解析數(shù)

30、據(jù),并解析,同樣在解析完以后詢問用戶是否繼續(xù),用戶按0以為的其他輸入,結(jié)束程序。圖10 程序運(yùn)行截圖5設(shè)計(jì)中遇到的問題及解決方案編程中的點(diǎn)滴總結(jié):問題:1. 文件打開失敗:由于文件的地址輸入有誤而導(dǎo)致的文件無法打開,最后修改了文件的地址,從而解決了打開失敗的問題。2. 文件打開卻無法讀入數(shù)據(jù):由于使用了結(jié)構(gòu)體函數(shù)fread,而此函數(shù)的使用格式及原則不是很熟悉,所以文件內(nèi)的數(shù)據(jù)無法讀入,最后改用fscanf函數(shù),從而數(shù)據(jù)讀入。3. 多次解析,后面解析的會(huì)覆蓋前次解析的數(shù)據(jù):由于之前采用的文件寫入類型是w型的,自然會(huì)出現(xiàn)覆蓋現(xiàn)象,后改為a+的追加型,從而實(shí)現(xiàn)多次數(shù)據(jù)解析的保存到文件c中。4. 多次

31、數(shù)據(jù)解析出現(xiàn)錯(cuò)誤:由于未加入清零程序,從而出現(xiàn)了后面的數(shù)據(jù)長度短于之前的長度而導(dǎo)致的后面解析的數(shù)據(jù)會(huì)殘留前次的部分?jǐn)?shù)據(jù),后加入memset清零函數(shù)從而解決了該問題。5. 程序出現(xiàn)解析亂碼:由于j每次使用前未重新賦值為0,導(dǎo)致數(shù)據(jù)存儲(chǔ)不是從數(shù)組的開始位置存儲(chǔ)而產(chǎn)生一些亂碼,后修改程序,j每次使用前均賦值為0,從而解決該問題。優(yōu)化:1. 基本功能實(shí)現(xiàn)以后優(yōu)化一:添加了歡迎界面以及一些指導(dǎo)用戶使用的提示性語句,方便用戶使用。2. 基本功能實(shí)現(xiàn)以后優(yōu)化二:在switch語句前添加了報(bào)錯(cuò)循環(huán)程序,使得用戶輸入n的值有誤時(shí),能報(bào)錯(cuò)并再次提示用戶輸入n(0,1,2之一)。3. 基本功能實(shí)現(xiàn)以后優(yōu)化三:添加了

32、手動(dòng)輸入功能,運(yùn)用了選擇語句來實(shí)現(xiàn)并將手動(dòng)的信息同步解析后信息輸出,從而實(shí)現(xiàn)手動(dòng)解析。4. 基本功能實(shí)現(xiàn)以后優(yōu)化四:添加了不同地址輸入數(shù)據(jù)解析的程序,從而不需要通過改變程序中文件的地址來實(shí)現(xiàn)不同地址的文件打開的功能。5. 基本功能實(shí)現(xiàn)以后優(yōu)化五:在清零程序以后添加了循環(huán)語句,用以實(shí)現(xiàn)用戶多次解析數(shù)據(jù)的實(shí)現(xiàn)。收獲:1. 編程從出現(xiàn)的問題,到解決問題后達(dá)到較滿意的結(jié)果,其中都凝聚了我們?nèi)M人員的心血,一些編程的問題主要是由于c語言長時(shí)間不使用而導(dǎo)致一些指令語句的不熟悉以及格式的錯(cuò)誤,而最后解決以后同時(shí)也加強(qiáng)了我們對于c語言的進(jìn)一步了解和熟悉。2. 編程的優(yōu)化過程中,我們在原有的基礎(chǔ)程序上,添加了一

33、些switch選擇語句,goto循環(huán)語句等用于實(shí)現(xiàn)不同地址文件讀入以及手動(dòng)輸入,一些優(yōu)化的程序雖然不難,但還是需要我們?nèi)ビ谜Z句去實(shí)現(xiàn),依舊鍛煉了我們的c語言功底。心得體會(huì)通過這次課程設(shè)計(jì),加強(qiáng)了我們動(dòng)手、思考和解決問題的能力。在整個(gè)設(shè)計(jì)過程中,經(jīng)常會(huì)遇到這樣那樣的情況,就是心里老想著這樣的程序可以行得通,但實(shí)際編譯運(yùn)行,總是實(shí)現(xiàn)不了,因此耗費(fèi)在這方面的時(shí)間很多。做課程設(shè)計(jì)同時(shí)也是對課本知識的鞏固和加強(qiáng),由于課本上知識太多,平時(shí)課間的學(xué)習(xí)并不能很好地理解和運(yùn)用各個(gè)程序的功能,所以在這次課程設(shè)計(jì)過程中,我們了解了很多語句的功能,進(jìn)行了實(shí)踐,并且對于其在編程中的使用有了更多的認(rèn)識。我們在設(shè)計(jì)期間結(jié)合相關(guān)資料,以分組

溫馨提示

  • 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

提交評論