

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p> 設(shè)計(jì)目的………………………………2</p><p> 設(shè)計(jì)內(nèi)容………………………………2</p><p> 題目 ………………………………………2</p><p> 問(wèn)題描述……………………………………2</p><p>
2、 基本要求……………………………………2</p><p> 實(shí)現(xiàn)提示……………………………………2</p><p> 算法思想分析…………………………3</p><p> 算法描述與實(shí)現(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> 測(cè)試結(jié)果 ……………………………17</p><p> 總結(jié)體會(huì) ……………………………20</p><p><b> 設(shè)
4、計(jì)目的</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》是計(jì)算機(jī)專業(yè)的核心課程,是一門實(shí)踐性很強(qiáng)的課程。為了學(xué)好這門課程,必須在掌握理論知識(shí)的同時(shí),加強(qiáng)上機(jī)實(shí)踐。課程設(shè)計(jì)是加強(qiáng)學(xué)生實(shí)踐能力的一個(gè)強(qiáng)有力手段,要求學(xué)生掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用、算法的編寫、將算法轉(zhuǎn)換成程序并上機(jī)調(diào)試的基本方法,還要求學(xué)生在完成程序設(shè)計(jì)的同時(shí)能夠?qū)懗霰容^規(guī)范的設(shè)計(jì)報(bào)告。本課程設(shè)計(jì)的目的就是要達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,使同學(xué)們能夠根據(jù)數(shù)據(jù)對(duì)
5、象的特性,學(xué)會(huì)數(shù)據(jù)組織的方法,能把現(xiàn)實(shí)世界中的實(shí)際問(wèn)題在計(jì)算機(jī)內(nèi)部表示出來(lái),并培養(yǎng)學(xué)生的基本程序設(shè)計(jì)素養(yǎng)和軟件工作者工作作風(fēng)。</p><p><b> 設(shè)計(jì)內(nèi)容</b></p><p> 1.題目:模擬停車場(chǎng)管理問(wèn)題</p><p><b> 2.問(wèn)題描述:</b></p><p> 設(shè)停
6、車場(chǎng)只有一個(gè)可停放幾輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)按車輛到來(lái)的先后順序依次排列,若車場(chǎng)內(nèi)已停滿幾輛汽車,則后來(lái)的汽車只能在門外的便道上等候,一旦停車場(chǎng)內(nèi)有車開(kāi)走,則排在便道上的第一輛車即可進(jìn)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),由于停車場(chǎng)是狹長(zhǎng)的通道,在它之后開(kāi)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門后,為它讓路的車輛在按原次序進(jìn)入車場(chǎng)。每輛停放在車場(chǎng)的車在它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。<
7、;/p><p><b> 3.基本要求:</b></p><p> 試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。在這里假設(shè)汽車不能從便道上開(kāi)走。試設(shè)計(jì)一個(gè)停車場(chǎng)管理程序。</p><p><b> 4.實(shí)現(xiàn)提示:</b></p><p> 以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的
8、輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼及到達(dá)或離去的時(shí)刻,例如:('A',1,5)表示一號(hào)牌照車在5這個(gè)時(shí)刻到達(dá),而('D',5,20)表示5號(hào)牌照車在20這個(gè)時(shí)刻離去,整個(gè)程序可以在輸入信息為('E',0,0)時(shí)結(jié)束。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車離去;則輸出汽
9、車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表實(shí)現(xiàn)。需另設(shè)一個(gè)棧,臨時(shí)停放為給要離去的汽車讓路而從停車場(chǎng)退出來(lái)的汽車。</p><p><b> 算法思想分析</b></p><p><b> 輸入</b></p><p> 根據(jù)提示輸入停車場(chǎng)容量n。</p>
10、;<p><b> 創(chuàng)建</b></p><p> 根據(jù)讀入的停車場(chǎng)容量n,創(chuàng)建長(zhǎng)度為n的棧(停車場(chǎng))。</p><p><b> 主要操作</b></p><p> 1)插入(車輛停入)</p><p> 根據(jù)提示往棧中插入元素(車輛信息),即使車輛停在停車場(chǎng)中。首先檢查停
11、車場(chǎng)是否已滿,若不滿,則車輛停放在停車場(chǎng)中,記錄車輛到達(dá)時(shí)間,并把此時(shí)間作為開(kāi)始計(jì)費(fèi)時(shí)間。若插入的元素個(gè)數(shù)超過(guò)停車場(chǎng)的容量,則此后的車輛停在便道上——用隊(duì)列表示,即元素儲(chǔ)存在隊(duì)列中。</p><p> 2)刪除(車輛離開(kāi))</p><p> 根據(jù)提示刪除棧中的元素(車輛信息),即使車輛離開(kāi)停車場(chǎng),同時(shí)停在便道上的車輛停入停車場(chǎng)中。當(dāng)車輛離開(kāi)時(shí),首先要尋找到要離開(kāi)車輛的車牌號(hào),若車是從停
12、車場(chǎng)離開(kāi),則在它之后進(jìn)入的車輛必須先退出(進(jìn)入臨時(shí)棧)為它讓路,待該輛車開(kāi)出大門外,其它車輛再按原次序進(jìn)入停車場(chǎng),并將停放在便道上第一位置的車開(kāi)進(jìn)停車場(chǎng),離開(kāi)的車輛按其在停車場(chǎng)內(nèi)停留的時(shí)間交費(fèi),并把離開(kāi)車輛的離開(kāi)時(shí)間作為便道上第一位置的車進(jìn)入停車場(chǎng)的進(jìn)入時(shí)間和開(kāi)始計(jì)費(fèi)時(shí)間。</p><p><b> 顯示</b></p><p> 根據(jù)提示操作,顯示當(dāng)前停車場(chǎng)和便
13、道使用情況。</p><p><b> 退出</b></p><p> 釋放停車場(chǎng)和便道(棧和隊(duì)列)上的車輛信息等,退出當(dāng)前運(yùn)行程序。</p><p><b> 算法描述與實(shí)現(xiàn)</b></p><p> 1.數(shù)據(jù)結(jié)構(gòu)類型定義</p><p> //停車場(chǎng)車輛信息(存
14、儲(chǔ)結(jié)構(gòu))</p><p> typedef struct carinfor // 車輛信息</p><p><b> {</b></p><p> char szRegMark[64]; // 車牌號(hào)</p><p> char szArrTime[16]; // 到達(dá)時(shí)間</p><
15、;p> char szEntTime[16]; // 進(jìn)入停車場(chǎng)(開(kāi)始計(jì)費(fèi))時(shí)間</p><p> char szDepTime[16]; // 離開(kāi)時(shí)間</p><p> } TCARINFOR, *LPTCARINFOR;</p><p> //棧carstack存儲(chǔ)結(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> //便道車輛信息(存儲(chǔ)結(jié)構(gòu))</p><p> typedef struct carnode // 鏈隊(duì)結(jié)點(diǎn)信息</p><p><b> {</b></p><p> TCARINFOR carinfo; /
18、/ 車輛信息</p><p> struct carnode *lpNext; // 指向下一個(gè)元素的指針</p><p> } TCARNODE, *LPTCARNODE;</p><p> // 鏈隊(duì)carqueue存儲(chǔ)結(jié)構(gòu)</p><p> typedef struct carqueue </p>&
19、lt;p><b> {</b></p><p> LPTCARNODE lpHead; // 頭結(jié)點(diǎn)</p><p> LPTCARNODE lpRear; // 指向當(dāng)前隊(duì)尾的指針</p><p> int nEffSize; // 當(dāng)前隊(duì)中元素個(gè)數(shù)(有效車位)</p><p> }
20、TCARQUEUE, *LPTCARQUEUE;</p><p> 主要算法的流程圖及功能描述</p><p><b> ?。?)流程圖:</b></p><p> (2)系統(tǒng)模塊劃分:</p><p><b> ?。?)算法描述:</b></p><p> void
21、InitStack( LPTCARSTACK &lpCarStack, int nSize )</p><p> 初始化棧 lpCarStack,,為棧和車輛信息分配儲(chǔ)存空間,將其容量設(shè)置為 nSize。</p><p> int InitQueue( LPTCARQUEUE &lpCarQueue )</p><p> 初始化鏈隊(duì) lpCar
22、Queue,分配隊(duì)列存儲(chǔ)空間和頭結(jié)點(diǎn)空間,有效車位初始化。</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> 向隊(duì)列中加入元素信息:分配結(jié)點(diǎn)空間,車輛信息 carinfo 入隊(duì) lpCarQueue,順序存儲(chǔ)到隊(duì)列中,有效車位加1。</p><p> void Pop( LPTCARSTACK &lpCarStack, TCARINFOR &carinfo )</p
24、><p> 從棧中刪除元素時(shí):車輛信息從棧 lpCarStack 中彈出并存入 carinfo中,棧頂元素下標(biāo)-1。</p><p> int DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFOR &carinfo )</p><p> 從隊(duì)列中刪除元素時(shí):隊(duì)頭元素從鏈隊(duì) lpCarQueue 中出隊(duì)并存入 car
25、info,當(dāng)隊(duì)列中無(wú)元素時(shí),返回ERROR;否則carinfo中信息存入臨時(shí)隊(duì)列中,再釋放臨時(shí)隊(duì)列,隊(duì)列長(zhǎng)度減1。</p><p> int main( void )</p><p> 主函數(shù):主要設(shè)計(jì)一個(gè)分支語(yǔ)句,讓用戶根據(jù)提示選擇要執(zhí)行的操作,實(shí)現(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> //停車場(chǎng)車輛信息(存儲(chǔ)結(jié)構(gòu))</p><p> typedef struct carinf
29、or // 車輛信息</p><p><b> {</b></p><p> char szRegMark[64]; // 車牌號(hào)</p><p> char szArrTime[16]; // 到達(dá)時(shí)間</p><p> char szEntTime[16]; // 進(jìn)入停車場(chǎng)(開(kāi)始計(jì)費(fèi))時(shí)間&l
30、t;/p><p> char szDepTime[16]; // 離開(kāi)時(shí)間</p><p> } TCARINFOR, *LPTCARINFOR;</p><p> //棧carstack存儲(chǔ)結(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 ) ); //棧儲(chǔ)存分配</p><p> lpCarStack->lpCarInfor = ( LPTCARINFOR ) malloc(</p><p> nSize * sizeof ( TCARINFOR )); //棧中車輛信息儲(chǔ)存分配</p><p> lpCarStack->nTop
34、= -1; //棧中無(wú)元素</p><p> lpCarStack->nStackSize = nSize; //棧的長(zhǎng)度為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(shí)返回棧頂下標(biāo)nTop值為-1</p><p><b> }</b></p><p> // 若棧 lpStackFull 滿,返回 TRUE;否則,返回 FALSE</p><p> BOOL IsStackFull( LPTCARSTACK lpCarStack )</p><p>
40、 {//棧滿返回nTop值為棧長(zhǎng)度減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 ); //釋放車輛信息存儲(chǔ)空間</p><p> free( lpCarStack ); //釋放棧的存儲(chǔ)空間</p><p> lpCarStac
42、k = NULL; //把棧lpCarStack置空</p><p><b> }</b></p><p> //便道車輛信息(存儲(chǔ)結(jié)構(gòu))</p><p> typedef struct carnode // 鏈隊(duì)結(jié)點(diǎn)信息</p><p><b> {</b></p>
43、<p> TCARINFOR carinfo; // 車輛信息</p><p> struct carnode *lpNext; // 指向下一個(gè)元素的指針</p><p> } TCARNODE, *LPTCARNODE;</p><p> // 鏈隊(duì)carqueue存儲(chǔ)結(jié)構(gòu)</p><p> typedef
44、 struct carqueue </p><p><b> {</b></p><p> LPTCARNODE lpHead; // 頭結(jié)點(diǎn)</p><p> LPTCARNODE lpRear; // 指向當(dāng)前隊(duì)尾的指針</p><p> int nEffSize; // 當(dāng)前隊(duì)中元
45、素個(gè)數(shù)(有效車位)</p><p> } TCARQUEUE, *LPTCARQUEUE;</p><p> // 初始化鏈隊(duì) lpCarQueue</p><p> int InitQueue( LPTCARQUEUE &lpCarQueue )</p><p><b> {</b></p>
46、<p> lpCarQueue = ( LPTCARQUEUE ) </p><p> malloc( sizeof( TCARQUEUE ) ); //分配對(duì)列存儲(chǔ)空間</p><p> lpCarQueue->lpHead =lpCarQueue->lpRear=</p><p> ( LPTCARNODE) malloc( s
47、izeof( TCARNODE ) ); //分配頭結(jié)點(diǎn)空間</p><p> if(!lpCarQueue->lpHead) exit(OVERFLOW); //分配儲(chǔ)存失敗</p><p> lpCarQueue->lpHead->lpNext = NULL; </p><p> lpCarQueue->nEffSize = 0;&
48、lt;/p><p> return OK;</p><p><b> }</b></p><p> // 車輛信息 carinfo 入隊(duì) lpCarQueue</p><p> int EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFOR carinfo )</p>
49、;<p> {//插入元素carinfo為隊(duì)lpCarQueue的新的隊(duì)尾元素</p><p> LPTCARNODE lpCarNode = ( LPTCARNODE ) </p><p> malloc( sizeof( carnode ) ); //分配結(jié)點(diǎn)空間</p><p> if(!lpCarNode) exit(OVERFLOW)
50、; //分配儲(chǔ)存失敗</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> // 隊(duì)頭元素從鏈隊(duì) lpCarQueue 中出隊(duì)并存入 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、> //隊(duì)列里沒(méi)有元素,返回ERROR</p><p> LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;</p><p> carinfo = lpTemp->carinfo; </p><p> lpCarQueue->lpHead->lpNext = lpTemp->
54、;lpNext; //指向下一結(jié)點(diǎn)</p><p> if(lpCarQueue->lpRear==lpTemp) lpCarQueue->lpHead=lpCarQueue->lpRear;</p><p> //如果隊(duì)列尾指針指向臨時(shí)結(jié)點(diǎn)時(shí),隊(duì)列中沒(méi)有元素</p><p> free( lpTemp ); //釋放臨時(shí)隊(duì)列</p&g
55、t;<p> lpCarQueue->nEffSize--; //容量-1</p><p> return OK;</p><p><b> }</b></p><p> // 若鏈隊(duì) lpCarQueue 為空,返回 TRUE;否則,返回 FALSE</p><p> BOOL IsQue
56、ueEmpty( LPTCARQUEUE lpCarQueue )</p><p><b> {</b></p><p> return lpCarQueue->nEffSize == 0; //鏈隊(duì)為空時(shí)返回長(zhǎng)度為0</p><p><b> }</b></p><p> // 銷毀
57、鏈隊(duì) 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é)點(diǎn) lpCarNode信息</p><p><b> }</b></p><p> free( lpCarQueue );//釋放隊(duì)列 lpCarQueue</p><p> lpCarQueue = NULL;</p><p><b>
60、; }</b></p><p> // 將字符串時(shí)間格式轉(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ù)在停車場(chǎng)內(nèi)的停留時(shí)間 nContiMinu (分鐘)計(jì)算費(fèi)用</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; // 停車場(chǎng)容量</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)入停車場(chǎng)管理系統(tǒng)****=======\n");</p><p> printf("\t\t=======**** ****=======\n");</p><p> printf("\t\t***********************************
66、*********\n");</p><p> putchar( '\n' );</p><p> printf( "請(qǐng)輸入停車場(chǎng)容量:" );</p><p> scanf( "%d", &nParkCap );</p><p> LPTCARSTACK lp
67、CarStack = NULL; // 停車場(chǎng),用棧模擬</p><p> InitStack( lpCarStack, nParkCap );//創(chuàng)建停車場(chǎng)</p><p> LPTCARQUEUE lpCarQueue = NULL; // 便道,用鏈隊(duì)模擬</p><p> InitQueue( lpCarQueue ); //創(chuàng)建隊(duì)列</
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 - 車輛離開(kāi)" );</p><p> puts( "O - 顯示當(dāng)前停車場(chǎ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( "請(qǐng)輸入命令:" );</p><p> scanf( "%s", szUserInput );</p><p> puts( &q
73、uot;--------------------" );</p><p> char szCarInfor [128] = { NULL };</p><p> sscanf( szUserInput, // 將命令類型與車輛信息分開(kāi)存放</p><p><b> "%c,%s",</b></p&g
74、t;<p> &ComType, // 用戶輸入的前半部分,即命令類型</p><p> szCarInfor // 用戶輸入的后半部分,即車輛信息</p><p> );//sscanf()從一個(gè)字符串中讀進(jìn)與指定格式相符的數(shù)據(jù).</p><p> char *lpComLoc = NULL; // 車輛信息字符串中的逗號(hào)位置
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;//跳出整個(gè)for循環(huán)</p><p><b> }</b></p><p><b> }</b></p><p> *lpComLoc = '\0';</p><p> TCARINFOR c
77、arinfo = { NULL }; // 存儲(chǔ)本次用戶輸入的車輛信息</p><p> strcpy( carinfo.szRegMark, szCarInfor );</p><p> //把szCarInfor復(fù)制到carinfo.szRegMark(車牌號(hào))里</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不滿時(shí)</p><p><b> {</b></p><p> strcpy( carinfo.szEntTime, carinfo.szArrTime );</p><p> //車輛到達(dá)時(shí)間szArrTime復(fù)制給開(kāi)始收費(fèi)時(shí)間szEntTime</p><p>
80、Push( lpCarStack, carinfo );</p><p> printf( "已進(jìn)入停車場(chǎng)第 %d 個(gè)車位\n",lpCarStack->nTop + 1);</p><p> printf( "車牌號(hào):\t\t%s\n", carinfo.szRegMark );</p><p> printf(
81、 "進(jìn)入時(shí)間:\t%s\n", carinfo.szEntTime );</p><p> puts( "是否收費(fèi):\t是" );</p><p><b> }</b></p><p><b> else</b></p><p><b> {
82、</b></p><p> EnQueue( lpCarQueue, carinfo );</p><p> printf( "停車場(chǎng)已滿,已停放在便道的第 %d 個(gè)車位\n"</p><p> ,lpCarQueue->nEffSize);</p><p> printf( "車牌號(hào):
83、\t\t%s\n", carinfo.szRegMark );</p><p> printf( "停放時(shí)間:\t%s\n", carinfo.szArrTime );</p><p> puts( "是否收費(fèi):\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)建臨時(shí)lpTempCarStack,nParkCap(停車輛)</p><p> TCARINFOR carinfoOut = { NULL };</p><
86、;p> BOOL bIsCarFound = FALSE; //初始化bIsCarFound</p><p> while ( FALSE == IsStackEmpty( lpCarStack ) )//判斷棧lpCarStack不為空時(shí)</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 ) )//判斷臨時(shí)棧不為空時(shí)</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( "車牌號(hào)為 %s 的車未進(jìn)入停車場(chǎng).\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( "計(jì)費(fèi)時(shí)段:\t%s - %s (共 %d 分鐘)\n",</p><p> carinfoOut.szEntTime, //開(kāi)始計(jì)費(fèi)時(shí)間</p><p> carinfoOut.szDepTime, //車輛離開(kāi)時(shí)間</p><p> nContiMinu //持續(xù)時(shí)間</p><p>&
95、lt;b> );</b></p><p> double rExpense = CalcuExp ( nContiMinu ); //計(jì)算停車費(fèi)</p><p> printf( "應(yīng)交納的費(fèi)用:\t%.1lf 元\n", rExpense );</p><p> if ( FALSE == IsQueueEmpty(
96、lpCarQueue ) ) //如果隊(duì)列l(wèi)pCarQueue不空時(shí)</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 個(gè)車位,車牌
98、號(hào)為 %s 的車已進(jìn)入停車場(chǎng)\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( "[停車場(chǎng)使用情況]\n" );</p><p> puts( "[車位]\t[車牌號(hào)]\
100、t[到達(dá)時(shí)間]\t[進(jìn)入(開(kāi)始計(jì)費(fèi))時(shí)間]\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, //車牌號(hào)</p><p> lpCarStack->lpCarInfor [i].szArrTime, //車輛到達(dá)時(shí)間</p><p> lpCarStack->lpCarInfor [i]
102、.szEntTime //車輛進(jìn)停車場(chǎng)時(shí)間</p><p> ); //顯示停車場(chǎng)車輛信息</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[車牌號(hào)]\t[到達(dá)時(shí)間]\t[進(jìn)入(開(kāi)始計(jì)費(fèi))時(shí)間]\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, //車牌號(hào)</p><p> lpCarNode->carinfo.szArrTime, //車
106、輛到達(dá)時(shí)間</p><p> lpCarNode->carinfo.szEntTime //車輛進(jìn)停車場(chǎng)時(shí)間</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( "班級(jí):計(jì)081班\n" );</p><p> puts( "組長(zhǎng):耿超 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( "輸入信息有誤.第一個(gè)字符只能為 '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> 測(cè)試結(jié)果<
113、/b></p><p><b> 1.程序運(yùn)行界面</b></p><p><b> 2.輸入停車場(chǎng)容量</b></p><p><b> 3.輸入命令</b></p><p> 4.輸入命令A(yù)--輸入車輛信息停入停車場(chǎng)、便道</p><p&g
114、t; 5.輸入命令O顯示當(dāng)前存儲(chǔ)情況</p><p> 6.輸入命令D--輸入車輛信息駛出停車場(chǎng),計(jì)算停車費(fèi)</p><p> 7.輸入命令O顯示當(dāng)前存儲(chǔ)情況</p><p><b> 總結(jié)體會(huì)</b></p><p> 程序設(shè)計(jì)是一個(gè)長(zhǎng)期而又艱苦的過(guò)程。它需要經(jīng)過(guò)設(shè)計(jì)者對(duì)課題的理解與接受,找出對(duì)應(yīng)的合理的算法
115、,構(gòu)建基本框架,上機(jī)調(diào)試,不斷地修改和改進(jìn)等一系列復(fù)雜的過(guò)程。不過(guò),通過(guò)不斷的探索和實(shí)踐,慢慢地克服一個(gè)個(gè)難題。</p><p> 通過(guò)此次課程設(shè)計(jì)我們學(xué)到了好多的東西,對(duì)以前會(huì)的知識(shí)更加熟悉了,并且有了更深的認(rèn)識(shí);對(duì)不太清楚的知識(shí)點(diǎn)也有了新的理解。</p><p> 在調(diào)試時(shí)要認(rèn)真,出現(xiàn)的錯(cuò)誤要及時(shí)找出并改正,遇到問(wèn)題及時(shí)去查相關(guān)的資料,再反復(fù)的調(diào)試程序。把各個(gè)要注意的問(wèn)題要想到:同
116、時(shí)還要在程序中體現(xiàn)自己的風(fēng)格,從每個(gè)細(xì)節(jié)出發(fā),不放過(guò)每個(gè)知識(shí)點(diǎn)。另外,要注意語(yǔ)句、符號(hào)的使用。</p><p> 在設(shè)計(jì)過(guò)程中,團(tuán)隊(duì)精神也很重要,大家一起探討各個(gè)語(yǔ)句的作用,加深對(duì)程序的理解。 </p><p><b> 參考文獻(xiàn):</b></p><p> [1]嚴(yán)蔚敏等著。數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言)。北京:清華大學(xué)出版社,2004</
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 停車場(chǎng)問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---停車場(chǎng)管理系統(tǒng)
- 停車場(chǎng)管理-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---停車場(chǎng)仿真
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理系統(tǒng)
- 超市停車場(chǎng)管理模擬_數(shù)據(jù)結(jié)構(gòu)與處理課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng) (2)
評(píng)論
0/150
提交評(píng)論