版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)大作業(yè)算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題目:停車場的收費管理系統(tǒng)組長:張賽組員:王佳琪,袁潔瑩,張瑜 完成日期:2013年12月25日3一、 設(shè)計目的與內(nèi)容1. 問題描述任務(wù):停車場可以同時停放M輛車,停車場的入口和出口可分別有N輛車排隊。停車每小時收費5元,每天不超過50元,停車不滿半小時不收費,超過半小時按一小時收費。功能要求:完成停車場進出車的收費管理以及查詢每輛車的停車記錄(按照車牌號查詢);停車場目前的狀況(滿或空的車位數(shù))。規(guī)定:輸入數(shù)據(jù)形式和范圍:車牌號、停車開始時間輸出形式:有中文提示,停車的時間長短、離開停車場的時間、費用界面要求:有合理的提示。存儲結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要
2、求自己設(shè)計,但是要求停車記錄要存儲在數(shù)據(jù)文件中。測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請在上交的資料中寫明;2. 基本要求(1)停車場管理主要實現(xiàn)以下幾個功能: 、停車場車位的劃分。 、車輛進出管理及收費功能。 、停車場車輛信息查詢功能。 、退出系統(tǒng)。(2)以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。(3)棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。3. 目的:程序所能達(dá)到的功能:程序主要服務(wù)于停車場使用者和停車場管理者。對于使用停車場的停車者,在其等待期間,系統(tǒng)為使用者提供查詢
3、,修改,刪除車輛信息的操作。當(dāng)使用者想要離開停車場,停車場自動計算出停車費用,并自動讓正在等待的使用者有序進入停車位。而管理者可以通過本系統(tǒng)查詢過場,在場,等待的車輛信息,也可以統(tǒng)計24小時內(nèi)的停車收入。停車場的管理系統(tǒng)利用棧和隊列的這些特點來實現(xiàn)模擬停車場和便道。二、 算法的基本思想1. 數(shù)據(jù)結(jié)構(gòu)定義(1) 隊列數(shù)據(jù)類型定義:ADT Queue數(shù)據(jù)對象:D=ai|aiElemSet, i=1,2,n,n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,n基本操作:InitQueue(&Q)操作結(jié)果:構(gòu)造一個空隊列Q。DestroyQueue(&Q)初始條件:隊列Q已存在。操作結(jié)果
4、:隊列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊列Q已存在。操作結(jié)果:將Q清為空隊列。QueueEmpty(&Q)初始條件:隊列Q已存在。操作結(jié)果:若Q為空隊列,則返回TRUE,否則返回FALSE。QueueLength(Q)初始條件:隊列Q已存在。操作結(jié)果:返回Q的元素個數(shù),即隊列的長度。GetHead(Q, &e)初始條件:Q為非空隊列。操作結(jié)果:用e返回Q的隊頭元素。EnQueue(&Q, e)初始條件:隊列Q已存在。操作結(jié)果:插入元素e為Q的新的隊尾元素。DeQueue(&Q, &e)初始條件:Q為非空隊列。操作結(jié)果:刪
5、除Q的隊頭元素,并用e返回其值。QueueTraverse(Q, visit()初始條件:Q已存在且非空。操作結(jié)果:從隊頭到隊尾,依次對Q的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。ADT Queue(2) 棧數(shù)據(jù)類型定義ADT stack數(shù)據(jù)對象:D=ai|aicharset, i=1,2,n,n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,n基本操作:initstack(&S, n)操作結(jié)果:構(gòu)造一個空棧S,該棧可存放n個元素。push(&S, e)初始條件:棧S已存在。操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。pop(&S, &
6、;e)初始條件:棧S已存在。操作結(jié)果:刪除S的棧頂元素,并以e返回其值。DestroyStack(&S)初始條件:棧S已存在。操作結(jié)果:銷毀棧S。ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將S清為空棧。StackLength(&S)初始條件:棧S已存在。操作結(jié)果:返回棧S的長度。StackEmpty(&S)初始條件:棧S已存在。操作結(jié)果:若S為空棧,則返回TRUE,否則返回FALSE。GetTop(S, &e)初始條件:棧S已存在。操作結(jié)果:若棧S不空,則以e返回棧頂元素。StackTraverse(S, visit()初始條件:棧S已
7、存在。操作結(jié)果:從棧底到棧頂依次對S中的每個元素調(diào)用函數(shù)visit()。ADT stack2. 主程序流程基本框架:駛?cè)腭偝霾僮鹘y(tǒng)計入棧入隊列出棧出隊列已收取的總停車費用查詢修改刪除過場、在場與等待車輛信息查找(棧 數(shù)組)在場車輛信息修改(棧)等待車輛隊列刪除(隊列)(1) 車輛信息類型typedef struct int Htime; int Mtime;Time; /簡單模擬時間信息,記錄小時和分鐘typedef struct char num20;Time reachtime; Time leavetime;carinfo;(2) 棧類型typedef struct stack cari
8、nfo car5;int top;Stack;int inistack(Stack *S) /初始化棧 S->top=-1;return 1;void Push(Stack *S,carinfo x) /進棧操作S->top+;S->carS->top=x; printf("進站成功!n"); void Pop(Stack *S,carinfo x) /出棧操作 if(S->top=-1) printf("空棧,無法出棧!"); x=S->carS->top; S->top-; printf("出
9、棧成功!n"); int IsEmpty(Stack *S) /判斷棧空 if(S->top=-1)return 1;else return 0;(3)隊列類型(便道)typedef struct Nodecarinfo data; struct Node *next;QueueNode;typedef struct QueueNode *front; QueueNode *rear;Queue,*linkQueue;int EnterQ(Queue *Q,carinfo x);int iniQueue(Queue *Q) /初始化便道 Q->front=(QueueNo
10、de *)malloc(sizeof(QueueNode); /申請節(jié)點 if(Q->front!=NULL) Q->rear=Q->front; Q->front->next=NULL; return 1; else return 0;int EnterQ(Queue *Q,carinfo x) /進便道 QueueNode *newNode; newNode=(QueueNode *)malloc(sizeof(QueueNode); if(newNode!=NULL) newNode->data=x; newNode->next=NULL; Q-
11、>rear->next=newNode; Q->rear=newNode; return 1; else return 0;int DeleteQ(Queue *Q,carinfo x) /出便道 QueueNode *p; p=Q->front->next; if(Q->front=Q->rear) /判斷便道是否有車 return 0; x=p->data; if(p->next=Q->rear) Q->rear=Q->front; Q->front->next=NULL; Q->front->
12、next=p->next; free(p); return 1;(4)主函數(shù)及其他函數(shù)的算法void main()Queue *Q; Stack *S=NULL; S=(Stack *)malloc(sizeof(Stack); /申請棧節(jié)點 Q=(linkQueue)malloc(sizeof(Queue); /申請便道節(jié)點 int i; iniQueue(Q); /初始化調(diào)用 inistack(S); /初始化調(diào)用printf("n*歡迎使用停車場管理界面*n"); printf("*本停車場每小時收費2元,停車不滿半小時不收費,超過半小時按一小時收費*
13、"); printGraph(); while(1) printf("n請輸入操作"); scanf("%d",&i); switch(i) case 1:Arrive(S,Q);printGraph(); break; case 2:Departure(S,Q);printGraph();break; case 3:Print(S);printGraph();break; case 0:exit(1);break; case 4:PrintQ(Q);break; case 5:Search(S);break; default :pri
14、ntf("重新輸入");printGraph(); void Lpush(Stack *S,carinfo x)Push(S,x); /進臨時棧void LPop(Stack *S,carinfo x)Pop(S,x); int Arrive(Stack *S,Queue *Q) /車輛到達(dá) carinfo x; int a; printf("輸入車牌號:"); scanf("%s",x.num); printf("請輸入進車場的時間(*:*):"); scanf("%d:%d",&x.
15、reachtime.Htime,&x.reachtime.Mtime); if(S->top=Size-1) printf("車場已滿,不能進入,進便道n"); a=EnterQ(Q, x); /遞歸調(diào)用進便道操作if(a=1)printf("OKn");elseprintf("No!n"); else Push(S,x); return 1; int Departure(Stack *S,Queue *Q) /車輛離開操作 carinfo a;int parktime,paytime;char x20;Time lea
16、vetime;Stack *p=NULL;int point1=S->top;int point2=S->top; printf("請輸入要離去的車牌號:"); scanf("%s",x); while(point1!=-1&&point2!=-1) if(strcmp(S->carpoint1.num,x)=0) /匹配函數(shù),是否輸入的信息與車場信息匹配 printf("請輸入要離開的時間(*:*):"); scanf("%d:%d",&leavetime.Htime,&
17、amp;leavetime.Mtime); for(;point1!=S->top;point1+,point2+) /掃描直到結(jié)束 S->carpoint1=S->carpoint2; /如果找到了 ,出車 S->top-; printf("成功出車場n"); parktime=(leavetime.Htime-S->carpoint1.reachtime.Htime)*60+(leavetime.Mtime-S->carpoint1.reachtime.Mtime); if(leavetime.Htime-S->carpoint
18、1.reachtime.Htime>=10) paytime=10; else if(leavetime.Mtime-S->carpoint1.reachtime.Mtime<=30) paytime=leavetime.Htime-S->carpoint1.reachtime.Htime; else paytime=leavetime.Htime-S->carpoint1.reachtime.Htime+1; printf("其在停車場內(nèi)停留時間為%d分鐘,實際按照%d小時計費,所需付費為:%d元。n",parktime,paytime,pa
19、ytime*2); point2=-1; else point2=point1; point1-; if(Q->front!=Q->rear) a=Q->front->next->data; printf("從便道進入停車場的車牌號:%s",a.num); printf("請輸入進車場的時間:%d:%d",leavetime.Htime,leavetime.Mtime); scanf("%d:%d",&a.reachtime.Htime,&a.reachtime.Mtime);Push(S
20、,a);DeleteQ(Q,Q->front->next->data); if(point1=-1) /如果到結(jié)束了,還沒有找到,則輸出信息 printf("此車沒有在停車場!n"); return 1; void Print1(carinfo x) /簡單的輸出操作 printf("車牌號:%sn",x.num); printf("進車場的時間:%d:%dn",x.reachtime.Htime,x.reachtime.Mtime); printf("n-n");void Print(Stack
21、 *S)/打印車場信息 carinfo x; int point=S->top; /從棧頭開始if(S->top=-1)printf("車場沒有車輛登記進入!n");else while(point!=-1) printf("n-n"); printf("車的位置號:%dn",point);x=S->carpoint; / 把依次掃描到的信息賦值給x Print1(x); /調(diào)用輸出函數(shù) point-; /輸出所有的車場信息 printf("顯示車場信息成功!n"); void PrintQ(Qu
22、eue *Q) /打印便道車輛信息 QueueNode *p;/p=(QueueNode *)malloc(sizeof(Queue); /申請結(jié)點 p=Q->front->next; if(Q->front!=Q->rear) /*判斷通道上是否有車*/ printf("n等待車輛的車牌號為: "); while(p!=NULL) /判斷是否到結(jié)尾 printf("%s ",p->data.num); p=p->next; /如果沒找到,繼續(xù)向下找 printf("n"); else printf
23、("nttt便道里沒有車。n"); int Search(Stack *S) /按車牌號查找車輛信息char x20;Time leavetime;Stack *p=NULL;carinfo a;int point1=S->top;int point2=S->top; printf("請輸入要查找的車牌號:"); scanf("%s",x); while(point1!=-1&&point2!=-1) if(strcmp(S->carpoint1.num,x)=0) /匹配函數(shù),是否輸入的信息與車場信
24、息匹配 for(;point1!=S->top;point1+,point2+) /掃描直到結(jié)束 S->carpoint1=S->carpoint2; /如果找到了 ,輸出信息 printf("該車目前在停車場中。n"); point2=-1; else point2=point1; point1-; if(point1=-1) /如果到結(jié)束了,還沒有找到,則輸出信息 printf("此車沒有在停車場!"); return 1; void printGraph()int i;printf("n"); for(i=0;
25、i<80;i+) printf("-"); printf("nttt*請選擇操作序號*"); printf("nnttt -車輛到達(dá)請選1-"); printf("nnttt -車輛離開請選2-"); printf("nnttt -查詢停車場信息請選3-"); printf("nnttt -查詢便道信息請選4-"); printf("nnttt -按車牌號查找請選5-"); printf("nnttt -退出系統(tǒng)請選0-"); p
26、rintf("nn"); for(i=0;i<80;i+) printf("-");3. 各模塊之間的調(diào)用關(guān)系主函數(shù)void main()初始化調(diào)用iniQueue(Q); inistack(S); 調(diào)用到達(dá)函數(shù)Arrive(S,Q); 調(diào)用離開函數(shù)Departure(S);調(diào)用打印信息函數(shù)printGraph()三、 測試數(shù)據(jù)全部合法數(shù)據(jù):1.主界面2.到達(dá):3.離開:(若便道有車等待) 輸出從便道中進入停車場的車牌號、進車場時間(即為從便道中出車的時間)、進站成功!4.輸出車場信息5輸出便車道信息6、按車牌號查找信息非法數(shù)據(jù)1.主界面:2.車輛
27、到達(dá):3.車輛離開四、 源程序及系統(tǒng)文件使用說明#include<stdio.h>#include<stdlib.h>#include<string.h>#define Size 2#define price 5typedef struct int Htime; int Mtime;Time; /簡單模擬時間信息,記錄小時和分鐘typedef struct char num20;Time reachtime; Time leavetime;carinfo; /通過結(jié)構(gòu)來保存來車的車牌號,到達(dá)時間,離開時間typedef struct stackcarinfo
28、 car5;int top; Stack;typedef struct Nodecarinfo data; struct Node *next;QueueNode; /結(jié)點的定義typedef struct QueueNode *front; QueueNode *rear;Queue,*linkQueue; /定義隊列結(jié)點int EnterQ(Queue *Q,carinfo x);int inistack(Stack *S) /初始化棧 S->top=-1;return 1;void Push(Stack *S,carinfo x) /進棧操作S->top+;S->car
29、S->top=x; printf("進站成功!n"); void Pop(Stack *S,carinfo x) /出棧操作 if(S->top=-1) printf("空棧,無法出棧!"); x=S->carS->top; S->top-; printf("出棧成功!n"); int IsEmpty(Stack *S) /判斷???if(S->top=-1)return 1;else return 0;int iniQueue(Queue *Q) /初始化便道 Q->front=(Queue
30、Node *)malloc(sizeof(QueueNode); /申請節(jié)點 if(Q->front!=NULL) Q->rear=Q->front; Q->front->next=NULL; return 1; else return 0;int EnterQ(Queue *Q,carinfo x) /進便道 QueueNode *newNode; newNode=(QueueNode *)malloc(sizeof(QueueNode); if(newNode!=NULL) newNode->data=x; newNode->next=NULL;
31、Q->rear->next=newNode; Q->rear=newNode; return 1; else return 0;int DeleteQ(Queue *Q,carinfo x) /出便道 QueueNode *p; p=Q->front->next; if(Q->front=Q->rear) /判斷便道是否有車 return 0; x=p->data; if(p->next=Q->rear) Q->rear=Q->front; Q->front->next=NULL; Q->front-&g
32、t;next=p->next; free(p); return 1;void Lpush(Stack *S,carinfo x)Push(S,x); /進臨時棧void LPop(Stack *S,carinfo x)Pop(S,x); int Arrive(Stack *S,Queue *Q) /車輛到達(dá) carinfo x; int a; printf("輸入車牌號:"); scanf("%s",x.num); printf("請輸入進車場的時間(*:*):"); scanf("%d:%d",&x
33、.reachtime.Htime,&x.reachtime.Mtime); if(S->top=Size-1) printf("車場已滿,不能進入,進便道n"); a=EnterQ(Q, x); /遞歸調(diào)用進便道操作if(a=1)printf("OKn");elseprintf("No!n"); else Push(S,x); return 1; int Departure(Stack *S,Queue *Q) /車輛離開操作 carinfo a;int parktime,paytime;char x20;Time le
34、avetime;Stack *p=NULL;int point1=S->top;int point2=S->top; printf("請輸入要離去的車牌號:"); scanf("%s",x); while(point1!=-1&&point2!=-1) if(strcmp(S->carpoint1.num,x)=0) /匹配函數(shù),是否輸入的信息與車場信息匹配 printf("請輸入要離開的時間(*:*):"); scanf("%d:%d",&leavetime.Htime,
35、&leavetime.Mtime); for(;point1!=S->top;point1+,point2+) /掃描直到結(jié)束 S->carpoint1=S->carpoint2; /如果找到了 ,出車 S->top-; printf("成功出車場n"); parktime=(leavetime.Htime-S->carpoint1.reachtime.Htime)*60+(leavetime.Mtime-S->carpoint1.reachtime.Mtime); if(leavetime.Htime-S->carpoin
36、t1.reachtime.Htime>=10) paytime=10; else if(leavetime.Mtime-S->carpoint1.reachtime.Mtime<=30) paytime=leavetime.Htime-S->carpoint1.reachtime.Htime; else paytime=leavetime.Htime-S->carpoint1.reachtime.Htime+1; printf("其在停車場內(nèi)停留時間為%d分鐘,實際按照%d小時計費,所需付費為:%d元。n",parktime,paytime,p
37、aytime*2); point2=-1; else point2=point1; point1-; if(Q->front!=Q->rear) a=Q->front->next->data; printf("從便道進入停車場的車牌號:%s",a.num); printf("請輸入進車場的時間:%d:%d",leavetime.Htime,leavetime.Mtime); scanf("%d:%d",&a.reachtime.Htime,&a.reachtime.Mtime);Push(
38、S,a);DeleteQ(Q,Q->front->next->data); if(point1=-1) /如果到結(jié)束了,還沒有找到,則輸出信息 printf("此車沒有在停車場!n"); return 1; void Print1(carinfo x) /簡單的輸出操作 printf("車牌號:%sn",x.num); printf("進車場的時間:%d:%dn",x.reachtime.Htime,x.reachtime.Mtime); printf("n-n");void Print(Stac
39、k *S)/打印車場信息 carinfo x; int point=S->top; /從棧頭開始if(S->top=-1)printf("車場沒有車輛登記進入!n");else while(point!=-1) printf("n-n"); printf("車的位置號:%dn",point);x=S->carpoint; / 把依次掃描到的信息賦值給x Print1(x); /調(diào)用輸出函數(shù) point-; /輸出所有的車場信息 printf("顯示車場信息成功!n"); void PrintQ(Q
40、ueue *Q) /打印便道車輛信息 QueueNode *p;/p=(QueueNode *)malloc(sizeof(Queue); /申請結(jié)點 p=Q->front->next; if(Q->front!=Q->rear) /*判斷通道上是否有車*/ printf("n等待車輛的車牌號為: "); while(p!=NULL) /判斷是否到結(jié)尾 printf("%s ",p->data.num); p=p->next; /如果沒找到,繼續(xù)向下找 printf("n"); else print
41、f("nttt便道里沒有車。n"); int Search(Stack *S) /按車牌號查找車輛信息 char x20;Time leavetime;Stack *p=NULL;carinfo a;int point1=S->top;int point2=S->top; printf("請輸入要查找的車牌號:"); scanf("%s",x); while(point1!=-1&&point2!=-1) if(strcmp(S->carpoint1.num,x)=0) /匹配函數(shù),是否輸入的信息與車場信息匹配 for(;point1!=S->top;point1+,point2+) /掃描直到結(jié)束 S->carpoint1=S->carpoint2; /如果找到了 ,輸出信息 printf("該車目前在停車場中。n"); point2=-1; else point2=point1; point1-; if(point1=-1) /如果到結(jié)束了,還沒有找到,則輸出信息 pri
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湘教版選擇性必修1物理下冊月考試卷含答案
- 2025年人教新課標(biāo)高一地理上冊月考試卷
- 2025年冀教新版九年級語文下冊月考試卷
- 2025年蘇人新版七年級歷史上冊月考試卷含答案
- 2025年外研版八年級科學(xué)上冊階段測試試卷
- 2025年湘教新版九年級歷史上冊月考試卷
- 二零二五年度體育產(chǎn)業(yè)投資擔(dān)保合同3篇
- 2025年度智能門禁系統(tǒng)租賃合同范本升級版4篇
- 2025年度民間借貸裁判觀點匯編及法律適用指南合同4篇
- 2025版模板工建筑工程施工圖審查合同范本(含技術(shù)要求)4篇
- 五年級上冊寒假作業(yè)答案(人教版)
- 2025年山東浪潮集團限公司招聘25人高頻重點提升(共500題)附帶答案詳解
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 2025年江西省港口集團招聘筆試參考題庫含答案解析
- (2024年)中國傳統(tǒng)文化介紹課件
- 液化氣安全檢查及整改方案
- 《冠心病》課件(完整版)
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會考試題庫
- 公園保潔服務(wù)投標(biāo)方案
- 光伏電站項目合作開發(fā)合同協(xié)議書三方版
- 2024年秋季新滬教版九年級上冊化學(xué)課件 第2章 空氣與水資源第1節(jié) 空氣的組成
評論
0/150
提交評論