大學設計方案方案——利用所學C語言知識方案報告停車場管理系統_第1頁
大學設計方案方案——利用所學C語言知識方案報告停車場管理系統_第2頁
大學設計方案方案——利用所學C語言知識方案報告停車場管理系統_第3頁
大學設計方案方案——利用所學C語言知識方案報告停車場管理系統_第4頁
免費預覽已結束,剩余11頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、班級: 55071 28學號: 20071003753指導教師:劉文中姓名:謝永誠停車場管理一一. 要求:1. 設計一個停車場用長度為N 的堆棧來模擬。由于停車場內如有某輛車要開走,在它之后進來的車都必須先退出為它讓道,待其開出停車場后,這些車再依原來的順序進入。2. 程序輸出每輛車到達后的停車位置,以及某輛車離開停車場時應交納的費用和它在停車場內停留的時間。二、程序中所采用的數據結構及存儲結構的說明以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。棧以順序結構實現,隊列以鏈表實現。程序中分別采用了“棧”和“隊列”作為其存儲結構。“棧”的定義可知,每一次入棧的元

2、素都在原棧頂元素之上成為新的元素,每一次出棧的元素總是當前棧頂元素使次棧元素成為新的棧頂元素,即最后進棧者先出棧。程序中采用的結構是:typedef struct NODECarNode *stackMAX+1。int top。SeqStackCar 。 /* 模擬車庫 */“隊列”是限定所有插入操作只能在表的一端進行,而所有的刪除操作都只能在表的另一端進行。插入端叫隊尾,夢芭莎優惠券刪除端叫對頭。按先進先出規則進行。程序中采用的結構是:typedef struct NodeQueueNode *head 。QueueNode *rear 。LinkQueueCar 。 /* 模擬通道 */三

3、、算法的設計思想由于停車場是一個狹窄通道,而且只有一個大門可供汽車進出,問題要求汽車停車場內按車輛到達時間的先后順序,依次由北向南排列。由此很容易聯想到數據結構中的堆棧模型,因此可首先設計一個堆棧,以堆棧來模擬停車場,又每個汽車的車牌號都不一樣,這樣一來可以根據車牌號準確找到汽車位置,所以堆棧里的數據元素我設計成汽車的車牌號。當停車場內某輛車要離開時,在他之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入停車場。這是個一退一進的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設計一個堆棧,以之來暫時存放為出站汽車暫時讓道的汽車車牌號。當停車場滿后,繼續進來的汽

4、車需要停放在停車場旁邊的便道上等候,若停車場有汽車開走,則按排隊的先后順序依次進站,最先進入便道的汽車將會最先進入停車場,好樂買優惠券這完全是一個先進先出模型,因此可設計一個隊列來模擬便道,隊列中的數據元素仍然設計成汽車的車牌號。另外,停車場根據汽車在停車場內停放的總時長來收費的,在便道上的時間不計費,因此必須記錄車輛進入停車場時的時間,車輛離開停車場時的時間不需要記錄,當從終端輸入時可直接使用。由于時間不象汽車一樣需要讓道,我設計了一個順序表來存放時間。又用順序表用派生法設計了一個堆棧,恰好滿足上面模擬停車場的需要。四. 設計原理、框圖以堆棧來模擬停車場 和以堆棧里的數據元素我設計成汽車的車

5、牌號初始化車站 , 初始化讓路的臨時棧 , 初始化通道車輛到達車場未滿,車進車場輸入車子到達時間, 車牌號判斷車場內是否有車車場已滿,車進便道判斷車場是否已滿未滿車進入車場不做任何計算無有輸入離開車輛的離開時間,進行停車費用的計算此車后面的車輛退出并進入臨時棧車子離開五 . 運行結果車輛進入車場:車場已滿:車輛離開,并收費:列出車場信息:列出車道信息六 .程序#include<stdio.h>#include<stdlib.h>#include<string.h>/*-*/#define MAX 3 /*車庫容量*/#define price 0.5 /*每

6、車每分鐘費用*/typedef struct timeint hour 。int min。Time 。 /* 時間結點 typedef struct node*/char num10。Time reach。Time leave。CarNode 。 /* 車輛信息結點*/typedef struct NODE。int top 。SeqStackCar 。typedef struct carCarNode *data 。struct car *next 。QueueNode 。typedef struct NodeQueueNode *head。QueueNode *rear。LinkQueueC

7、ar 。 /* 模擬通道 */*-*/void InitStack(SeqStackCar *)。 /* 初始化棧*/int InitQueue(LinkQueueCar *)。 /* 初始化便道*/。 /* 車輛到達 */void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *)。 /* 車輛離開 */void List(SeqStackCar,LinkQueueCar) 。 /* 顯示存車信息*/*-*/void main()SeqStackCar Enter,Temp。LinkQueueCar Wait 。int ch 。InitStac

