版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)</p><p><b> 報(bào)告</b></p><p> 學(xué) 院:_電氣與信息工程學(xué)院_ 專業(yè)班級(jí): </p><p> 學(xué)生姓名: 學(xué) 號(hào): </p><p> 設(shè)計(jì)地點(diǎn)(單位)__ _ 計(jì)算機(jī)基礎(chǔ)自主學(xué)習(xí)中心 __ _ _設(shè)計(jì)題
2、目:_ 停車場(chǎng)管理模擬程序的設(shè)計(jì)_______ </p><p> 完成日期:2012年 7 月 6 日 </p><p> 指導(dǎo)教師評(píng)語(yǔ): ______________________ _________________</p><p> ____________________________________________
3、_____________________________________________________________________________________________________________________________________________________________ __________ _ </p><p
4、> 成績(jī)(五級(jí)記分制):______ __________ 指導(dǎo)教師(簽字):________ ________</p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 設(shè)計(jì)題目:停車場(chǎng)管理模擬程序的設(shè)計(jì)</p><p><b> 摘要</b></p>
5、;<p> 在這個(gè)科技發(fā)達(dá)的時(shí)代,汽車對(duì)于我們來(lái)說(shuō)越來(lái)越普遍,而人們對(duì)停車場(chǎng)的管理也更加信息化。本系統(tǒng)主要是對(duì)僅有一個(gè)門的停車場(chǎng)的簡(jiǎn)單管理的設(shè)計(jì)。對(duì)汽車進(jìn)入停車場(chǎng),若停車場(chǎng)滿,進(jìn)入便道等候,車場(chǎng)中有車離開后,便道上的車依次進(jìn)入停車場(chǎng)有一定的管理。而且停車場(chǎng)也有合理的收費(fèi)標(biāo)準(zhǔn)。</p><p> 該系統(tǒng)主要運(yùn)用的是C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),用棧(后進(jìn)先出)來(lái)模擬停車場(chǎng),隊(duì)列(先進(jìn)先出)來(lái)模擬便道
6、實(shí)現(xiàn)對(duì)汽車進(jìn)入和離開的管理,用簡(jiǎn)單的數(shù)據(jù)計(jì)算對(duì)汽車進(jìn)行收費(fèi)標(biāo)準(zhǔn)。使車主更清楚了解停車場(chǎng)的信息,車主可以根據(jù)系統(tǒng)的提示進(jìn)行每一項(xiàng)的操作。</p><p> 關(guān)鍵詞:停車場(chǎng)管理 C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu) 棧 隊(duì)列</p><p><b> 目 錄</b></p><p> 1設(shè)計(jì)內(nèi)容和要求1</p><p><b>
7、; 1.1設(shè)計(jì)內(nèi)容1</b></p><p><b> 1.2設(shè)計(jì)要求1</b></p><p><b> 2 概要設(shè)計(jì)2</b></p><p> 2.1 棧的抽象數(shù)據(jù)類型定義2</p><p> 2.2 模塊的劃分4</p><p>&l
8、t;b> 3 詳細(xì)設(shè)計(jì)5</b></p><p> 3.1 數(shù)據(jù)類型的定義5</p><p> 3.2 主要模塊的算法流程圖5</p><p> 3.3 主要模塊的算法描述7</p><p> 4 軟件的測(cè)試13</p><p><b> 5 總結(jié)16</b&g
9、t;</p><p><b> 參考文獻(xiàn)17</b></p><p><b> 致謝18</b></p><p><b> 附錄19</b></p><p><b> 1設(shè)計(jì)內(nèi)容和要求</b></p><p><
10、b> 1.1設(shè)計(jì)內(nèi)容</b></p><p> 假設(shè)停車場(chǎng)是一個(gè)可以停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛車,那么后來(lái)的車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)
11、為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用(在便道上停車不收費(fèi))。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。</p><p><b> 1.2設(shè)計(jì)要求</b></p><p> 以棧模擬停車場(chǎng),以隊(duì)列模擬便道。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼、到達(dá)或離
12、去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置(停車位從北向南依次編號(hào));若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用。程序退出時(shí),應(yīng)將停車場(chǎng)的當(dāng)前情況保存在磁盤上,以便下次運(yùn)行程序時(shí)能恢復(fù)到上次退出時(shí)的狀態(tài)。</p><p><b> 2 概要設(shè)計(jì)</b></p><p> 2.1 棧的抽象
13、數(shù)據(jù)類型定義</p><p> ?。?)棧的抽象數(shù)據(jù)類型定義</p><p> AST Stack{</p><p> 數(shù)據(jù)對(duì)象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}</p><
14、;p> 約定an端為棧頂,a1端為棧底。</p><p><b> 基本操作:</b></p><p> InitStack(&S)</p><p> 操作結(jié)果:構(gòu)造一個(gè)空棧S。</p><p> DestroyStack(&S)</p><p> 初始條件:棧S
15、已存在。</p><p> 操作結(jié)果:棧S被銷毀。</p><p> ClearStack(&S)</p><p> 初始條件:棧S已存在。</p><p> 操作結(jié)果:將棧S清為空棧。</p><p> StackEmpty(S)</p><p> 初始條件:棧S已存在。&
16、lt;/p><p> 操作結(jié)果:若棧S為空棧,則返回TRUE,否則FALSE。</p><p> StackLength(s)</p><p> 初始條件:棧S已存在。</p><p> 操作結(jié)果:返回S的元素個(gè)數(shù),既棧的長(zhǎng)度。</p><p> GetTop(S,&e)</p><p
17、> 初始條件:棧S已存在且非空。</p><p> 操作結(jié)果:用e返回S的棧頂元素。</p><p> Push(&S,e)</p><p> 初始條件:棧S已存在。</p><p> 操作結(jié)果:插入元素e為新的棧頂元素。</p><p> Pop(&S,&e)</p&g
18、t;<p> 初始條件:棧S已存在且非空。</p><p> 操作結(jié)果:刪除S的棧頂元素,并用e返回其值。</p><p> StackTraverse(S,visit())</p><p> 初始條件:棧S已存在且非空。</p><p> 操作結(jié)果:從棧底到棧頂依次對(duì)S的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦vis
19、it()失敗,則操作失效。</p><p> }ADT Stack</p><p> (2)隊(duì)列的抽象數(shù)據(jù)類型定義</p><p> ADT Queue{</p><p> 數(shù)據(jù)對(duì)象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai
20、>|ai-1,ai∈D,i=2,...,n}</p><p> 約定其中a1端為隊(duì)列頭,an為隊(duì)列尾。</p><p><b> 基本操作:</b></p><p> InitQueue(&Q)</p><p> 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q。</p><p> Destro
21、yQueue(&Q)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:隊(duì)列Q被銷毀,不再存在。</p><p> ClearQueue(&Q)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:將Q清為空隊(duì)列。</p><p&g
22、t; QueueEmpty(Q)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE。</p><p> QueueLength(Q)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。&
23、lt;/p><p> GetHead(Q,&e)</p><p> 初始條件:Q為非空隊(duì)列。</p><p> 操作結(jié)果:用e返回的隊(duì)頭元素。</p><p> EnQueue(&Q,e)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:插入元素e
24、為Q的新的隊(duì)尾元素。</p><p> DeQueue(&Q,&e)</p><p> 初始條件:Q為非空隊(duì)列。</p><p> 操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。</p><p> QueueTraverse(Q,visit())</p><p> 初始條件:Q已存在且非空。&l
25、t;/p><p> 操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì)Q的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit() 失敗,則操作失敗。</p><p> }ADT Queue </p><p><b> 2.2 模塊的劃分</b></p><p> 該系統(tǒng)主要有7個(gè)模塊,即:主函數(shù)模塊、棧模塊(模擬停車場(chǎng))、隊(duì)列
26、模塊(模擬便道)、汽車進(jìn)入模塊、汽車離開模塊、系統(tǒng)信息保存模塊、系統(tǒng)輸出顯示模塊。</p><p><b> 3 詳細(xì)設(shè)計(jì)</b></p><p> 3.1 數(shù)據(jù)類型的定義</p><p> typedef struct time</p><p><b> {</b></p>
27、<p> int hour; </p><p> int min; </p><p> }Time; //時(shí)間結(jié)點(diǎn) </p><p> typedef struct carnode</p><p><b> { </b></p><p> char num[10
28、]; </p><p> Time reach; </p><p> Time leave; </p><p> }Car; //車輛信息結(jié)點(diǎn) </p><p> typedef struct node</p><p><b> { </b></p>&
29、lt;p> Car *stack[100]; </p><p> int top; </p><p> }SqStack; //定義棧表示車位 </p><p> typedef struct car</p><p><b> { </b></p><p><
30、b> int num;</b></p><p> Car *data; </p><p> struct car *next; </p><p> }QNode; </p><p> typedef struct Node</p><p><b> { </
31、b></p><p> QNode *front; </p><p> QNode *rear; </p><p> }LinkQueue; //用隊(duì)列表示便道道</p><p> 3.2 主要模塊的算法流程圖</p><p><b> 圖4.1 界面顯示</b></p
32、><p><b> 圖4.2 汽車進(jìn)入</b></p><p><b> 圖4.3汽車離開</b></p><p> 3.3 主要模塊的算法描述</p><p> ?。?)汽車進(jìn)入停車場(chǎng): </p><p> int arrive(SqStack *In,LinkQue
33、ue *W,int n) //車輛到達(dá) (把元素要入棧中)</p><p> { Car *p; QNode *t; </p><p> p=(Car *)malloc(sizeof(Car)); flushall(); </p><p> printf("\n停車場(chǎng)還有%d個(gè)停車位(若停車位為0,車可先進(jìn)入便道等待)"
34、;,n-In->top);</p><p> printf("\n請(qǐng)輸入車牌號(hào)碼:"); gets(p->num); </p><p> if(In->top<n) //停車場(chǎng)未滿,車進(jìn)車場(chǎng) </p><p> { In->top++;</p><p> printf
35、("\n停車的位置:%d號(hào)停車位。",In->top); </p><p> printf("\n請(qǐng)輸入車到達(dá)的時(shí)間格式為“**:**”:"); </p><p> scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p>&l
36、t;p> fprintf(fpout,"車牌號(hào)為%s的汽車在%d:%d時(shí)進(jìn)入停車場(chǎng)的%d號(hào)車位\n",p->num,p->reach.hour,p->reach.min,In->top);</p><p> In->stack[In->top]=p;</p><p> printf("請(qǐng)按任意鍵返回")
37、;getch(); </p><p> return(1); </p><p><b> } </b></p><p> else //停車場(chǎng)已滿,車進(jìn)便道 </p><p> { printf("\n停車位已滿,該車須在便道等待!"); </p><p&
38、gt; fprintf(fpout,"\n停車位已滿,車牌號(hào)為%s車須在便道等待!\n",p->num); </p><p> t=(QNode *)malloc(sizeof(QNode)); </p><p> t->data=p; t->next=NULL; W->rear->next=t; W->re
39、ar=t; </p><p> printf("請(qǐng)按任意鍵返回"); getch();</p><p> return(1); </p><p><b> } </b></p><p><b> } </b></p><p> 開始
40、定義汽車節(jié)點(diǎn)指針P和t,先判斷停車場(chǎng)內(nèi)是否有空位,若In->top<n則汽車進(jìn)入停車場(chǎng),然后停車場(chǎng)的棧頂In->top 加1表示增加了新的車輛,接著輸入進(jìn)入車輛的信息。如果停車場(chǎng)沒(méi)有空位,則車進(jìn)入便道,就是把元素壓入隊(duì)列中。</p><p> ?。?)汽車離開停車場(chǎng):</p><p> void leave(SqStack *In,SqStack *Out,LinkQu
41、eue *W) //車輛離開 </p><p> { int room; Car *p,*t; QNode *q; </p><p> //判斷車場(chǎng)內(nèi)是否有車 </p><p> if(In->top>0) //有車 </p><p> { while(1) //輸入離開車輛的信息 &l
42、t;/p><p> { printf("\n請(qǐng)輸入車在停車場(chǎng)的位置(1-%d):",In->top); scanf("%d",&room); if(room>=1&&room<=In->top) break; </p><p><b> } </b></p&g
43、t;<p> while(In->top>room) //車輛離開 </p><p> { Out->top++; </p><p> Out->stack[Out->top]=In->stack[In->top]; </p><p> In->stack[In->top]=
44、NULL; In->top--; </p><p><b> } </b></p><p> p=In->stack[In->top]; </p><p> In->stack[In->top]=NULL; In->top--; </p><p> wh
45、ile(Out->top>=1) </p><p> { In->top++; </p><p> In->stack[In->top]=Out->stack[Out->top]; </p><p> Out->stack[Out->top]=NULL; Out->top--;
46、 </p><p><b> } </b></p><p> feiyong(p,room); </p><p> //判斷通道上是否有車及車站是否已滿 </p><p> if(W->front!=W->rear) //便道的車輛進(jìn)入停車場(chǎng) </p><p> {
47、q=W->front->next; t=q->data; In->top++; </p><p> printf("\n現(xiàn)在停車場(chǎng)有空位了,便道的%s號(hào)車將進(jìn)入停車場(chǎng)第%d號(hào)停車位。",t->num,In->top); </p><p> printf("\n請(qǐng)輸入現(xiàn)在的時(shí)間格式為“**:**”:"
48、;); </p><p> scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p> fprintf(fpout,"現(xiàn)在停車場(chǎng)有空位了,便道的%s號(hào)車在%d:%d時(shí)進(jìn)入停車場(chǎng)第%d號(hào)停車位。\n\n",t->num,In->top,t->r
49、each.hour,t->reach.min);</p><p> W->front->next=q->next; if(q==W->rear);W->rear=W->front; In->stack[In->top]=t; free(q);</p><p><b> } </b></p>
50、<p><b> } </b></p><p> else {printf("\n停車場(chǎng)里沒(méi)有車\n");</p><p> fprintf(fpout,"\n停車場(chǎng)里沒(méi)有車\n");}//沒(méi)車</p><p> printf("請(qǐng)按任意鍵返回");getch
51、();</p><p><b> }</b></p><p> 首先定義一個(gè)整型變量room,用來(lái)記錄要離開的車輛在停車場(chǎng)的位置,定義車輛結(jié)點(diǎn)指針p和t和隊(duì)列結(jié)點(diǎn)指針q,然后判斷停車場(chǎng)內(nèi)是否有車,如果有車,就輸入要離開的車輛在停車場(chǎng)的位置。若棧頂位置In->top大于要離開的車位置room,在要離開的車輛后面的車就要先離開,開到臨時(shí)停車場(chǎng),,因此Out所表示
52、的臨時(shí)棧的棧頂top加1,用來(lái)表示臨時(shí)停車場(chǎng)增加1輛車;接著把該車的信息拷貝到棧Out中,然后刪除棧In的棧頂。直到要離開的車輛后面的車都開到臨時(shí)停車場(chǎng)之后,該車才離開,離開之后,該車的信息結(jié)點(diǎn)In->stack[In->top]置空,然后棧頂In->top減1。之后就把臨時(shí)停車場(chǎng)的車開回停車場(chǎng)里,因此停車場(chǎng)的棧頂In->top 加1,然后就把臨時(shí)停車場(chǎng)的車結(jié)點(diǎn)的信息拷貝到停車場(chǎng)的車結(jié)點(diǎn)上,接著刪除臨時(shí)停車場(chǎng)車的
53、結(jié)點(diǎn)。最后判斷(W->front!=W->rear)即便道上是否有車滿,如果便道有車且停車場(chǎng)未滿,通道的車便可進(jìn)入停車場(chǎng),此時(shí)指針q指向便道的頭,即隊(duì)頭,然后停車場(chǎng)的棧頂In->top 加1以便增加新的車輛,接著輸入要進(jìn)停車場(chǎng)的車的信息,然后便道隊(duì)列的頭結(jié)點(diǎn)指向原隊(duì)列中第二輛車的結(jié)點(diǎn),接</p><p> ?。?)顯示停車場(chǎng)的出入信息</p><p> void xia
54、nshi1(SqStack *S) //列表輸出車場(chǎng)信息 </p><p> { int i; </p><p> if(S->top>0) //判斷停車場(chǎng)內(nèi)是否有車 </p><p> { printf("\n車場(chǎng):"); printf("\n 位置 到達(dá)時(shí)間 車牌號(hào)\n"); &
55、lt;/p><p> fprintf(fpout,"\n\車場(chǎng):"); fprintf(fpout,"\n 位置 到達(dá)時(shí)間 車牌號(hào)\n");</p><p> for(i=1;i<=S->top;i++) </p><p> { printf(" %d\t",i); </p
56、><p> printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p> puts(S->stack[i]->num); fprintf(fpout," %d\t",i); fprintf(fpout,"
57、;%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p> fprintf(fpout,"%s",S->stack[i]->num); </p><p><b> } </b></p><p
58、><b> } </b></p><p> else{ printf("\n停車場(chǎng)里沒(méi)有車"); </p><p> fprintf(fpout,"\n停車場(chǎng)里沒(méi)有車"); } </p><p><b> } </b></p><p&g
59、t; void xianshi2(LinkQueue *W) //顯示便道信息 </p><p> { QNode *p; p=W->front->next; </p><p> if(W->front!=W->rear) //判斷通道上是否有車 </p><p> { printf("\n便道中車輛的
60、號(hào)碼為:\n"); </p><p> fprintf(fpout,"\n便道中車輛的號(hào)碼為:\n"); </p><p> while(p!=NULL) </p><p><b> { </b></p><p> puts(p->data->num);
61、fprintf(fpout,"%s",p->data->num);</p><p> p=p->next; </p><p><b> } </b></p><p><b> } </b></p><p> else {printf(&qu
62、ot;\n便道里沒(méi)有車\n"); fprintf(fpout,"\n便道里沒(méi)有車\n\n");}</p><p> printf("請(qǐng)按任意鍵返回");getch();</p><p><b> } </b></p><p> 先顯示停車場(chǎng)的信息,首先判斷停車場(chǎng)里是否有車,如果有就輸出
63、車輛信息即車位,車牌號(hào)和到達(dá)時(shí)間。如果停車場(chǎng)里沒(méi)有車,就輸出停車場(chǎng)沒(méi)有車。再判斷便道上是否有車,如果有車就輸出便道上車輛的車牌號(hào),若沒(méi)有就輸出便道上沒(méi)有車。最后按任意鍵返回。</p><p> ?。?)計(jì)算汽車離開時(shí)的收費(fèi)情況</p><p> void feiyong(Car *p,int room) //輸出停車站車的信息 </p><p> { i
64、nt A1,A2,B1,B2; int s,sum; </p><p> printf("\n請(qǐng)輸入車離開的時(shí)間格式為“**:**”:"); </p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); </p><p> pri
65、ntf("\n車牌號(hào)碼:"); puts(p->num); </p><p> printf("\n車到達(dá)的時(shí)間是: %d:%d",p->reach.hour,p->reach.min); </p><p> printf("車離開的時(shí)間是: %d:%d",p->leave.hour,p->
66、leave.min); </p><p> fprintf(fpout,"車牌號(hào)為%s的汽車在%d:%d時(shí)離開,",p->num,p->leave.hour,p->leave.min); </p><p> A1=p->reach.hour; A2=p->reach.min; </p><p> B
67、1=p->leave.hour; B2=p->leave.min;</p><p> s=(B1*60+B2)-(A1*60+A2);</p><p> if(s%60>=30) sum=(s/60+1)*3;</p><p> else sum=s/60*3;</p><p> printf("您所需
68、繳納的費(fèi)用為: %d元\n",sum); </p><p> fprintf(fpout,"車主需繳納的費(fèi)用為: %d元\n\n",sum); </p><p> free(p); </p><p><b> }</b></p><p> 首先讓戶主輸入離開時(shí)的時(shí)間,然后根據(jù)
69、該車到達(dá)的時(shí)間算出該車總停留的時(shí)</p><p> 間,再根據(jù)每小時(shí)3元,不足一小時(shí)四舍五入即s=(B1*60+B2)-(A1*60+A2);</p><p> if(s%60>=30) sum=(s/60+1)*3;else sum=s/60*3;算出總的費(fèi)用。</p><p><b> 。</b></p><
70、p><b> 4 軟件的測(cè)試</b></p><p> 進(jìn)入界面輸入停車場(chǎng)的最大容量為6:</p><p> 圖5.1系統(tǒng)初始化界面圖</p><p> 2.輸入8輛車進(jìn)入停車場(chǎng),并顯示停車場(chǎng)的信息:</p><p> 圖4.2汽車進(jìn)入停車場(chǎng)的示意圖</p><p> 圖4.3汽
71、車進(jìn)入便道示意圖</p><p> 圖4.4顯示停車場(chǎng)的信息圖</p><p> 3.使3號(hào)位的車離開車場(chǎng),離開后便道上的車進(jìn)入停車場(chǎng),并顯示汽車離開后停車場(chǎng)的信息:</p><p> 圖4.5汽車離開車場(chǎng),便道上的車進(jìn)入車場(chǎng)的示意圖</p><p> 圖4.6顯示停車場(chǎng)的信息</p><p><b>
72、; 4.退出系統(tǒng):</b></p><p> 圖4.7退出系統(tǒng)示意圖</p><p> 5.停車場(chǎng)的所有出入信息保存在estdout.pc2文件中:</p><p> 圖4.8車場(chǎng)信息存入磁盤的部分示意圖</p><p><b> 5 總結(jié)</b></p><p> 通過(guò)這
73、次數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計(jì),我更加理解了棧和隊(duì)列這兩種重要的線性結(jié)構(gòu)。知道了棧和隊(duì)列的抽象數(shù)據(jù)類型的定義,知道了棧的順序存儲(chǔ)結(jié)構(gòu)和隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的定義和算法描述,也充分的理解了用棧和隊(duì)列實(shí)現(xiàn)模擬停車場(chǎng)的基本原理。學(xué)會(huì)了編一些簡(jiǎn)單的停車場(chǎng)的程序。這次的程序設(shè)計(jì)總的來(lái)說(shuō)我覺(jué)得編寫的還可以,但是仍然有一些地方需要完善,如把停車場(chǎng)的信息保存在磁盤上,就有一些困難。后面還是通過(guò)和同學(xué)一起討論才有了大概的思路,知道了從哪里下手。剛開始看到這個(gè)程序任務(wù)
74、時(shí),我還不知道從哪里下手,該怎么編寫,腦袋里沒(méi)有一點(diǎn)頭緒,很盲目,但是后來(lái)把題目多讀了幾遍,詳細(xì)地對(duì)題目分析和思考,理清楚思緒后,就知道具體應(yīng)該做什么了。編完這個(gè)數(shù)據(jù)結(jié)構(gòu)的程序我真的學(xué)會(huì)了許多東西,它結(jié)合了我上學(xué)期學(xué)習(xí)的C語(yǔ)言和這學(xué)期學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)的知識(shí)。讓我學(xué)會(huì)把所學(xué)的知識(shí)充分有效的運(yùn)用到了一起。又一次鞏固了C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí)。這個(gè)過(guò)程中的點(diǎn)點(diǎn)滴滴在課堂上是體會(huì)不到的,這個(gè)過(guò)程中的收獲在課堂上也是學(xué)不到的。</p>
75、<p> 在編寫這個(gè)程序的過(guò)程中,我從無(wú)從下手到有一點(diǎn)點(diǎn)思路,再到慢慢動(dòng)手自己編寫,最后把編寫的琳琳碎碎的代碼結(jié)合在一起。過(guò)程中遇到麻煩有懊惱過(guò),想放棄過(guò),但是最后還是一步一步走過(guò)來(lái)了。我想不管遇到什么困難,我都不要輕言放棄,因?yàn)橹灰环艞壘瓦€有希望,如果放棄了就什么機(jī)會(huì)也沒(méi)有了。</p><p> 在此我也非常感謝我同學(xué)的幫助,他們給我講解程序中的一些小錯(cuò)誤,或者不懂的地方,幫我理清一些小混亂
76、,減少了我的一些困惑。還要特別感謝我的指導(dǎo)老師。感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程有了更深的了解,也懂得了更多知識(shí),他教我怎么理解和分析問(wèn)題,在剛開始沒(méi)有頭緒時(shí),他給我一些小小的提示,在編程序的過(guò)程中,遇到棘手的問(wèn)題,他也耐心認(rèn)真的給我講解。真的非常感謝你們。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 嚴(yán)蔚敏 吳偉明. 數(shù)
77、據(jù)結(jié)構(gòu)(C語(yǔ)言版).北京:清華大學(xué)出版社 2011: 44-65</p><p> [2] 何欽銘 顏暉. C語(yǔ)言程序設(shè)計(jì) .高等教育出版社 2008</p><p> [3] 譚浩強(qiáng) 張基溫. C語(yǔ)言程序設(shè)計(jì)教程 .高等教育出版社 2006</p><p> [4] Stephen Prata. C Primer Plus(第五版)中文版 .北京:人民郵電出
78、版社 2005: 353-376</p><p><b> 致謝</b></p><p> 非常感謝指導(dǎo)老師的幫助,還有我的同學(xué)和室友的幫助。謝謝!</p><p><b> 向蘇虹</b></p><p> 2012年 7月5日</p><p><b>
79、 附錄</b></p><p> #include <stdio.h> </p><p> #include <stdlib.h> </p><p> #include <conio.h></p><p> #include <assert.h></p>
80、<p> typedef struct time{</p><p> int hour; </p><p> int min; </p><p> }Time; //時(shí)間結(jié)點(diǎn) </p><p> typedef struct carnode</p><p> { char num[
81、10]; </p><p> Time reach; </p><p> Time leave; </p><p> }Car; //車輛信息結(jié)點(diǎn) </p><p> typedef struct node</p><p> { Car *stack[100]; </p>
82、<p> int top; </p><p> }SqStack; //定義棧表示車位 </p><p> typedef struct car</p><p> { int num;</p><p> Car *data; </p><p> struct car *next;
83、 </p><p> }QNode; </p><p> typedef struct Node</p><p> { QNode *front; </p><p> QNode *rear; </p><p> }LinkQueue; //用隊(duì)列表示便道道 </p>&l
84、t;p> int n ; FILE *fpout;</p><p> void InitStack(SqStack *); //初始化棧 </p><p> int InitQueue(LinkQueue *); //初始化隊(duì)列 </p><p> int arrive(SqStack *,LinkQueue *,int); //車輛到達(dá) &l
85、t;/p><p> void leave(SqStack *,SqStack *,LinkQueue *); //車輛離開 </p><p> void xianshi(SqStack,LinkQueue); //顯示停車場(chǎng)信息 </p><p> void feiyong(Car *p,int room);</p><p> vo
86、id InitStack(SqStack *s) //初始化棧 { </p><p> int i; s->top=0; </p><p> for(i=0;i<=n;i++) </p><p> s->stack[s->top]=NULL; </p><p><b> }
87、</b></p><p> int InitQueue(LinkQueue *Q) //初始化隊(duì)列 </p><p> { Q->front=(QNode *)malloc(sizeof(QNode)); </p><p> if(Q->front!=NULL) </p><p><b>
88、 { </b></p><p> Q->front->next=NULL; Q->rear=Q->front; </p><p> return(1); </p><p><b> } </b></p><p> else return(-1); <
89、;/p><p><b> } </b></p><p> int arrive(SqStack *In,LinkQueue *W,int n) //車輛到達(dá) (把元素要入棧中) </p><p><b> { </b></p><p> Car *p; QNode *t; <
90、/p><p> p=(Car *)malloc(sizeof(Car)); </p><p> flushall(); </p><p> printf("\n停車場(chǎng)還有%d個(gè)停車位(若停車位為0,車可先進(jìn)入便道等待)",n-In->top);</p><p> printf("\n請(qǐng)輸入車牌號(hào)
91、碼:"); </p><p> gets(p->num); </p><p> if(In->top<n) //停車場(chǎng)未滿,車進(jìn)車場(chǎng) </p><p> { In->top++;</p><p> printf("\n停車的位置:%d號(hào)停車位。",In->to
92、p); </p><p> printf("\n請(qǐng)輸入車到達(dá)的時(shí)間格式為“**:**”:"); </p><p> scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p> fprintf(fpout,"車牌號(hào)為%s的汽車
93、在%d:%d時(shí)進(jìn)入停車場(chǎng)的%d號(hào)車位\n",p->num,p->reach.hour,p->reach.min,In->top);</p><p> In->stack[In->top]=p;</p><p> printf("請(qǐng)按任意鍵返回");getch(); </p><p> retu
94、rn(1); </p><p><b> } </b></p><p> else //停車場(chǎng)已滿,車進(jìn)便道 </p><p> { printf("\n停車位已滿,該車須在便道等待!"); </p><p> fprintf(fpout,"\n停車位已滿,車牌號(hào)為%
95、s車須在便道等待!\n",p->num); </p><p> t=(QNode *)malloc(sizeof(QNode)); </p><p> t->data=p; t->next=NULL; </p><p> W->rear->next=t; W->rear=t; </p>
96、;<p> printf("請(qǐng)按任意鍵返回"); getch();</p><p> return(1); </p><p><b> } </b></p><p><b> } </b></p><p> void leave(SqStac
97、k *In,SqStack *Out,LinkQueue *W) </p><p> { //車輛離開 </p><p> int room; Car *p,*t; QNode *q; </p><p> //判斷車場(chǎng)內(nèi)是否有車 </p><p> if(In->top>0) //有車 </
98、p><p> { while(1) //輸入離開車輛的信息 </p><p> { printf("\n請(qǐng)輸入車在停車場(chǎng)的位置(1-%d):",In->top); </p><p> scanf("%d",&room); </p><p> if(room>=1&
99、amp;&room<=In->top) break; </p><p><b> } </b></p><p> while(In->top>room) //車輛離開 </p><p> { Out->top++; </p><p> Out->st
100、ack[Out->top]=In->stack[In->top]; </p><p> In->stack[In->top]=NULL; In->top--; </p><p><b> } </b></p><p> p=In->stack[In->top]; <
101、/p><p> In->stack[In->top]=NULL; In->top--; </p><p> while(Out->top>=1) </p><p> { In->top++; </p><p> In->stack[In->top]=Out->sta
102、ck[Out->top]; </p><p> Out->stack[Out->top]=NULL; Out->top--; </p><p><b> } </b></p><p> feiyong(p,room); </p><p> //判斷通道上是否有車及車站是否已
103、滿 </p><p> if(W->front!=W->rear) //便道的車輛進(jìn)入停車場(chǎng) </p><p> { q=W->front->next; </p><p> t=q->data; In->top++; </p><p> printf("\n現(xiàn)在停車場(chǎng)有空位
104、了,便道的%s號(hào)車將進(jìn)入停車場(chǎng)第%d號(hào)停車位。",t->num,In->top); </p><p> printf("\n請(qǐng)輸入現(xiàn)在的時(shí)間格式為“**:**”:"); </p><p> scanf("%d:%d",&(t->reach.hour),&(t->reach.min));<
105、;/p><p> fprintf(fpout,"現(xiàn)在停車場(chǎng)有空位了,便道的%s號(hào)車在%d:%d時(shí)進(jìn)入停車場(chǎng)第%d號(hào)停車位。\n\n",t->num,In->top,t->reach.hour,t->reach.min);</p><p> W->front->next=q->next;</p><p>
106、 if(q==W->rear) W->rear=W->front; </p><p> In->stack[In->top]=t; </p><p><b> free(q);</b></p><p><b> } </b></p><p><b
107、> } </b></p><p> else {printf("\n停車場(chǎng)里沒(méi)有車\n");</p><p> fprintf(fpout,"\n停車場(chǎng)里沒(méi)有車\n");}//沒(méi)車</p><p> printf("請(qǐng)按任意鍵返回");getch();</p>&
108、lt;p><b> }</b></p><p> void xianshi1(SqStack *S) //列表輸出車場(chǎng)信息 </p><p> { int i; </p><p> if(S->top>0) //判斷停車場(chǎng)內(nèi)是否有車 </p><p><b> {
109、</b></p><p> printf("\n車場(chǎng):"); </p><p> printf("\n 位置 到達(dá)時(shí)間 車牌號(hào)\n"); </p><p> fprintf(fpout,"\n\n車場(chǎng):"); </p><p> fprintf(fpo
110、ut,"\n 位置 到達(dá)時(shí)間 車牌號(hào)\n");</p><p> for(i=1;i<=S->top;i++) </p><p> { printf(" %d\t",i); </p><p> printf("%d:%d ",S->stack[i]->reac
111、h.hour,S->stack[i]->reach.min); </p><p> puts(S->stack[i]->num); </p><p> fprintf(fpout," %d\t",i); </p><p> fprintf(fpout,"%d:%d ",S->
112、;stack[i]->reach.hour,S->stack[i]->reach.min); </p><p> fprintf(fpout,"%s",S->stack[i]->num); </p><p><b> } </b></p><p><b> } &
113、lt;/b></p><p> else{ printf("\n停車場(chǎng)里沒(méi)有車"); </p><p> fprintf(fpout,"\n停車場(chǎng)里沒(méi)有車"); } </p><p><b> } </b></p><p> void xianshi2(Li
114、nkQueue *W) //顯示便道信息 </p><p> { QNode *p; </p><p> p=W->front->next; </p><p> if(W->front!=W->rear) //判斷通道上是否有車 </p><p><b> { </b>
115、;</p><p> printf("\n便道中車輛的號(hào)碼為:\n"); </p><p> fprintf(fpout,"\n便道中車輛的號(hào)碼為:\n"); </p><p> while(p!=NULL) </p><p> { puts(p->data->num)
116、; </p><p> fprintf(fpout,"%s",p->data->num);p=p->next; </p><p><b> } </b></p><p><b> } </b></p><p> else {printf(&
117、quot;\n便道里沒(méi)有車\n"); fprintf(fpout,"\n便道里沒(méi)有車\n\n");}</p><p> printf("請(qǐng)按任意鍵返回");getch();</p><p><b> } </b></p><p> void xianshi(SqStack S,Link
118、Queue W) </p><p> { xianshi1(&S); //顯示停車場(chǎng)信息 xianshi2(&W); //顯示停便道信息 } </p><p> void feiyong(Car *p,int room) //輸出停車站車的信息 </p><p> { int A1,A2,B1,B2; int s,s
119、um; </p><p> printf("\n請(qǐng)輸入車離開的時(shí)間格式為“**:**”:"); </p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); </p><p> printf("\n車牌號(hào)碼:")
120、; puts(p->num); </p><p> printf("\n車到達(dá)的時(shí)間是: %d:%d",p->reach.hour,p->reach.min); </p><p> printf("車離開的時(shí)間是: %d:%d",p->leave.hour,p->leave.min); </p>
121、<p> fprintf(fpout,"車牌號(hào)為%s的汽車在%d:%d時(shí)離開,",p->num,p->leave.hour,p->leave.min); </p><p> A1=p->reach.hour; A2=p->reach.min; </p><p> B1=p->leave.hour; B
122、2=p->leave.min;</p><p> s=(B1*60+B2)-(A1*60+A2);if(s%60>=30) sum=(s/60+1)*3;</p><p> else sum=s/60*3;</p><p> printf("您所需繳納的費(fèi)用為: %d元\n",sum); </p><p&g
123、t; fprintf(fpout,"車主需繳納的費(fèi)用為: %d元\n\n",sum); </p><p> free(p); </p><p><b> }</b></p><p> void main() </p><p> { fpout=fopen("estd
124、out.pc2","a");</p><p> assert(fpout);</p><p> int n; //存儲(chǔ)車庫(kù)最大容量</p><p> SqStack In,Out; LinkQueue Wait; int ch; </p><p> InitStack(&In); //
125、初始化停車場(chǎng) InitStack(&Out); //初始化讓路的臨時(shí)棧 </p><p> InitQueue(&Wait); //初始化便道 </p><p> while(1) </p><p> { printf("--------------------歡迎使用停車場(chǎng)管理系統(tǒng)-----------------
126、---\n");</p><p> printf("本停車場(chǎng)的收費(fèi)標(biāo)準(zhǔn)為3元/小時(shí),不足一小時(shí)部分四舍五入\n");</p><p> printf("請(qǐng)輸入停車場(chǎng)的的最大容量:");scanf("%d",&n);</p><p> printf("您輸入的停車場(chǎng)容量為%d
127、位\n",n);</p><p> printf(".................操 作 菜 單...............\n");</p><p> printf(" 1車輛到達(dá)2車輛離開3停車場(chǎng)信息4退出系統(tǒng)\n請(qǐng)您選擇選擇需要操作的:\n");</p><p> whil
128、e(1) </p><p> { ch=getch();</p><p> switch(ch) </p><p> { case 49:arrive(&In,&Wait,n);break; //車輛到達(dá) </p><p> case 50:leave(&In,&Out,&W
129、ait);break; //車輛離開 </p><p> case 51:xianshi(In,Wait);break; //輸出車站信息</p><p> case 52:{printf("謝謝使用!");exit(0);} //退出主程序 </p><p> default:printf("\n按鍵無(wú)效,請(qǐng)重新按鍵選擇
130、!");</p><p> }//49-52分別表示"1"-"4"這四個(gè)按鍵的鍵值</p><p> system("CLS");</p><p> printf("--------------------歡迎使用停車場(chǎng)管理系統(tǒng)--------------------\n"
131、;);</p><p> printf("本停車場(chǎng)的收費(fèi)標(biāo)準(zhǔn)為3元/小時(shí),不足一小時(shí)部分四舍五入\n");</p><p> printf("您輸入的停車場(chǎng)容量為%d位\n",n);</p><p> printf("................. 操 作 菜 單............
132、..........\n");</p><p> printf(" 1為車輛到達(dá) 2為車輛離開 3為停車場(chǎng)信息 4為退出系統(tǒng)\n請(qǐng)您選擇選擇需要操作的:\n");</p><p><b> } </b></p><p><b> } </b></p>
溫馨提示
- 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)管理系統(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)管理系統(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ì)--停車場(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ì)報(bào)告---停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng) (2)
- 停車場(chǎng)管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理報(bào)告
評(píng)論
0/150
提交評(píng)論