版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 數(shù)據(jù)結構課程設計班 級 網(wǎng)絡營銷 指導老師 呂向陽 學 號 1040412123 姓 名 華 二012 年 1 月 7 日一 課程設計題目某停車場只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛汽車停放在最北端),若停車場已經(jīng)停滿n輛車,則后來的汽車只能在門外的便道即候車場上等候,一旦有車開走,則排在便道上的第一輛車即可開入。 當停車場某輛車要離開時。在它之后進入的車輛必須先退出車場為它讓路,該車輛開出大門外,其它車輛再按原次序進入停車場, 每輛停放在車場的車在它離開停車場時必須按它停留的時間
2、長短交納費用。試為該停車場編制按上述要求進行管理的模擬程序。二 流程與圖示 停車 顯示信息 離開 收費系統(tǒng) 查詢 顯示信息 退出a 1a 2a 3a n停車場(棧1)棧2 通道(隊列)三、程序運行與截圖 1.開始界面 首先是登陸界面,只要用戶名跟密碼一樣就可以登陸,輸入正確后,有一個延遲程序,讓使用者感覺更真實 如果輸入錯誤了,就是直接退出了2.主界面 登錄成功后,則是如下的功能界面:3 . 停車場管理系統(tǒng) 你可以選擇停車,離開,或者查看,當操作完了,可以直接選擇退出。 當你輸入 1 后,會提示你輸入停車的車號: 在這里輸入你想要停車的車號,然后會提示你停車的時間: 輸入停車時間后,則會顯示你
3、剛停車的詳細的信息: 4.離開 輸入 2,則會提示你要離開的車號: 然后輸入離開的車號后,會提示你輸入該車離開的時間,輸入離開的時間,則 會出現(xiàn)如下界面: 5 停車場管理系統(tǒng) 系統(tǒng)則會把你剛離開的車倆的詳細信息給你打印出來:拉開的車號,所用時間 以與應收的費用。這個時間管理員,可以對照表收費了。 6.查看 當你要查看停車場所停車的信息時,你可以選擇 3。同樣,選擇 3 確定后會提 示你要查看的車號,然后則會把信息打印在界面上: 系統(tǒng)會告訴你這倆停在停車場里面的那個位置上。7.退出 當你一切操作完了后,就可以選擇退出了,輸入 4 停車場管理系統(tǒng) 隨便按個鍵就退出該系統(tǒng)了。四、程序代碼#inclu
4、de<iostream> #include<conio.h> #include<iomanip>#include<fstream>#include<string> #include <stdlib.h> #include <windows.h> using namespace std; #define Max_Size 2/停車的最大容量 #define HourFare 2 /每小時的停車費用 int CountForStack=0; /棧里現(xiàn)有的車數(shù) int CountForQueue=0; /排隊等候的車
5、數(shù) typedef struct char Condition;/到達或者離開的狀態(tài) int Arrivetime;/到達時間,默認為-1,表示沒有到達 int Leavetime;/離開時間,默認為-1,表示沒有離開 int License;/車牌號 CarNode;/保存每輛車的信息 typedef struct/棧的定義 CarNode *base;/棧底指針 CarNode *top;/棧頂指針 int Stacksize;/棧的最大容量 CarStack; typedef struct QNodechar Condition;/到達或者離開的狀態(tài) int Arrivetime;/到達
6、時間,默認為-1,表示沒有到達 int Leavetime;/離開時間,默認為-1,表示沒有離開 int License;/車牌號 QNode *next; QNode; typedef struct/隊列的定義 QNode *front;/對頭指針 QNode * rear;/隊尾指針 Queue; bool InitStack(CarStack &S1)/初始化棧 S1 S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode); if(!S1.base) cout<<"棧 S1 存分配失敗"<<e
7、ndl; 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 存分配失?。?quot;<<endl; return false; Q.rear=Q.front; Q.front->next=NULL; return true; bool EnQueue(Queue &Q,QNode &a
8、mp;e)/插入元素 e 為 Q 的新的隊尾元素 QNode *p=(QNode *)malloc(sizeof(QNode); if(!p) cout<<"p 存分配失敗"<<endl; return false; p->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;
9、return true; bool DeQueue(Queue &Q,QNode &t)/出隊列函數(shù) if(Q.front=Q.rear) cout<<"隊列為空!"<<endl; return false; QNode *p=Q.front->next; t.Arrivetime=p->Arrivetime; t.Condition=p->Condition; t.Leavetime=p->Leavetime; t.License=p->License; Q.front->next=p->n
10、ext; if(Q.rear=p) Q.rear=Q.front; free(p); return true; void InitCarNode(CarNode &C,char condition,int 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(
11、S1.top-S1.base>=S1.Stacksize) cout<<"此棧已滿,不能壓入新的信息"<<endl; return false; (*S1.top).Arrivetime=car.Arrivetime; (*S1.top).Condition=car.Condition; (*S1.top).Leavetime=car.Leavetime; (*S1.top).License=car.License; +S1.top;/棧頂指針上移 return true; bool Pop(CarStack &S1,CarNode &
12、amp;t)/出棧操作 if(S1.top=S1.base) cout<<"棧 S1 為空,不能執(zhí)行出棧操作"<<endl; return false; -S1.top;/棧頂指針下移 t.Arrivetime=(*S1.top).Arrivetime; t.Condition=(*S1.top).Condition; t.Leavetime=(*S1.top).Leavetime; t.License=(*S1.top).License; return true; bool IsStackFull(CarStack &S1)/判斷 S1 棧
13、是否已滿 if(S1.top-S1.base>=S1.Stacksize) return true; else return false; bool IsStackEmpty(CarStack &S1)/判斷 S1 棧是否已空 if(S1.top=S1.base) return true; else return false; bool IsQueueEmpty(Queue &Q)/判斷隊列是否為空 if(Q.front=Q.rear) return true; else return false; bool SearchInStack(CarStack &S1,
14、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; if(*p).License=a) tag=true; return tag; bool SearchInQueue(Queue &Q,int a)/a 表示要查找的車牌號,如果在通道里面,就 返回 true bool tag=false; if(!IsQueueEmpty(Q)
15、/如果隊列非空 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 InCar(CarStack &S1,Queue &Q,int a1,int a2)/表示進入車輛,a1 表示到達時 間,a2 表示車牌 if(SearchInStack(S1,a2) cout<<"車號"<&l
16、t;a2<<"已經(jīng)存在于停車場,輸入有誤"<<endl; return; if(SearchInQueue(Q,a2) cout<<"車號"<<a2<<"已經(jīng)存在于通道,輸入有誤"<<endl; return; if(IsStackFull(S1)/如果堆棧已滿,說明停車場已滿,需要停車在通道里面 QNode qnode; qnode.Arrivetime=-1;/在通道里面不收費,所以不計時 qnode.Condition='A' qnode.L
17、eavetime=-1;/定義為-1,說明還沒有開始離開 qnode.License=a2; EnQueue(Q,qnode);/停在通道上 +CountForQueue; cout<<"車號:"<<qnode.License<<"停在通道的第"<<CountForQueue<<"號 位置"<<endl; else CarNode carnode; carnode.Arrivetime=a1; carnode.Condition='A' carno
18、de.Leavetime=-1; carnode.License=a2; Push(S1,carnode); +CountForStack;cout<<"車號: "<<carnode.License<<", 到達時間:"<<carnode.Arrivetime<<" 點,停在停車場的第"<<CountForStack<<"號位置"<<endl; void Sreach(CarStack &S1,Queue &am
19、p;Q,int a) if(SearchInStack(S1,a) cout<<"車號:"<<a<<"已存在停車場里面的第"<<CountForStack<<"號位 置"<<endl; return; if(SearchInQueue(Q,a) cout<<"停車場已滿,車號"<<a<<"存在于通道里面的第 "<<CountForQueue<<"號位置,在
20、次等候"<<endl; return; else cout<<"對不起!你查找的車號不在停車場里面"<<endl; return; void OutCar(CarStack &S1,Queue &Q,int a1,int a2)/出車函數(shù),a1 表示離開時間, a2 表示車牌 if(SearchInQueue(Q,a2) cout<<"車號"<<a2<<"存在于通道里面,還沒有進入停車場,不能離開 "<<endl; retur
21、n; if(!SearchInStack(S1,a2) cout<<"車號"<<a2<<"該車不在停車場"<<endl; return; CarStack tempstack; InitStack(tempstack);/新建一個棧,存放讓路的汽車 bool tag1=false;/標志這個停車場出車以前是否已滿,默認為沒有滿 tag1=IsStackFull(S1); bool tag2=true;/標志通道是否有汽車在等待,默認為通道為空 tag2=IsQueueEmpty(Q); CarNode te
22、mp;/用來保存暫時取出的汽車 bool tag3=false; while(1) Pop(S1,temp); if(temp.License=a2) if(a1<temp.Arrivetime) cout<<"離開失??!"<<endl; tag3=true; Push(tempstack,temp); else cout<<"車號:"<<a2<<"現(xiàn)在離開停車場,所用時間為: "<<a1-temp.Arrivetime<<"小時,應收
23、 RMB 為: "<<(a1-temp.Arrivetime)*HourFare<<"元"<<endl; break; else Push(tempstack,temp);/進入暫存棧 則把前面倒出的車再次放 while(!IsStackEmpty(tempstack)/如果臨時棧不空, 入停車場 Pop(tempstack,temp); Push(S1,temp); QNode tempqnode;/用來暫時保存從通道出來的汽車 if(tag1=true&&tag2=false&&tag3=fa
24、lse)/如果出車前停車場已滿,并且通 道不為空,并且離開沒有失敗 DeQueue(Q,tempqnode); -CountForQueue; 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,Que
25、ue &Q) cout<<"*選擇菜單 *"<<endl; cout<<" 1: 停車"<<endl; cout<<" 2: 離開停車場"<<endl; cout<<" 3: 查看車輛信息"<<endl; cout<<" 4: 退出系統(tǒng)"<<endl; cout<<"*請按鍵選擇*"<<endl; int tag; cin&g
26、t;>tag; while(tag!=1&&tag!=2&&tag!=3&&tag!=4) cin>>tag; int a1; unsigned int a2; switch(tag) case 1: cout<<"請輸入到達的車號:"<<endl; cin>>a1; cout<<"請輸入到達的時間:"<<endl; cin>>a2; InCar(S1,Q,a2,a1); Sreach(S1,Q,a1); break;
27、 case 2: cout<<"請輸入離開的車號:"<<endl; cin>>a1; cout<<"請輸入離開的時間:"<<endl; cin>>a2; OutCar(S1,Q,a2,a1); break; case 3: cout<<"請輸入你要查看的車號:"<<endl; cin>>a1; Sreach(S1,Q,a1); break; case 4: return; break;showmenu(S1,Q); void l
28、oging(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(A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新型農(nóng)用拖拉機進口代理銷售合同4篇
- 二零二五年度ktv室內(nèi)裝修消防設計審核合同3篇
- 二零二五年度教育培訓機構退款合同協(xié)議正規(guī)范本2025年版
- 二零二五年度WPS文檔定制化租賃合同修訂版3篇
- 二零二五年度充電樁安裝工程節(jié)能評估合同4篇
- 2025年個人住宅買賣合同(含物業(yè)交割)2篇
- 2025年度智慧停車場運營管理承包合同4篇
- 2025年度水暖工程安全質量監(jiān)督及驗收合同
- 二零二五年度房產(chǎn)抵押貸款風險管理與服務合同4篇
- 2025年度暖氣片銷售區(qū)域代理合同模板
- 妊娠合并低鉀血癥護理查房
- 煤礦反三違培訓課件
- 向流程設計要效率
- 安全文明施工的管理要點
- 2024年中國航空發(fā)動機集團招聘筆試參考題庫含答案解析
- 當代中外公司治理典型案例剖析(中科院研究生課件)
- 動力管道設計手冊-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
- Python繪圖庫Turtle詳解(含豐富示例)
- 煤礦機電設備檢修技術規(guī)范完整版
- 榆林200MWp并網(wǎng)光伏發(fā)電項目可行性研究報告
評論
0/150
提交評論