




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計班 級 學(xué) 號 姓 名 謝東東 2015 年 9月 14日一 課程設(shè)計題目 某停車場內(nèi)只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛汽車停放在最北端),若停車場內(nèi)已經(jīng)停滿n輛車,則后來的汽車只能在門外的便道即候車場上等候,一旦有車開走,則排在便道上的第一輛車即可開入。 當(dāng)停車場內(nèi)某輛車要離開時。在它之后進(jìn)入的車輛必須先退出車場為它讓路,該車輛開出大門外,其它車輛再按原次序進(jìn)入停車場, 每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為該停車場編制按上述要
2、求進(jìn)行管理的模擬程序。二 流程及圖示 停車 顯示信息 離開 收費系統(tǒng) 查詢 顯示信息 退出a 1a 2 a 3 a n 停車場(棧1) 棧2 通道(隊列)三、程序運行及截圖 1.開始界面 首先是登陸界面,只要用戶名跟密碼一樣就可以登陸,輸入正確后,有一個延遲程序,讓使用者感覺更真實 如果輸入錯誤了,就是直接退出了2.主界面 登錄成功后,則是如下的功能界面:3 . 停車場管理系統(tǒng) 你可以選擇停車,離開,或者查看,當(dāng)操作完了,可以直接選擇退出。 當(dāng)你輸入 1 后,會提示你輸入停車的車號: 在這里輸入你想要停車的車號,然后會提示你停車的時間: 輸入停車時間后,則會顯示你剛停車的詳細(xì)的信息: 4.離開
3、 輸入 2,則會提示你要離開的車號: 然后輸入離開的車號后,會提示你輸入該車離開的時間,輸入離開的時間,則 會出現(xiàn)如下界面: 5 停車場管理系統(tǒng) 系統(tǒng)則會把你剛離開的車倆的詳細(xì)信息給你打印出來:拉開的車號,所用時間 以及應(yīng)收的費用。這個時間管理員,可以對照表收費了。 6.查看 當(dāng)你要查看停車場所停車的信息時,你可以選擇 3。同樣,選擇 3 確定后會提 示你要查看的車號,然后則會把信息打印在界面上: 系統(tǒng)會告訴你這倆停在停車場里面的那個位置上。7.退出 當(dāng)你一切操作完了后,就可以選擇退出了,輸入 4 停車場管理系統(tǒng) 隨便按個鍵就退出該系統(tǒng)了。四、程序代碼#include #include #in
4、clude#include#include #include #include using namespace std; #define Max_Size 2/停車的最大容量 #define HourFare 2 /每小時的停車費用 int CountForStack=0; /棧里現(xiàn)有的車數(shù) int CountForQueue=0; /排隊等候的車數(shù) typedef struct char Condition;/到達(dá)或者離開的狀態(tài) int Arrivetime;/到達(dá)時間,默認(rèn)為-1,表示沒有到達(dá) int Leavetime;/離開時間,默認(rèn)為-1,表示沒有離開 int License;/車牌
5、號 CarNode;/保存每輛車的信息 typedef struct/棧的定義 CarNode *base;/棧底指針 CarNode *top;/棧頂指針 int Stacksize;/棧的最大容量 CarStack; typedef struct QNodechar Condition;/到達(dá)或者離開的狀態(tài) int Arrivetime;/到達(dá)時間,默認(rèn)為-1,表示沒有到達(dá) int Leavetime;/離開時間,默認(rèn)為-1,表示沒有離開 int License;/車牌號 QNode *next; QNode; typedef struct/隊列的定義 QNode *front;/對頭指針
6、 QNode * rear;/隊尾指針 Queue; bool InitStack(CarStack &S1)/初始化棧 S1 S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode); if(!S1.base) cout棧 S1 內(nèi)存分配失敗endl; return false; S1.top=S1.base; S1.Stacksize=Max_Size; return true; bool InitQueue(Queue &Q) Q.front=(QNode*)malloc(sizeof(QNode); if(!Q.front) cout隊列 Q
7、內(nèi)存分配失?。ext=NULL; return true; bool EnQueue(Queue &Q,QNode &e)/插入元素 e 為 Q 的新的隊尾元素 QNode *p=(QNode *)malloc(sizeof(QNode); if(!p) coutp 內(nèi)存分配失敗Arrivetime=e.Arrivetime; p-Leavetime=e.Leavetime; p-Condition=e.Condition; p-License=e.License;/將 e 賦給 P p-next=NULL; Q.rear-next=p; Q.rear=p; return true; boo
8、l DeQueue(Queue &Q,QNode &t)/出隊列函數(shù) if(Q.front=Q.rear) cout隊列為空!next; t.Arrivetime=p-Arrivetime; t.Condition=p-Condition; t.Leavetime=p-Leavetime; t.License=p-License; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); return true; void InitCarNode(CarNode &C,char condition,int arrivetime,int
9、 leavetime,int license) C.Arrivetime=arrivetime; C.Condition=condition;C.Leavetime=leavetime; C.License=license; bool Push(CarStack &S1,CarNode &car)/插入新的元素 car 為的棧頂元素 if(S1.top-S1.base=S1.Stacksize) cout此棧已滿,不能壓入新的信息endl; return false; (*S1.top).Arrivetime=car.Arrivetime; (*S1.top).Condition=car.Co
10、ndition; (*S1.top).Leavetime=car.Leavetime; (*S1.top).License=car.License; +S1.top;/棧頂指針上移 return true; bool Pop(CarStack &S1,CarNode &t)/出棧操作 if(S1.top=S1.base) cout棧 S1 為空,不能執(zhí)行出棧操作=S1.Stacksize) return true; else return false; bool IsStackEmpty(CarStack &S1)/判斷 S1 棧是否已空 if(S1.top=S1.base) return t
11、rue; else return false; bool IsQueueEmpty(Queue &Q)/判斷隊列是否為空 if(Q.front=Q.rear) return true; else return false; bool SearchInStack(CarStack &S1,int a)/a 表示要查找的車牌號,如果在停車場里 面,就返回 true bool tag=false; if(!IsStackEmpty(S1)/如果棧 S1 非空 CarNode *p=S1.top-1; while(p!=S1.base) if(*p).License=a) tag=true; -p;
12、if(*p).License=a) tag=true; return tag; bool SearchInQueue(Queue &Q,int a)/a 表示要查找的車牌號,如果在通道里面,就 返回 true bool tag=false; if(!IsQueueEmpty(Q)/如果隊列非空 QNode *p=Q.front-next; while(p!=Q.rear) if(*p).License =a) tag=true; p=p-next; /退出此 while 循環(huán)時 p 指向最后一個元素 if(*p).License =a) tag=true; return tag; void I
13、nCar(CarStack &S1,Queue &Q,int a1,int a2)/表示進(jìn)入車輛,a1 表示到達(dá)時 間,a2 表示車牌號碼 if(SearchInStack(S1,a2) cout車號a2已經(jīng)存在于停車場內(nèi),輸入有誤endl; return; if(SearchInQueue(Q,a2) cout車號a2已經(jīng)存在于通道內(nèi),輸入有誤endl; return; if(IsStackFull(S1)/如果堆棧已滿,說明停車場已滿,需要停車在通道里面 QNode qnode; qnode.Arrivetime=-1;/在通道里面不收費,所以不計時 qnode.Condition=A;
14、qnode.Leavetime=-1;/定義為-1,說明還沒有開始離開 qnode.License=a2; EnQueue(Q,qnode);/停在通道上 +CountForQueue; cout車號:qnode.License停在通道的第CountForQueue號 位置endl; else CarNode carnode; carnode.Arrivetime=a1; carnode.Condition=A; carnode.Leavetime=-1; carnode.License=a2; Push(S1,carnode); +CountForStack;cout車號: carnode.
15、License, 到達(dá)時間:carnode.Arrivetime 點,停在停車場的第CountForStack號位置endl; void Sreach(CarStack &S1,Queue &Q,int a) if(SearchInStack(S1,a) cout車號:a已存在停車場里面的第CountForStack號位 置endl; return; if(SearchInQueue(Q,a) cout停車場已滿,車號a存在于通道里面的第 CountForQueue號位置,在次等候endl; return; else cout對不起!你查找的車號不在停車場里面endl; return; voi
16、d OutCar(CarStack &S1,Queue &Q,int a1,int a2)/出車函數(shù),a1 表示離開時間, a2 表示車牌號碼 if(SearchInQueue(Q,a2) cout車號a2存在于通道里面,還沒有進(jìn)入停車場,不能離開 endl; return; if(!SearchInStack(S1,a2) cout車號a2該車不在停車場內(nèi)endl; return; CarStack tempstack; InitStack(tempstack);/新建一個棧,存放讓路的汽車 bool tag1=false;/標(biāo)志這個停車場出車以前是否已滿,默認(rèn)為沒有滿 tag1=IsSta
17、ckFull(S1); bool tag2=true;/標(biāo)志通道是否有汽車在等待,默認(rèn)為通道為空 tag2=IsQueueEmpty(Q); CarNode temp;/用來保存暫時取出的汽車 bool tag3=false; while(1) Pop(S1,temp); if(temp.License=a2) if(a1temp.Arrivetime) cout離開失?。ndl; tag3=true; Push(tempstack,temp); else cout車號:a2現(xiàn)在離開停車場,所用時間為: a1-temp.Arrivetime小時,應(yīng)收 RMB 為: (a1-temp.Arri
18、vetime)*HourFare元endl; break; else Push(tempstack,temp);/進(jìn)入暫存棧 則把前面倒出的車再次放 while(!IsStackEmpty(tempstack)/如果臨時棧不空, 入停車場 Pop(tempstack,temp); Push(S1,temp); QNode tempqnode;/用來暫時保存從通道出來的汽車 if(tag1=true&tag2=false&tag3=false)/如果出車前停車場已滿,并且通 道不為空,并且離開沒有失敗 DeQueue(Q,tempqnode); -CountForQueue; temp.Arri
19、vetime=a1; temp.Condition=tempqnode.Condition; temp.Leavetime=tempqnode.Leavetime; temp.License=tempqnode.License; Push(S1,temp); if(tag3=false)/如果停車通道是空的,停車場沒有滿,并且離開成功 -CountForStack; void showmenu(CarStack &S1,Queue &Q) cout*選擇菜單 *endl; cout 1: 停車endl; cout 2: 離開停車場endl; cout 3: 查看車輛信息endl; cout 4
20、: 退出系統(tǒng)endl; cout*請按鍵選擇*tag; while(tag!=1&tag!=2&tag!=3&tag!=4) cintag; int a1; unsigned int a2; switch(tag) case 1: cout請輸入到達(dá)的車號:a1; cout請輸入到達(dá)的時間:a2; InCar(S1,Q,a2,a1); Sreach(S1,Q,a1); break; case 2: cout請輸入離開的車號:a1; cout請輸入離開的時間:a2; OutCar(S1,Q,a2,a1); break; case 3: cout請輸入你要查看的車號:a1; Sreach(S1,Q
21、,a1); break; case 4: return; break;showmenu(S1,Q); void loging(CarStack &S1,Queue &Q) char Administrator15,password15; int a; printf(t*n); printf(t*n); printf(t* *n); printf(t* 歡迎使用停車場管理系統(tǒng) *n); printf(t* *n); printf(t* *n); printf(t*n); printf(t*n); printf(nt(提示:賬號跟密碼一樣就行); printf(nnnnt 請輸入管理員帳號:); fflush(stdin); gets(Administrator); printf(ttttttttttt 請輸入密碼:); fflush(stdin); gets(password); /比較用戶名和密碼 if(strcmp(Administrator,Administrator) = 0 & str
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)員工情緒智力培訓(xùn)的重要性與策略
- 企業(yè)辦公空間智能化服務(wù)的探索與實踐
- 教育心理學(xué)在課堂環(huán)境設(shè)計中的應(yīng)用
- 技術(shù)創(chuàng)新對大五人格的挑戰(zhàn)與機遇
- 商業(yè)教育培訓(xùn)市場的政策環(huán)境分析
- 情緒智力與學(xué)習(xí)動機的關(guān)聯(lián)研究
- 智慧教育平臺下的教學(xué)模式創(chuàng)新
- 智慧城市大數(shù)據(jù)管理與隱私保護(hù)的未來趨勢
- 教育資源優(yōu)化配置在中醫(yī)教學(xué)中的實踐研究
- 全球化背景下的教育創(chuàng)新課程設(shè)計
- 偏執(zhí)性精神障礙
- 辦公室常見頸腰椎疾病預(yù)防及養(yǎng)護(hù)
- 消防維保方案(消防維保服務(wù))(技術(shù)標(biāo))
- 煙草專賣局招聘合同范本
- 2023年內(nèi)蒙古生物學(xué)業(yè)水平測試卷
- 門診就診高峰期應(yīng)急預(yù)案7篇,門診患者高峰期應(yīng)急預(yù)案
- 部編八下語文游記閱讀訓(xùn)練題語文八年級下冊能力訓(xùn)練(部編版)
- 保修管理控制程序
- GB/T 9117-2010帶頸承插焊鋼制管法蘭
- GB/T 12513-2006鑲玻璃構(gòu)件耐火試驗方法
- 人教版音樂三年級上冊教材介紹-課件
評論
0/150
提交評論