8、k(&Enter) 。 /* 初始化車站 */InitStack(&Temp) 。 /* 初始化讓路的臨時棧*/InitQueue(&Wait) 。 /* 初始化通道 */printf(" 歡迎光臨 ") 。printf("n") 。while(1)printf("n1. 車輛到達 ") 。printf(" 2. 車輛離開 ") 。printf(" 3. 列表顯示 ") 。printf(" 4. 退出系統 ") 。while(1)scanf("

9、;%d",&ch) 。if(ch>=1&&ch<=4)break。else printf("nplease choose : 1|2|3|4.")。switch(ch)case 1:Arrival(&Enter,&Wait)。 break。 /* 車輛到達 */。 break。 /* 車輛離開 */ case 3:List(Enter,Wait) 。 break。 /* 打印列表信息 */case 4:exit(0) 。/* 退出主程序*/default: break 。/*-*/void InitStack(S

10、eqStackCar *s) /*初始化棧*/int i 。s->top=0 。for(i=0。 i<=MAX。 i+)s->stacks->top=NULL 。int InitQueue(LinkQueueCar *Q) /*初始化便道 */Q->head=(QueueNode *)malloc(sizeof(QueueNode) 。if(Q->head!=NULL)Q->head->next=NULL 。Q->rear=Q->head 。return(1) 。else return(-1) 。void PRINT(CarNode

11、*p,int room) /*打印出場車的信息*/int A1,A2,B1,B2 。printf("n 請輸入離開的時間:/*:*/")。scanf("%d:%d",&(p->leave.hour),&(p->leave.min)。printf("n 離開車輛的車牌號為:")。puts(p->num) 。printf("n 其到達時間為 : %d:%d",p->reach.hour,p->reach.min) 。printf(" 離開時間為 : %d:%d&q

12、uot;,p->leave.hour,p->leave.min) 。A1=p->reach.hour 。A2=p->reach.min 。B1=p->leave.hour 。B2=p->leave.min 。printf("n 應交費用為元 ",(B1-A1)*60+(B2-A2)*price)。free(p)。int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達 */CarNode *p 。QueueNode *t 。p=(CarNode *)malloc(sizeof(CarNo

13、de)。flushall() 。printf("n 請輸入車牌號 (例如:鄂A1902):") 。gets(p->num) 。if(Enter->top<MAX) /*車場未滿,車進車場*/Enter->top+ 。printf("n 車輛在車場第 %d 位置 .",Enter->top) 。printf("n 請輸入到達時間:/*:*/")。scanf("%d:%d",&(p->reach.hour),&(p->reach.min)。Enter->s

14、tackEnter->top=p 。return(1) 。else /*車場已滿,車進便道*/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 *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/int i, room 。CarNode *p,

15、*t。QueueNode *q 。/* 判斷車場內是否有車*/if(Enter->top>0) /* 有車 */while(1) /*輸入車輛離開的信息*/printf("n請輸入車在車場的位置/1-%d/ : ",Enter->top) 。scanf("%d",&room)。while(Enter->top>room) /*聚尚網優惠券*/Temp->top+ 。Temp->stackTemp->top=Enter->stackEnter->top。Enter->stackEnt

16、er->top=NULL。Enter->top- 。p=Enter->stackEnter->top 。Enter->stackEnter->top=NULL。Enter->top- 。while(Temp->top>=1)Enter->top+ 。Enter->stackEnter->top=Temp->stackTemp->top。Temp->stackTemp->top=NULL。Temp->top- 。PRINT(p,room)。 /* 判斷通道上是否有車及車站是否已滿*/if(W-&

17、gt;head!=W->rear)&&Enter->top<MAX) /*便道的車輛進入車場*/q=W->head->next 。t=q->data 。Enter->top+ 。printf("n便道的 %s 號車進入車場第%d 位置 .",t->num,Enter->top)。printf("n請輸入現在的時間/*:*/:")。scanf("%d:%d",&(t->reach.hour),&(t->reach.min)。W->he

18、ad->next=q->next 。if(q=W->rear) W->rear=W->head 。Enter->stackEnter->top=t 。free(q)。else printf("n 便道里沒有車.n") 。else printf("n 車場里沒有車.")。 /* 沒車 */void List1(SeqStackCar *S) /* 列表顯示車場信息*/int i 。if(S->top>0) /* 判斷車站內是否有車*/printf("n 車場 :") 。printf("n 位置 到達時間車牌號 n") 。for(i=1 。 i<=S->top 。 i+)printf(" %d ",i) 。printf("%d:%d ",S->stacki->reach.hour,S->stacki->reach.min)。puts(S->stacki->num) 。else printf("n 車場里沒有車") 。void Li

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論