數(shù)據(jù)結(jié)構(gòu) 停車場管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu) 停車場管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu) 停車場管理系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu) 停車場管理系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu) 停車場管理系統(tǒng)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、設(shè)計(jì)目的1了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;2.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;3.提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力;4.訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。二、設(shè)計(jì)內(nèi)容設(shè)停車場是一個(gè)可停放n輛汽車的狹長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等待,一旦有車開走,則排在便道上的第

2、一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時(shí)必須按它停留的時(shí)間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。三、設(shè)計(jì)要求按照從終端讀入的輸入數(shù)據(jù)進(jìn)行模擬管理,每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“進(jìn)站”或“出站”信息、汽車牌照號碼以及進(jìn)站或出站的時(shí)刻,對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)逗留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留不收費(fèi)),按以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。四

3、、設(shè)計(jì)過程1、算法思想分析由于停車場是一個(gè)狹窄通道,而且只有一個(gè)大門可供汽車進(jìn)出,問題要求汽車停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列。由此很容易聯(lián)想到數(shù)據(jù)結(jié)構(gòu)中的堆棧模型,因此可首先設(shè)計(jì)一個(gè)堆棧,以堆棧來模擬停車場,又因?yàn)槊總€(gè)汽車的車牌號都不一樣,這樣一來可以根據(jù)車牌號準(zhǔn)確找到汽車位置,所以堆棧里的數(shù)據(jù)元素我設(shè)計(jì)成汽車的車牌號。當(dāng)停車場內(nèi)某輛車要離開時(shí),在他之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入停車場。這是個(gè)一退一進(jìn)的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設(shè)計(jì)一個(gè)堆棧,以之來暫時(shí)存放為出站汽車暫時(shí)讓道的汽車車牌號。當(dāng)停車場滿后

4、,繼續(xù)進(jìn)來的汽車需要停放在停車場旁邊的便道上等候,若停車場有汽車開走,則按排隊(duì)的先后順序依次進(jìn)站,最先進(jìn)入便道的汽車將會最先進(jìn)入停車場,這完全是一個(gè)先進(jìn)先出模型,因此可設(shè)計(jì)一個(gè)隊(duì)列來模擬便道,隊(duì)列中的數(shù)據(jù)元素仍然設(shè)計(jì)成汽車的車牌號。另外,停車場根據(jù)汽車在停車場內(nèi)停放的總時(shí)長來收費(fèi)的,在便道上的時(shí)間不計(jì)費(fèi),因此必須記錄車輛進(jìn)入停車場時(shí)的時(shí)間,車輛離開停車場時(shí)的時(shí)間不需要記錄,當(dāng)從終端輸入時(shí)可直接使用。由于時(shí)間不像汽車一樣需要讓道,我設(shè)計(jì)了一個(gè)順序表來存放時(shí)間。又用順序表用派生法設(shè)計(jì)了一個(gè)堆棧,恰好滿足上面模擬停車場的需要。2、算法描述與實(shí)現(xiàn)(1)時(shí)間結(jié)點(diǎn)類型typedef struct time

5、 int hour; int min; Time; /*時(shí)間結(jié)點(diǎn)*/ (2)車輛進(jìn)出站信息類型typedef struct node char num10;Time reach; Time leave; CarNode; /*車輛信息結(jié)點(diǎn)*/ (3)停車場和便道信息類型typedef struct NODE CarNode *stackMax+1;int top; SeqStackCar; /*模擬車站*/typedef struct car CarNode *data;struct car *next; QueueNode; typedef struct Node QueueNode *he

6、ad; QueueNode *rear; LinkQueueCar; /*模擬通道*/ void InitStack(SeqStackCar *,int n); /*聲明棧*/初始化,創(chuàng)建一個(gè)新棧S用于停車場int InitQueue(LinkQueueCar *); /*聲明便道*/初始化,創(chuàng)建一個(gè)隊(duì)列Q用于便道int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(&q

7、uot;n請輸入車牌號(例如:吉A1234):"); gets(p->num); if(Enter->top<MAX) /*車場未滿,車進(jìn)車場*/ Enter->top+; printf("n車輛在車場第%d位置.",Enter->top); printf("n請輸入到達(dá)時(shí)間:/*:*/"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min); Enter->stackEnter->top=p; return(1

8、); else /*車場已滿,車進(jìn)便道等待*/ printf("n該車須在便道等待!"); t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*車輛出站*/(4)主函數(shù)和其它函數(shù)的偽碼算法void main() SeqStackCar Enter,Temp; Li

