版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 設(shè)計目的………………………………2</p><p> 設(shè)計內(nèi)容………………………………2</p><p> 題目 ………………………………………2</p><p> 問題描述……………………………………2</p><p>
2、 基本要求……………………………………2</p><p> 實現(xiàn)提示……………………………………2</p><p> 算法思想分析…………………………3</p><p> 算法描述與實現(xiàn)………………………4</p><p> 1.數(shù)據(jù)結(jié)構(gòu)類型定義 …………………………4</p><p> 2.主要算法的流
3、程圖及系統(tǒng)模塊劃分……………6</p><p> 3.功能描述 …………………………………7</p><p> 4.程序代碼 …………………………………8</p><p> 測試結(jié)果 ……………………………17</p><p> 總結(jié)體會 ……………………………20</p><p><b> 設(shè)
4、計目的</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)的核心課程,是一門實踐性很強的課程。為了學(xué)好這門課程,必須在掌握理論知識的同時,加強上機實踐。課程設(shè)計是加強學(xué)生實踐能力的一個強有力手段,要求學(xué)生掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用、算法的編寫、將算法轉(zhuǎn)換成程序并上機調(diào)試的基本方法,還要求學(xué)生在完成程序設(shè)計的同時能夠?qū)懗霰容^規(guī)范的設(shè)計報告。本課程設(shè)計的目的就是要達(dá)到理論與實際應(yīng)用相結(jié)合,使同學(xué)們能夠根據(jù)數(shù)據(jù)對
5、象的特性,學(xué)會數(shù)據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)學(xué)生的基本程序設(shè)計素養(yǎng)和軟件工作者工作作風(fēng)。</p><p><b> 設(shè)計內(nèi)容</b></p><p> 1.題目:模擬停車場管理問題</p><p><b> 2.問題描述:</b></p><p> 設(shè)停
6、車場只有一個可停放幾輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場按車輛到來的先后順序依次排列,若車場內(nèi)已停滿幾輛汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內(nèi)有車開走,則排在便道上的第一輛車即可進(jìn)入;當(dāng)停車場內(nèi)某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門后,為它讓路的車輛在按原次序進(jìn)入車場。每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。<
7、;/p><p><b> 3.基本要求:</b></p><p> 試為停車場編制按上述要求進(jìn)行管理的模擬程序。在這里假設(shè)汽車不能從便道上開走。試設(shè)計一個停車場管理程序。</p><p><b> 4.實現(xiàn)提示:</b></p><p> 以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的
8、輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼及到達(dá)或離去的時刻,例如:('A',1,5)表示一號牌照車在5這個時刻到達(dá),而('D',5,20)表示5號牌照車在20這個時刻離去,整個程序可以在輸入信息為('E',0,0)時結(jié)束。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車離去;則輸出汽
9、車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)。需另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。</p><p><b> 算法思想分析</b></p><p><b> 輸入</b></p><p> 根據(jù)提示輸入停車場容量n。</p>
10、;<p><b> 創(chuàng)建</b></p><p> 根據(jù)讀入的停車場容量n,創(chuàng)建長度為n的棧(停車場)。</p><p><b> 主要操作</b></p><p> 1)插入(車輛停入)</p><p> 根據(jù)提示往棧中插入元素(車輛信息),即使車輛停在停車場中。首先檢查停
11、車場是否已滿,若不滿,則車輛停放在停車場中,記錄車輛到達(dá)時間,并把此時間作為開始計費時間。若插入的元素個數(shù)超過停車場的容量,則此后的車輛停在便道上——用隊列表示,即元素儲存在隊列中。</p><p> 2)刪除(車輛離開)</p><p> 根據(jù)提示刪除棧中的元素(車輛信息),即使車輛離開停車場,同時停在便道上的車輛停入停車場中。當(dāng)車輛離開時,首先要尋找到要離開車輛的車牌號,若車是從停
12、車場離開,則在它之后進(jìn)入的車輛必須先退出(進(jìn)入臨時棧)為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入停車場,并將停放在便道上第一位置的車開進(jìn)停車場,離開的車輛按其在停車場內(nèi)停留的時間交費,并把離開車輛的離開時間作為便道上第一位置的車進(jìn)入停車場的進(jìn)入時間和開始計費時間。</p><p><b> 顯示</b></p><p> 根據(jù)提示操作,顯示當(dāng)前停車場和便
13、道使用情況。</p><p><b> 退出</b></p><p> 釋放停車場和便道(棧和隊列)上的車輛信息等,退出當(dāng)前運行程序。</p><p><b> 算法描述與實現(xiàn)</b></p><p> 1.數(shù)據(jù)結(jié)構(gòu)類型定義</p><p> //停車場車輛信息(存
14、儲結(jié)構(gòu))</p><p> typedef struct carinfor // 車輛信息</p><p><b> {</b></p><p> char szRegMark[64]; // 車牌號</p><p> char szArrTime[16]; // 到達(dá)時間</p><
15、;p> char szEntTime[16]; // 進(jìn)入停車場(開始計費)時間</p><p> char szDepTime[16]; // 離開時間</p><p> } TCARINFOR, *LPTCARINFOR;</p><p> //棧carstack存儲結(jié)構(gòu)</p><p> typedef stru
16、ct carstack </p><p><b> {</b></p><p> LPTCARINFOR lpCarInfor; // 車輛信息 </p><p> int nTop; // 棧頂元素下標(biāo)</p><p> int nStackSize; // 棧容量</p>&
17、lt;p> } TCARSTACK, *LPTCARSTACK;</p><p> //便道車輛信息(存儲結(jié)構(gòu))</p><p> typedef struct carnode // 鏈隊結(jié)點信息</p><p><b> {</b></p><p> TCARINFOR carinfo; /
18、/ 車輛信息</p><p> struct carnode *lpNext; // 指向下一個元素的指針</p><p> } TCARNODE, *LPTCARNODE;</p><p> // 鏈隊carqueue存儲結(jié)構(gòu)</p><p> typedef struct carqueue </p>&
19、lt;p><b> {</b></p><p> LPTCARNODE lpHead; // 頭結(jié)點</p><p> LPTCARNODE lpRear; // 指向當(dāng)前隊尾的指針</p><p> int nEffSize; // 當(dāng)前隊中元素個數(shù)(有效車位)</p><p> }
20、TCARQUEUE, *LPTCARQUEUE;</p><p> 主要算法的流程圖及功能描述</p><p><b> (1)流程圖:</b></p><p> ?。?)系統(tǒng)模塊劃分:</p><p><b> ?。?)算法描述:</b></p><p> void
21、InitStack( LPTCARSTACK &lpCarStack, int nSize )</p><p> 初始化棧 lpCarStack,,為棧和車輛信息分配儲存空間,將其容量設(shè)置為 nSize。</p><p> int InitQueue( LPTCARQUEUE &lpCarQueue )</p><p> 初始化鏈隊 lpCar
22、Queue,分配隊列存儲空間和頭結(jié)點空間,有效車位初始化。</p><p> void Push( LPTCARSTACK &lpCarStack, TCARINFOR carinfo )</p><p> 向棧中加入元素信息:車輛信息 carinfo 入棧 lpCarStack,棧頂元素下標(biāo)+1。</p><p> int EnQueue( LPTC
23、ARQUEUE &lpCarQueue, TCARINFOR carinfo )</p><p> 向隊列中加入元素信息:分配結(jié)點空間,車輛信息 carinfo 入隊 lpCarQueue,順序存儲到隊列中,有效車位加1。</p><p> void Pop( LPTCARSTACK &lpCarStack, TCARINFOR &carinfo )</p
24、><p> 從棧中刪除元素時:車輛信息從棧 lpCarStack 中彈出并存入 carinfo中,棧頂元素下標(biāo)-1。</p><p> int DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFOR &carinfo )</p><p> 從隊列中刪除元素時:隊頭元素從鏈隊 lpCarQueue 中出隊并存入 car
25、info,當(dāng)隊列中無元素時,返回ERROR;否則carinfo中信息存入臨時隊列中,再釋放臨時隊列,隊列長度減1。</p><p> int main( void )</p><p> 主函數(shù):主要設(shè)計一個分支語句,讓用戶根據(jù)提示選擇要執(zhí)行的操作,實現(xiàn)所需要的功能。</p><p><b> 程序代碼</b></p><
26、;p> #include <conio.h>//getch(void)</p><p> #include <malloc.h>//內(nèi)存分配 </p><p> #include <stdio.h></p><p> #include <stdlib.h></p><p> #i
27、nclude <windows.h></p><p> #define OK 1</p><p> #define ERROR 0</p><p> #define OVERFLOW -1</p><p> #define ClearScreen() system( "cls" ) // 清空當(dāng)前屏幕
28、</p><p> // 顯示字符串 szPrompt 并等待用戶按下任意鍵</p><p> #define Pause(szPrompt) printf( "%s",szPrompt),getch()</p><p> //停車場車輛信息(存儲結(jié)構(gòu))</p><p> typedef struct carinf
29、or // 車輛信息</p><p><b> {</b></p><p> char szRegMark[64]; // 車牌號</p><p> char szArrTime[16]; // 到達(dá)時間</p><p> char szEntTime[16]; // 進(jìn)入停車場(開始計費)時間&l
30、t;/p><p> char szDepTime[16]; // 離開時間</p><p> } TCARINFOR, *LPTCARINFOR;</p><p> //棧carstack存儲結(jié)構(gòu)</p><p> typedef struct carstack </p><p><b> {<
31、;/b></p><p> LPTCARINFOR lpCarInfor; // 車輛信息 </p><p> int nTop; // 棧頂元素下標(biāo)</p><p> int nStackSize; // 棧容量</p><p> } TCARSTACK, *LPTCARSTACK;</p>
32、<p> // 初始化棧 lpCarStack, 將其容量設(shè)置為 nSize</p><p> void InitStack( LPTCARSTACK &lpCarStack, int nSize )</p><p><b> {</b></p><p> lpCarStack = ( LPTCARSTACK ) ma
33、lloc( sizeof ( TCARSTACK ) ); //棧儲存分配</p><p> lpCarStack->lpCarInfor = ( LPTCARINFOR ) malloc(</p><p> nSize * sizeof ( TCARINFOR )); //棧中車輛信息儲存分配</p><p> lpCarStack->nTop
34、= -1; //棧中無元素</p><p> lpCarStack->nStackSize = nSize; //棧的長度為nSize</p><p><b> }</b></p><p> // 車輛信息 carinfo 入棧 lpCarStack</p><p> void Push( LPTCARST
35、ACK &lpCarStack, TCARINFOR carinfo )</p><p><b> {</b></p><p> lpCarStack->nTop++; //棧頂元素下標(biāo)+1</p><p> lpCarStack->lpCarInfor [lpCarStack->nTop] = carinfo;
36、 //把carinfo存入棧中</p><p><b> }</b></p><p> // 車輛信息從棧 lpCarStack 中彈出并存入 carinfo</p><p> void Pop( LPTCARSTACK &lpCarStack, TCARINFOR &carinfo )</p><p&
37、gt;<b> {</b></p><p> carinfo = lpCarStack->lpCarInfor [lpCarStack->nTop]; //把棧中元素存入carinfo中</p><p> lpCarStack->nTop--; //棧頂元素下標(biāo)減1</p><p><b> }</b&
38、gt;</p><p> // 若棧 lpCarstack 空,返回 TRUE;否則,返回 FALSE</p><p> BOOL IsStackEmpty( LPTCARSTACK lpCarStack )</p><p><b> {</b></p><p> return lpCarStack->nT
39、op == -1;//??諘r返回棧頂下標(biāo)nTop值為-1</p><p><b> }</b></p><p> // 若棧 lpStackFull 滿,返回 TRUE;否則,返回 FALSE</p><p> BOOL IsStackFull( LPTCARSTACK lpCarStack )</p><p>
40、 {//棧滿返回nTop值為棧長度減1</p><p> return lpCarStack->nTop == ( lpCarStack->nStackSize - 1 ); }</p><p> // 銷毀棧 lpCarStack,將指針 lpCarStack 置為 NULL</p><p> void DestroyStack( LPTCARS
41、TACK &lpCarStack )</p><p><b> {</b></p><p> free( lpCarStack->lpCarInfor ); //釋放車輛信息存儲空間</p><p> free( lpCarStack ); //釋放棧的存儲空間</p><p> lpCarStac
42、k = NULL; //把棧lpCarStack置空</p><p><b> }</b></p><p> //便道車輛信息(存儲結(jié)構(gòu))</p><p> typedef struct carnode // 鏈隊結(jié)點信息</p><p><b> {</b></p>
43、<p> TCARINFOR carinfo; // 車輛信息</p><p> struct carnode *lpNext; // 指向下一個元素的指針</p><p> } TCARNODE, *LPTCARNODE;</p><p> // 鏈隊carqueue存儲結(jié)構(gòu)</p><p> typedef
44、 struct carqueue </p><p><b> {</b></p><p> LPTCARNODE lpHead; // 頭結(jié)點</p><p> LPTCARNODE lpRear; // 指向當(dāng)前隊尾的指針</p><p> int nEffSize; // 當(dāng)前隊中元
45、素個數(shù)(有效車位)</p><p> } TCARQUEUE, *LPTCARQUEUE;</p><p> // 初始化鏈隊 lpCarQueue</p><p> int InitQueue( LPTCARQUEUE &lpCarQueue )</p><p><b> {</b></p>
46、<p> lpCarQueue = ( LPTCARQUEUE ) </p><p> malloc( sizeof( TCARQUEUE ) ); //分配對列存儲空間</p><p> lpCarQueue->lpHead =lpCarQueue->lpRear=</p><p> ( LPTCARNODE) malloc( s
47、izeof( TCARNODE ) ); //分配頭結(jié)點空間</p><p> if(!lpCarQueue->lpHead) exit(OVERFLOW); //分配儲存失敗</p><p> lpCarQueue->lpHead->lpNext = NULL; </p><p> lpCarQueue->nEffSize = 0;&
48、lt;/p><p> return OK;</p><p><b> }</b></p><p> // 車輛信息 carinfo 入隊 lpCarQueue</p><p> int EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFOR carinfo )</p>
49、;<p> {//插入元素carinfo為隊lpCarQueue的新的隊尾元素</p><p> LPTCARNODE lpCarNode = ( LPTCARNODE ) </p><p> malloc( sizeof( carnode ) ); //分配結(jié)點空間</p><p> if(!lpCarNode) exit(OVERFLOW)
50、; //分配儲存失敗</p><p> lpCarNode->carinfo = carinfo;</p><p> lpCarNode->lpNext = NULL;</p><p> lpCarQueue->lpRear->lpNext = lpCarNode;</p><p> lpCarQueue-&g
51、t;lpRear = lpCarNode;</p><p> lpCarQueue->nEffSize++;</p><p> return OK;</p><p><b> }</b></p><p> // 隊頭元素從鏈隊 lpCarQueue 中出隊并存入 carinfo</p><
52、;p> int DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFOR &carinfo )</p><p><b> {</b></p><p> if(lpCarQueue->lpHead==lpCarQueue->lpRear) return ERROR; </p><p
53、> //隊列里沒有元素,返回ERROR</p><p> LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;</p><p> carinfo = lpTemp->carinfo; </p><p> lpCarQueue->lpHead->lpNext = lpTemp->
54、;lpNext; //指向下一結(jié)點</p><p> if(lpCarQueue->lpRear==lpTemp) lpCarQueue->lpHead=lpCarQueue->lpRear;</p><p> //如果隊列尾指針指向臨時結(jié)點時,隊列中沒有元素</p><p> free( lpTemp ); //釋放臨時隊列</p&g
55、t;<p> lpCarQueue->nEffSize--; //容量-1</p><p> return OK;</p><p><b> }</b></p><p> // 若鏈隊 lpCarQueue 為空,返回 TRUE;否則,返回 FALSE</p><p> BOOL IsQue
56、ueEmpty( LPTCARQUEUE lpCarQueue )</p><p><b> {</b></p><p> return lpCarQueue->nEffSize == 0; //鏈隊為空時返回長度為0</p><p><b> }</b></p><p> // 銷毀
57、鏈隊 lpCarQueue</p><p> void DestroyQueue( LPTCARQUEUE &lpCarQueue )</p><p><b> {</b></p><p> LPTCARNODE lpNextCarNode = NULL;</p><p> for ( LPTCARNOD
58、E lpCarNode = lpCarQueue->lpHead; </p><p> lpCarNode != NULL; lpCarNode = lpNextCarNode )</p><p><b> {</b></p><p> lpNextCarNode = lpCarNode->lpNext;</p>
59、<p> free( lpCarNode );//釋放結(jié)點 lpCarNode信息</p><p><b> }</b></p><p> free( lpCarQueue );//釋放隊列 lpCarQueue</p><p> lpCarQueue = NULL;</p><p><b>
60、; }</b></p><p> // 將字符串時間格式轉(zhuǎn)換為數(shù)字(分鐘)格式,例如 12:36 將被轉(zhuǎn)換為 756 =( 12 * 60 + 36 )</p><p> int ConvertTime ( char *lpTime )</p><p><b> {</b></p><p> int
61、 nHour = 0;</p><p> int nMinu = 0;</p><p> sscanf( lpTime, "%d:%d", &nHour, &nMinu );</p><p> return nHour * 60 + nMinu;</p><p><b> }</b&
62、gt;</p><p> // 根據(jù)在停車場內(nèi)的停留時間 nContiMinu (分鐘)計算費用</p><p> double CalcuExp ( int nContiMinu )</p><p><b> {</b></p><p> return nContiMinu * ( 5.0 / 60 );<
63、;/p><p><b> }</b></p><p> int main( void )</p><p><b> {</b></p><p> int nParkCap = 0; // 停車場容量</p><p> putchar( '\n' );
64、</p><p> printf("\t\t********************************************\n");</p><p> printf("\t\t=======**** ****=======\n");</p><p> printf(&q
65、uot;\t\t=======****歡迎進(jìn)入停車場管理系統(tǒng)****=======\n");</p><p> printf("\t\t=======**** ****=======\n");</p><p> printf("\t\t***********************************
66、*********\n");</p><p> putchar( '\n' );</p><p> printf( "請輸入停車場容量:" );</p><p> scanf( "%d", &nParkCap );</p><p> LPTCARSTACK lp
67、CarStack = NULL; // 停車場,用棧模擬</p><p> InitStack( lpCarStack, nParkCap );//創(chuàng)建停車場</p><p> LPTCARQUEUE lpCarQueue = NULL; // 便道,用鏈隊模擬</p><p> InitQueue( lpCarQueue ); //創(chuàng)建隊列</
68、p><p> char ComType = NULL; // 命令類型</p><p> char szUserInput[128] = { NULL }; // 用戶輸入</p><p><b> do </b></p><p><b> {</b></p><p&g
69、t; ClearScreen();</p><p> putchar( '\n' );</p><p> puts( "--------------------" );</p><p> puts( "[命令類型]" );</p><p> puts( "A - 車輛
70、到達(dá)" );</p><p> puts( "D - 車輛離開" );</p><p> puts( "O - 顯示當(dāng)前停車場和便道使用情況" );</p><p> puts( "E - 退出程序" );</p><p> putchar( '\n'
71、; );</p><p> puts( "例:" );</p><p> puts( "A,T45,14:26" );</p><p> puts( "D,E32,16:51" );</p><p> puts( "E" );</p><
72、;p> puts( "O" );</p><p> putchar( '\n' );</p><p> printf( "請輸入命令:" );</p><p> scanf( "%s", szUserInput );</p><p> puts( &q
73、uot;--------------------" );</p><p> char szCarInfor [128] = { NULL };</p><p> sscanf( szUserInput, // 將命令類型與車輛信息分開存放</p><p><b> "%c,%s",</b></p&g
74、t;<p> &ComType, // 用戶輸入的前半部分,即命令類型</p><p> szCarInfor // 用戶輸入的后半部分,即車輛信息</p><p> );//sscanf()從一個字符串中讀進(jìn)與指定格式相符的數(shù)據(jù).</p><p> char *lpComLoc = NULL; // 車輛信息字符串中的逗號位置
75、 </p><p> for ( lpComLoc = szCarInfor; *lpComLoc != '\0'; lpComLoc++ )</p><p><b> {</b></p><p> if ( *lpComLoc == ',' )</p><p><b>
76、 {</b></p><p> break;//跳出整個for循環(huán)</p><p><b> }</b></p><p><b> }</b></p><p> *lpComLoc = '\0';</p><p> TCARINFOR c
77、arinfo = { NULL }; // 存儲本次用戶輸入的車輛信息</p><p> strcpy( carinfo.szRegMark, szCarInfor );</p><p> //把szCarInfor復(fù)制到carinfo.szRegMark(車牌號)里</p><p> if (ComType == 'A' )//車輛到達(dá)<
78、;/p><p><b> {</b></p><p> strcpy( carinfo.szArrTime, lpComLoc + 1 );</p><p> //把lpComLoc + 1復(fù)制到carinfo.szArrTime里</p><p> if ( FALSE == IsStackFull( lpCarS
79、tack ) )//判斷棧lpCarStack不滿時</p><p><b> {</b></p><p> strcpy( carinfo.szEntTime, carinfo.szArrTime );</p><p> //車輛到達(dá)時間szArrTime復(fù)制給開始收費時間szEntTime</p><p>
80、Push( lpCarStack, carinfo );</p><p> printf( "已進(jìn)入停車場第 %d 個車位\n",lpCarStack->nTop + 1);</p><p> printf( "車牌號:\t\t%s\n", carinfo.szRegMark );</p><p> printf(
81、 "進(jìn)入時間:\t%s\n", carinfo.szEntTime );</p><p> puts( "是否收費:\t是" );</p><p><b> }</b></p><p><b> else</b></p><p><b> {
82、</b></p><p> EnQueue( lpCarQueue, carinfo );</p><p> printf( "停車場已滿,已停放在便道的第 %d 個車位\n"</p><p> ,lpCarQueue->nEffSize);</p><p> printf( "車牌號:
83、\t\t%s\n", carinfo.szRegMark );</p><p> printf( "停放時間:\t%s\n", carinfo.szArrTime );</p><p> puts( "是否收費:\t否" );</p><p><b> }</b></p>&
84、lt;p><b> }</b></p><p> else if (ComType == 'D' )</p><p><b> {</b></p><p> strcpy( carinfo.szDepTime, lpComLoc + 1 );</p><p> LPT
85、CARSTACK lpTempCarStack = NULL;</p><p> InitStack( lpTempCarStack, nParkCap );</p><p> // 創(chuàng)建臨時lpTempCarStack,nParkCap(停車輛)</p><p> TCARINFOR carinfoOut = { NULL };</p><
86、;p> BOOL bIsCarFound = FALSE; //初始化bIsCarFound</p><p> while ( FALSE == IsStackEmpty( lpCarStack ) )//判斷棧lpCarStack不為空時</p><p><b> {</b></p><p> Pop( lpCarStack,
87、carinfoOut ); //車輛出棧lpCarStack</p><p> if ( 0 != strcmp( carinfoOut.szRegMark, carinfo.szRegMark ) )//比較</p><p><b> {</b></p><p> Push( lpTempCarStack, carinfoOut );/
88、/車輛進(jìn)棧lpTempCarStack</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> bIsCarFound = TRUE;</p><p><b&
89、gt; break;</b></p><p><b> }</b></p><p><b> }</b></p><p> while ( FALSE == IsStackEmpty( lpTempCarStack ) )//判斷臨時棧不為空時</p><p><b>
90、 {</b></p><p> TCARINFOR tempcarinfo = { NULL };</p><p> Pop( lpTempCarStack, tempcarinfo );</p><p> Push( lpCarStack, tempcarinfo );</p><p><b> }</
91、b></p><p> if ( FALSE == bIsCarFound )</p><p><b> {</b></p><p> printf( "車牌號為 %s 的車未進(jìn)入停車場.\n", carinfo.szRegMark );</p><p> Pause( "--
92、------------------\n按任意鍵輸入下一條信息...\n" );</p><p><b> continue;</b></p><p><b> }</b></p><p> strcpy( carinfoOut.szDepTime, carinfo.szDepTime );</p&g
93、t;<p> int nEntTime = ConvertTime ( carinfoOut.szEntTime );</p><p> int nDepTime = ConvertTime ( carinfoOut.szDepTime );</p><p> int nContiMinu = nDepTime - nEntTime;</p><p&
94、gt; printf( "計費時段:\t%s - %s (共 %d 分鐘)\n",</p><p> carinfoOut.szEntTime, //開始計費時間</p><p> carinfoOut.szDepTime, //車輛離開時間</p><p> nContiMinu //持續(xù)時間</p><p>&
95、lt;b> );</b></p><p> double rExpense = CalcuExp ( nContiMinu ); //計算停車費</p><p> printf( "應(yīng)交納的費用:\t%.1lf 元\n", rExpense );</p><p> if ( FALSE == IsQueueEmpty(
96、lpCarQueue ) ) //如果隊列l(wèi)pCarQueue不空時</p><p><b> {</b></p><p> TCARINFOR tempcarinfo = { NULL };</p><p> DeQueue( lpCarQueue, tempcarinfo );</p><p> strcpy
97、( tempcarinfo.szEntTime, carinfoOut.szDepTime );</p><p> Push( lpCarStack, tempcarinfo );</p><p> puts( "--------------------" );</p><p> printf( "停放在便道的第 1 個車位,車牌
98、號為 %s 的車已進(jìn)入停車場\n",</p><p> tempcarinfo.szRegMark);</p><p><b> }</b></p><p><b> }</b></p><p> else if (ComType == 'O' )</p>
99、;<p><b> {</b></p><p> ClearScreen();</p><p> putchar( '\n' );</p><p> puts( "[停車場使用情況]\n" );</p><p> puts( "[車位]\t[車牌號]\
100、t[到達(dá)時間]\t[進(jìn)入(開始計費)時間]\n");</p><p> for ( int i = 0; i <= lpCarStack->nTop; i++ )</p><p><b> {</b></p><p> printf( "%d\t%s\t\t%s\t\t%s\n",</p&g
101、t;<p> i + 1, //車位</p><p> lpCarStack->lpCarInfor [i].szRegMark, //車牌號</p><p> lpCarStack->lpCarInfor [i].szArrTime, //車輛到達(dá)時間</p><p> lpCarStack->lpCarInfor [i]
102、.szEntTime //車輛進(jìn)停車場時間</p><p> ); //顯示停車場車輛信息</p><p><b> }</b></p><p> putchar( '\n' );</p><p> putchar( '\n' );</p><p> pu
103、tchar( '\n' );</p><p> puts( "[便道使用情況]\n" );</p><p> puts( "[車位]\t[車牌號]\t[到達(dá)時間]\t[進(jìn)入(開始計費)時間]\n");</p><p> int nNum = 0;</p><p> for ( L
104、PTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;</p><p> lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )</p><p><b> {</b></p><p><b> nNum++;</b&
105、gt;</p><p> printf( "%d\t%s\t\t%s\t\t%s\n",</p><p> nNum, //車位</p><p> lpCarNode->carinfo.szRegMark, //車牌號</p><p> lpCarNode->carinfo.szArrTime, //車
106、輛到達(dá)時間</p><p> lpCarNode->carinfo.szEntTime //車輛進(jìn)停車場時間</p><p> ); //顯示便道車輛信息</p><p><b> }</b></p><p> putchar( '\n' );</p><p><
107、;b> }</b></p><p> else if (ComType == 'E' )</p><p><b> {</b></p><p> puts( "********************" );</p><p> puts( "***
108、***謝謝使用******" );</p><p> puts( "班級:計081班\n" );</p><p> puts( "組長:耿超 080720\n" );</p><p> puts( "組員:彭松 080706\n" );</p><p> put
109、s( "組員:孫郭建 080707\n" );</p><p> puts( "********************" );</p><p><b> break;</b></p><p><b> }</b></p><p><b>
110、else</b></p><p><b> {</b></p><p> puts( "輸入信息有誤.第一個字符只能為 'A' 或 'D' 或 'E' 或 'O' </p><p> (區(qū)分大小寫)." );</p><p&
111、gt;<b> }</b></p><p> Pause( "--------------------\n按任意鍵輸入下一條信息.\n" );</p><p> } while ( TRUE );</p><p> DestroyStack( lpCarStack );</p><p> D
112、estroyQueue( lpCarQueue );</p><p> Pause( "\n按任意鍵退出程序...\n" );</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 測試結(jié)果<
113、/b></p><p><b> 1.程序運行界面</b></p><p><b> 2.輸入停車場容量</b></p><p><b> 3.輸入命令</b></p><p> 4.輸入命令A(yù)--輸入車輛信息停入停車場、便道</p><p&g
114、t; 5.輸入命令O顯示當(dāng)前存儲情況</p><p> 6.輸入命令D--輸入車輛信息駛出停車場,計算停車費</p><p> 7.輸入命令O顯示當(dāng)前存儲情況</p><p><b> 總結(jié)體會</b></p><p> 程序設(shè)計是一個長期而又艱苦的過程。它需要經(jīng)過設(shè)計者對課題的理解與接受,找出對應(yīng)的合理的算法
115、,構(gòu)建基本框架,上機調(diào)試,不斷地修改和改進(jìn)等一系列復(fù)雜的過程。不過,通過不斷的探索和實踐,慢慢地克服一個個難題。</p><p> 通過此次課程設(shè)計我們學(xué)到了好多的東西,對以前會的知識更加熟悉了,并且有了更深的認(rèn)識;對不太清楚的知識點也有了新的理解。</p><p> 在調(diào)試時要認(rèn)真,出現(xiàn)的錯誤要及時找出并改正,遇到問題及時去查相關(guān)的資料,再反復(fù)的調(diào)試程序。把各個要注意的問題要想到:同
116、時還要在程序中體現(xiàn)自己的風(fēng)格,從每個細(xì)節(jié)出發(fā),不放過每個知識點。另外,要注意語句、符號的使用。</p><p> 在設(shè)計過程中,團(tuán)隊精神也很重要,大家一起探討各個語句的作用,加深對程序的理解。 </p><p><b> 參考文獻(xiàn):</b></p><p> [1]嚴(yán)蔚敏等著。數(shù)據(jù)結(jié)構(gòu)(C語言)。北京:清華大學(xué)出版社,2004</
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--- 停車場問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---停車場管理系統(tǒng)
- 停車場管理-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計《停車場管理系統(tǒng)》
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---停車場仿真
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---停車場管理系統(tǒng)
- 超市停車場管理模擬_數(shù)據(jù)結(jié)構(gòu)與處理課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理系統(tǒng) (2)
評論
0/150
提交評論