版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)班 級(jí) 網(wǎng)絡(luò)營銷 指導(dǎo)老師 呂向陽 學(xué) 號(hào) 姓 名 魏華 二012 年 1 月 7 日一 課程設(shè)計(jì)題目 某停車場內(nèi)只有一個(gè)可停放n輛汽車的狹長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛汽車停放在最北端),若停車場內(nèi)已經(jīng)停滿n輛車,則后來的汽車只能在門外的便道即候車場上等候,一旦有車開走,則排在便道上的第一輛車即可開入。 當(dāng)停車場內(nèi)某輛車要離開時(shí)。在它之后進(jìn)入的車輛必須先退出車場為它讓路,該車輛開出大門外,其它車輛再按原次序進(jìn)入停車場, 每輛停放在車場的車在它離開停車場時(shí)必須按它停留的時(shí)間長短交納費(fèi)
2、用。試為該停車場編制按上述要求進(jìn)行管理的模擬程序。二 流程及圖示 停車 顯示信息 離開 收費(fèi)系統(tǒng) 查詢 顯示信息 退出a 1a 2 a 3 a n 停車場(棧1) 棧2 通道(隊(duì)列)三、程序運(yùn)行及截圖 1.開始界面 首先是登陸界面,只要用戶名跟密碼一樣就可以登陸,輸入正確后,有一個(gè)延遲程序,讓使用者感覺更真實(shí) 如果輸入錯(cuò)誤了,就是直接退出了2.主界面 登錄成功后,則是如下的功能界面:3 . 停車場管理系統(tǒng) 你可以選擇停車,離開,或者查看,當(dāng)操作完了,可以直接選擇退出。 當(dāng)你輸入 1 后,會(huì)提示你輸入停車的車號(hào): 在這里輸入你想要停車的車號(hào),然后會(huì)提示你停車的時(shí)間: 輸入停車時(shí)間后,則會(huì)顯示你剛
3、停車的詳細(xì)的信息: 4.離開 輸入 2,則會(huì)提示你要離開的車號(hào): 然后輸入離開的車號(hào)后,會(huì)提示你輸入該車離開的時(shí)間,輸入離開的時(shí)間,則 會(huì)出現(xiàn)如下界面: 5 停車場管理系統(tǒng) 系統(tǒng)則會(huì)把你剛離開的車倆的詳細(xì)信息給你打印出來:拉開的車號(hào),所用時(shí)間 以及應(yīng)收的費(fèi)用。這個(gè)時(shí)間管理員,可以對(duì)照表收費(fèi)了。 6.查看 當(dāng)你要查看停車場所停車的信息時(shí),你可以選擇 3。同樣,選擇 3 確定后會(huì)提 示你要查看的車號(hào),然后則會(huì)把信息打印在界面上: 系統(tǒng)會(huì)告訴你這倆停在停車場里面的那個(gè)位置上。7.退出 當(dāng)你一切操作完了后,就可以選擇退出了,輸入 4 停車場管理系統(tǒng) 隨便按個(gè)鍵就退出該系統(tǒng)了。四、程序代碼#includ
4、e #include #include#include#include #include #include using namespace std; #define Max_Size 2/停車的最大容量 #define HourFare 2 /每小時(shí)的停車費(fèi)用 int CountForStack=0; /棧里現(xiàn)有的車數(shù) int CountForQueue=0; /排隊(duì)等候的車數(shù) typedef struct char Condition;/到達(dá)或者離開的狀態(tài) int Arrivetime;/到達(dá)時(shí)間,默認(rèn)為-1,表示沒有到達(dá) int Leavetime;/離開時(shí)間,默認(rèn)為-1,表示沒有離開 i
5、nt License;/車牌號(hào) CarNode;/保存每輛車的信息 typedef struct/棧的定義 CarNode *base;/棧底指針 CarNode *top;/棧頂指針 int Stacksize;/棧的最大容量 CarStack; typedef struct QNodechar Condition;/到達(dá)或者離開的狀態(tài) int Arrivetime;/到達(dá)時(shí)間,默認(rèn)為-1,表示沒有到達(dá) int Leavetime;/離開時(shí)間,默認(rèn)為-1,表示沒有離開 int License;/車牌號(hào) QNode *next; QNode; typedef struct/隊(duì)列的定義 QNod
6、e *front;/對(duì)頭指針 QNode * rear;/隊(duì)尾指針 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.fr
7、ont) cout隊(duì)列 Q 內(nèi)存分配失??!next=NULL; return true; bool EnQueue(Queue &Q,QNode &e)/插入元素 e 為 Q 的新的隊(duì)尾元素 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; re
8、turn true; bool DeQueue(Queue &Q,QNode &t)/出隊(duì)列函數(shù) if(Q.front=Q.rear) cout隊(duì)列為空!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
9、arrivetime,int 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).Co
10、ndition=car.Condition; (*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.
11、base) return true; else return false; bool IsQueueEmpty(Queue &Q)/判斷隊(duì)列是否為空 if(Q.front=Q.rear) return true; else return false; bool SearchInStack(CarStack &S1,int a)/a 表示要查找的車牌號(hào),如果在停車場里 面,就返回 true bool tag=false; if(!IsStackEmpty(S1)/如果棧 S1 非空 CarNode *p=S1.top-1; while(p!=S1.base) if(*p).License=a)
12、tag=true; -p; if(*p).License=a) tag=true; return tag; bool SearchInQueue(Queue &Q,int a)/a 表示要查找的車牌號(hào),如果在通道里面,就 返回 true bool tag=false; if(!IsQueueEmpty(Q)/如果隊(duì)列非空 QNode *p=Q.front-next; while(p!=Q.rear) if(*p).License =a) tag=true; p=p-next; /退出此 while 循環(huán)時(shí) p 指向最后一個(gè)元素 if(*p).License =a) tag=true; retu
13、rn tag; void InCar(CarStack &S1,Queue &Q,int a1,int a2)/表示進(jìn)入車輛,a1 表示到達(dá)時(shí) 間,a2 表示車牌號(hào)碼 if(SearchInStack(S1,a2) cout車號(hào)a2已經(jīng)存在于停車場內(nèi),輸入有誤endl; return; if(SearchInQueue(Q,a2) cout車號(hào)a2已經(jīng)存在于通道內(nèi),輸入有誤endl; return; if(IsStackFull(S1)/如果堆棧已滿,說明停車場已滿,需要停車在通道里面 QNode qnode; qnode.Arrivetime=-1;/在通道里面不收費(fèi),所以不計(jì)時(shí) qnode
14、.Condition=A; qnode.Leavetime=-1;/定義為-1,說明還沒有開始離開 qnode.License=a2; EnQueue(Q,qnode);/停在通道上 +CountForQueue; cout車號(hào):qnode.License停在通道的第CountForQueue號(hào) 位置endl; else CarNode carnode; carnode.Arrivetime=a1; carnode.Condition=A; carnode.Leavetime=-1; carnode.License=a2; Push(S1,carnode); +CountForStack;co
15、ut車號(hào): carnode.License, 到達(dá)時(shí)間:carnode.Arrivetime 點(diǎn),停在停車場的第CountForStack號(hào)位置endl; void Sreach(CarStack &S1,Queue &Q,int a) if(SearchInStack(S1,a) cout車號(hào):a已存在停車場里面的第CountForStack號(hào)位 置endl; return; if(SearchInQueue(Q,a) cout停車場已滿,車號(hào)a存在于通道里面的第 CountForQueue號(hào)位置,在次等候endl; return; else cout對(duì)不起!你查找的車號(hào)不在停車場里面end
16、l; return; void OutCar(CarStack &S1,Queue &Q,int a1,int a2)/出車函數(shù),a1 表示離開時(shí)間, a2 表示車牌號(hào)碼 if(SearchInQueue(Q,a2) cout車號(hào)a2存在于通道里面,還沒有進(jìn)入停車場,不能離開 endl; return; if(!SearchInStack(S1,a2) cout車號(hào)a2該車不在停車場內(nèi)endl; return; CarStack tempstack; InitStack(tempstack);/新建一個(gè)棧,存放讓路的汽車 bool tag1=false;/標(biāo)志這個(gè)停車場出車以前是否已滿,默認(rèn)為
17、沒有滿 tag1=IsStackFull(S1); bool tag2=true;/標(biāo)志通道是否有汽車在等待,默認(rèn)為通道為空 tag2=IsQueueEmpty(Q); CarNode temp;/用來保存暫時(shí)取出的汽車 bool tag3=false; while(1) Pop(S1,temp); if(temp.License=a2) if(a1temp.Arrivetime) cout離開失??!endl; tag3=true; Push(tempstack,temp); else cout車號(hào):a2現(xiàn)在離開停車場,所用時(shí)間為: a1-temp.Arrivetime小時(shí),應(yīng)收 RMB 為:
18、 (a1-temp.Arrivetime)*HourFare元endl; break; else Push(tempstack,temp);/進(jìn)入暫存棧 則把前面倒出的車再次放 while(!IsStackEmpty(tempstack)/如果臨時(shí)棧不空, 入停車場 Pop(tempstack,temp); Push(S1,temp); QNode tempqnode;/用來暫時(shí)保存從通道出來的汽車 if(tag1=true&tag2=false&tag3=false)/如果出車前停車場已滿,并且通 道不為空,并且離開沒有失敗 DeQueue(Q,tempqnode); -CountForQu
19、eue; temp.Arrivetime=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: 查看車輛
20、信息endl; cout 4: 退出系統(tǒng)endl; cout*請(qǐng)按鍵選擇*tag; while(tag!=1&tag!=2&tag!=3&tag!=4) cintag; int a1; unsigned int a2; switch(tag) case 1: cout請(qǐng)輸入到達(dá)的車號(hào):a1; cout請(qǐng)輸入到達(dá)的時(shí)間:a2; InCar(S1,Q,a2,a1); Sreach(S1,Q,a1); break; case 2: cout請(qǐng)輸入離開的車號(hào):a1; cout請(qǐng)輸入離開的時(shí)間:a2; OutCar(S1,Q,a2,a1); break; case 3: cout請(qǐng)輸入你要查看的車號(hào):a
21、1; Sreach(S1,Q,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(提示:賬號(hào)跟密碼一樣就行); printf(nnnnt 請(qǐng)輸入管理員帳號(hào):); fflush(stdin); gets(Administrator); printf(ttttttttttt 請(qǐng)輸入密碼:); fflush(stdin); gets(password); /比較用戶名和密碼 if(strcmp(Administrator,Administrator) = 0 & s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學(xué)方程式的書寫計(jì)算和物質(zhì)的構(gòu)成教案
- 華銀田徑學(xué)期教案(全套)
- 文書模板-自來水安裝報(bào)告申請(qǐng)書
- 國際民航日節(jié)日活動(dòng)安全乘機(jī)指南飛機(jī)趣味問答課件
- 采購行業(yè)年終總結(jié)報(bào)告課件模板
- 2025《黑神話:悟空》高中語文試卷(1)含答案
- 2024屆廣東省珠海一中高三全真數(shù)學(xué)試題模擬試卷
- 殘疾人合同管理制度
- 不嫁不娶協(xié)議書模板
- 畢業(yè)協(xié)議書戶口
- 民法Ⅱ?qū)W習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年安全教育培訓(xùn)變更新增記錄
- 醫(yī)學(xué)文獻(xiàn)檢索復(fù)習(xí)試題和答案解析(四)
- 校園消防安全宣傳教育課件
- 2024-2025學(xué)年一年級(jí)語文上冊(cè)第四單元測試卷(統(tǒng)編版2024新教材)
- 2024-2025形勢與政策:促進(jìn)高質(zhì)量充分就業(yè) 為中國式現(xiàn)代化建設(shè)提供有力支撐
- 小學(xué)科學(xué)五年級(jí)上冊(cè)第四單元《健康生活》作業(yè)設(shè)計(jì)
- (二) 跨學(xué)科實(shí)踐教學(xué)設(shè)計(jì)- 2024-2025學(xué)年人教版八年級(jí)上冊(cè)物理
- 中國高血壓防治指南(2024版)
- 2024-2030年中國不良資產(chǎn)管理行業(yè)市場發(fā)展現(xiàn)狀分析及發(fā)展趨勢與投資前景預(yù)測研究報(bào)告
- 2024-2030年冬蟲夏草行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
評(píng)論
0/150
提交評(píng)論