9、nkQueueCar Wait;int ch;int n; n=getn();InitStack(&Enter,n); /*初始化車場*/InitStack(&Temp,n); /*初始化讓路的臨時(shí)棧*/InitQueue(&Wait); /*初始化便道*/while(1) printf("n1. 車輛進(jìn)站");printf(" 2. 車輛出站");printf(" 3. 存車信息");printf(" 4. 退出系統(tǒng)n"); while(1) printf("請選擇: 1|2|3

10、|4.n");scanf("%d",&ch);fflush(stdin);doif(ch>4 | ch<1)printf("輸入有誤,請重新輸入!");scanf("%d",&ch);fflush(stdin);elsebreak;while(ch>4 | ch<1);break;switch(ch) case 1:Arrival(&Enter,&Wait,n);break; /*車輛進(jìn)站*/case 2:Leave(&Enter,&Temp,&

11、Wait,n);break; /*車輛出站*/case 3:List(Enter,Wait);break; /*存車信息*/case 4:exit(0); /*退出系統(tǒng)*/default:break; 系統(tǒng)測試程序初始界面:車輛進(jìn)站:停車場存車信息:車輛進(jìn)入便道:車輛出站:便道上的車出站:五、設(shè)計(jì)總結(jié)參考文獻(xiàn):數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)題典李春葆等編 清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)(C語言版) 黃國瑜 葉乃菁編 清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)蘇仕華 等編 機(jī)械工業(yè)出版社附錄:#include<stdio.h>#include<stdlib.h> #include<string.h&

12、gt;#include<malloc.h>/*-*/ #define Max 10int getn()int n;printf("歡迎您光臨吉吉停車場,");printf("本停車場管理實(shí)行24小時(shí)制,停車每分鐘0.1元.n");printf("請輸入停車場可容納的車(最多10輛):");scanf("%d",&n);fflush(stdin);doif(n<1 | n>10)printf("輸入的車輛數(shù)不在要求范圍內(nèi),請重新輸入!");scanf("%

13、d",&n);fflush(stdin);else break;while(n<1 | n>10);return n;typedef struct time int hour; int min; Time; /*時(shí)間結(jié)點(diǎn)*/ typedef struct node char num10;Time reach; Time leave; CarNode; /*車輛信息結(jié)點(diǎn)*/ typedef struct NODE CarNode *stackMax+1;int top; SeqStackCar; /*模擬車站*/typedef struct car CarNode

14、*data;struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬通道*/ void InitStack(SeqStackCar *,int n); /*聲明棧*/int InitQueue(LinkQueueCar *); /*聲明便道*/int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueue

15、Car *,int n); /*車輛出站*/void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ void InitStack(SeqStackCar *s,int n) /*初始化棧*/ int i; s->top=0; for(i=0;i<=n;i+)s->stacks->top=NULL; intInitQueue(LinkQueueCar *Q) /*初始化便道*/ Q->head=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL) Q->h

16、ead->next=NULL; Q->rear=Q->head; return(1); else return(-1); voidPRINT(CarNode *p) /*打印出站車的信息*/ int A1,A2,B1,B2;int a,b,c; printf("n請輸入離開的時(shí)間:/*:*/"); scanf("%d:%d",&(p->leave.hour),&(p->leave.min);fflush(stdin);doif(p->leave.hour<p->reach.hour | (p

17、->leave.hour=p->reach.hour && p->leave.min<p->reach.min)printf("輸入離開時(shí)間比進(jìn)站時(shí)間早,請重新輸入!n");scanf("%d:%d",&(p->leave.hour),&(p->leave.min);fflush(stdin);if(p->leave.hour<0 | p->leave.hour>=24 | p->leave.min<0 | p->leave.min>

18、=60)printf("輸入的時(shí)間格式有錯(cuò),請重新輸入!");scanf("%d:%d",&(p->leave.hour),&(p->leave.min);fflush(stdin);else break;while(p->leave.hour<p->reach.hour | (p->leave.hour=p->reach.hour && p->leave.min<p->reach.min) | p->leave.hour<0 | p->leav

19、e.hour>=24 | p->leave.min<0 | p->leave.min>=60);printf("車場現(xiàn)在有一輛車離開,請便道里的第一輛車進(jìn)入車場!n");printf("出站的車的車牌號為:");puts(p->num);printf("n");A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min;a=(B1-A1)*60+B2-A2;if(a>=60)b=a/60;c=

20、a-60*b;elseb=0;c=a;printf(" 祝您一路順風(fēng),歡迎您下次光臨.");printf("n 收 據(jù)n");printf("= 車牌號: ");puts(p->num);printf("n");printf("=n");printf("|進(jìn)車場時(shí)刻 | 出車場時(shí)刻 | 停留時(shí)間 | 應(yīng)付(元)|n");printf("=n");printf("| %d:%d",p->reach.hour,p->rea

21、ch.min);printf(" | %d:%d",p->leave.hour,p->leave.min);printf(" | %d:%d",b,c);printf(" | %2.1f",0.1*a);printf(" |n");printf("-n");free(p); intArrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*車輛到達(dá)*/ CarNode *p; QueueNode *t; int a,b;p=(CarNode

22、 *)malloc(sizeof(CarNode); flushall(); printf("n請輸入車牌號(七位,例:吉A1234):n");printf("請嚴(yán)格按照要求輸入車牌號,否則系統(tǒng)會出錯(cuò)!n");doa=strlen("陜A1234");b=strlen(gets(p->num);fflush(stdin);if(a!=b)printf("輸入車牌號格式錯(cuò)誤,請重新輸入(七位)!n");gets(p->num);fflush(stdin);else break;if(a!=b)printf

23、("輸入車牌號格式錯(cuò)誤,請重新輸入(七位)!n");while(a!=b);if(Enter->top<n) /*車場未滿,車進(jìn)車場*/ Enter->top+; printf("n車輛在車場第%d位置.",Enter->top); fflush(stdin);printf("n請輸入到達(dá)時(shí)間:/*:*/"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min);fflush(stdin);doif(p->reach

24、.hour<0 | p->reach.hour>=24 | p->reach.min<0 | p->reach.min>=60)printf("輸入的時(shí)間格式有錯(cuò),請重新輸入!");scanf("%d:%d",&(p->reach.hour),&(p->reach.min);fflush(stdin);elsebreak;while(p->reach.hour<0 | p->reach.hour>=24 | p->reach.min<0 | p-&g

25、t;reach.min>=60);Enter->stackEnter->top=p; return(1); else /*車場已滿,車進(jìn)便道*/ printf("n請?jiān)撥囋诒愕郎宰鞯却?");t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); voidLeave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,in

26、t n) /*車輛離開*/ int i, room; CarNode *p,*t; QueueNode *q; /*判斷車場內(nèi)是否有車*/ if(Enter->top>0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf("n請輸入要離開的車在車場的位置/1-%d/:",Enter->top);scanf("%d",&room);fflush(stdin); if(room>=1&&room<=Enter->top) break; while(Enter->top

27、>room) /*車輛離開*/ Temp->top+; Temp->stackTemp->top=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; while(Temp->top>=1) Enter->top+; Enter->stackEnter->top=Temp

28、->stackTemp->top; Temp->stackTemp->top=NULL; Temp->top-; PRINT(p);/*判斷通道上是否有車及車站是否已滿*/ if(W->head!=W->rear)&&Enter->top<n) /*便道的車輛進(jìn)入車場*/q=W->head->next; t=q->data; Enter->top+; printf("n現(xiàn)在請便道上的車進(jìn)入車場.該車的車牌號為:");puts(t->num);printf("n該車進(jìn)

29、入車場第%d位置.",Enter->top);printf("n請輸入現(xiàn)在的時(shí)間(即該車進(jìn)站的時(shí)間)/*:*/:");scanf("%d:%d",&(t->reach.hour),&(t->reach.min);fflush(stdin); doif(t->reach.hour<0 | t->reach.hour>=24 | t->reach.min<0 | t->reach.min>=60)printf("輸入的時(shí)間格式有錯(cuò),請重新輸入!")

30、;scanf("%d:%d",&(t->reach.hour),&(t->reach.min);fflush(stdin);elsebreak;while(t->reach.hour<0 | t->reach.hour>=24 | t->reach.min<0 | t->reach.min>=60);W->head->next=q->next; if(q=W->rear) W->rear=W->head; Enter->stackEnter->top=

31、t; free(q); else printf("n目前便道里沒有車.n"); else printf("n目前車場里沒有車,來車請直接進(jìn)入車場!"); /*沒車*/ voidList1(SeqStackCar *S) /*列表顯示車場存車信息*/ int i; if(S->top>0) /*判斷車站內(nèi)是否有車*/ printf("n車場:"); printf("n 位置 到達(dá)時(shí)間 車牌號n"); for(i=1;i<=S->top;i+) printf(" %d ",i

32、); printf("%d:%d ",S->stacki->reach.hour,S->stacki->reach.min); puts(S->stacki->num); else printf("n目前車場里沒有車"); voidList2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p; p=W->head->next; if(W->head!=W->rear) /*判斷通道上是否有車*/ printf("n目前正在等待車輛的號碼為:"

33、;);while(p!=NULL) puts(p->data->num); p=p->next; printf("n"); else printf("n目前便道里沒有車."); voidList(SeqStackCar S,LinkQueueCar W) int flag,tag; flag=1; while(flag) printf("n1.車場n2.便道n3.返回n"); while(1) printf("n請選擇 1|2|3:"); scanf("%d",&tag);fflush(stdin);doif

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論