數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

精品文檔歡迎下載?數(shù)據(jù)結(jié)構(gòu)課程設(shè)計?設(shè)計題目:停車場管理系統(tǒng)學院:信息工程學院專業(yè):醫(yī)學信息系統(tǒng)班級:11級08班姓名:李嘉偉、黃庭華、楊茂銓、李俊鵬學號:指導老師:成績:2021年9月7日目錄1工程研究背景與意義…………………12需求分析………………33概要設(shè)計………………34詳細設(shè)計(算法設(shè)計的思想)…………45源代碼及調(diào)試…………66問題及難點所在………157使用說明及測試結(jié)果…………………168總結(jié)與體會……………199參考文獻………………20精品文檔歡迎下載1工程研究背景與意義1.1課題簡介課程設(shè)計題目名稱:停車場管理系統(tǒng)課程設(shè)計目的:通過?數(shù)據(jù)結(jié)構(gòu)?課程的學習,將數(shù)據(jù)結(jié)構(gòu)應(yīng)用在具體的編程方面,更加了解課程所學習的內(nèi)容及思維邏輯,提高程序開發(fā)能力,能運用合理的控制流程編寫清晰高效的程序。開發(fā)一個中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過程,培養(yǎng)分析問題、解決實際問題的能力。課程設(shè)計意義:利用數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,了解學生對?數(shù)據(jù)結(jié)構(gòu)?的理解和加強學生對數(shù)據(jù)結(jié)構(gòu)方面的應(yīng)用知識。幫助學生好好利用數(shù)據(jù)結(jié)構(gòu)的知識和思想,解決各方面的編程難題。課程設(shè)計內(nèi)容:〔1〕問題描述:設(shè)有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場時間的早晚依次從停車場最里面向大門口處停放〔最先到達的第一輛車放在停車場的最里面〕。如果停車場已放滿n輛車,那么后來的車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車開走,那么排以便道上的第一輛車就進入停車場。停車場內(nèi)如有某輛車要開走,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場。每輛車在離開停車場時,都應(yīng)根據(jù)它在停車場內(nèi)停留的時間長短交費。如果停留在便道上的車未進停車場時,允許其離去,不收停車費,并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理?!?〕根本要求:以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達〞或“離去〞信息、汽車牌照號碼、到達或離去的時刻,對每一組輸入數(shù)據(jù)進行操作后的輸出數(shù)據(jù)為:假設(shè)是車輛到達,那么輸出汽車在停車場內(nèi)或便道上的停車位置;假設(shè)是車離去;精品文檔歡迎下載那么輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用〔在便道上停留的時間不收費〕。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)。〔3〕測試數(shù)據(jù):汽車的模擬輸入信息格式可以是:〔到達/離去,汽車牌照號碼,到達/離去的時刻〕。例如,〔‘A’,1,5〕表示1號牌照車在5這個時刻到達,而〔‘D’,5,20〕表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為〔‘E’,0,0〕時結(jié)束。此題可用棧和隊列來實現(xiàn)?!?〕實現(xiàn)提示需另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結(jié)構(gòu)實現(xiàn)。輸入數(shù)據(jù)按到達或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數(shù)據(jù)項:汽車的牌照號碼和進入停車場的時刻。課程設(shè)計預(yù)期實現(xiàn)效果:開發(fā)可完成每一項根本功能的小型停車場管理系統(tǒng)1.2方案及其論證語言:C++運行環(huán)境:MicrosoftVisualC++6.0設(shè)計進度安排:李俊鵬楊茂銓黃庭華李嘉偉設(shè)計界面,查找資料完成初步的程序設(shè)計查資料解決調(diào)試中的問題改良程序,驗收并完成報告精品文檔歡迎下載2需求分析IT行業(yè)的高速開展讓計算機技術(shù)深入日常生活的每一個細節(jié)。隨著城市化程度的加深,房地產(chǎn)行業(yè)日益興盛,越來越多的小區(qū)散布在城市里,小區(qū)的車輛也與日俱增,停車場是小區(qū)里不可缺少的一局部,對停車場飛管理變得非常重要。通過開發(fā)小區(qū)停車場管理系統(tǒng),使小區(qū)里的車輛能得到有序的管理,這個系統(tǒng)使用對象為停車場的管理人員。系統(tǒng)需要滿足的要求:假設(shè)是車輛到達,那么輸出汽車在停車場內(nèi)或便道上的停車位置;假設(shè)是車離去,那么輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用〔在便道上停留的時間不收費〕。3概要設(shè)計〔特殊功能〕1、設(shè)計思想此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并且要實現(xiàn)停車場內(nèi)某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場的功能,就可以設(shè)計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當有車輛離開時,原來停車場內(nèi)為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現(xiàn)。當停車場內(nèi)開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結(jié)點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的鏈隊列的頭結(jié)點連到原來的第二輛車上就可以了。2、實現(xiàn)方法對于此停車場管理系統(tǒng)的實現(xiàn),就是用兩個堆棧來分別模擬停車場以及停車場內(nèi)車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放那么用一個鏈隊列來實現(xiàn),此時,通道上車輛的離開或者進入停車場只需改變此鏈隊精品文檔歡迎下載列上的結(jié)點而已。對于要對停車場內(nèi)的車輛根據(jù)其停放時間收取相應(yīng)的停車費用,可以記錄下車輛進入以及離開停車場的時間,再用時間差乘以相應(yīng)的單價并且打印出最后的費用就可以實現(xiàn)了。3、功能〔函數(shù)〕設(shè)計本程序從總體上分為四個功能模塊,分別為:〔1〕程序功能介紹和操作提示模塊〔2〕汽車進入停車位的管理模塊〔3〕汽車離開停車位的管理模塊〔4〕查看停車場狀態(tài)的查詢模塊在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:voidInitStack(StackCar*);//初始化棧intInitQueue(LinkQueueCar*);//初始化隊列intArrival(StackCar*,LinkQueueCar*);//進站登記voidLeave(StackCar*,StackCar*,LinkQueueCar*);//出站登記voidList(StackCar,LinkQueueCar);//查詢車位狀態(tài)4詳細設(shè)計流程圖:精品文檔歡迎下載車輛到達以堆棧來模擬停車場和以堆棧里的數(shù)據(jù)元素我設(shè)計成汽車的車牌號初始化車站,初始化讓路的臨時棧,初始化通道車場未滿,車進車場車輛到達以堆棧來模擬停車場和以堆棧里的數(shù)據(jù)元素我設(shè)計成汽車的車牌號初始化車站,初始化讓路的臨時棧,初始化通道車場未滿,車進車場車場已滿,車進便道判斷車場是否已滿車輸入車子到達時間,車牌號未滿車進入車場車進入車場判斷車場內(nèi)是否有車判斷車場內(nèi)是否有車不做任何計算不做任何計算無點x無點x有有輸入離開車輛的離開時間,進行停車費用的計算輸入離開車輛的離開時間,進行停車費用的計算此車后面的車輛退出并進入臨時棧此車后面的車輛退出并進入臨時棧 車子離開車子離開精品文檔歡迎下載5源代碼及調(diào)試程序代碼#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX100#defineprice0.05typedefstructTime//時間結(jié)構(gòu)體{ inthour; intmin;}Time;typedefstructCarNode//汽車結(jié)構(gòu)體{ charnum[10]; Timereach; Timeleave;}CarNode;typedefstructStackCar//存儲汽車的棧結(jié)構(gòu){ CarNode*stack[MAX+1]; inttop;}StackCar;精品文檔歡迎下載typedefstructQueueCarNode//存儲汽車的隊列結(jié)構(gòu){ CarNode*data; structQueueCarNode*next;}QueueCarNode;typedefstructLinkQueueCar//定義隊列結(jié)構(gòu)指針{ QueueCarNode*head; QueueCarNode*rear;}LinkQueueCar;voidInitStack(StackCar*);intInitQueue(LinkQueueCar*);intArrival(StackCar*,LinkQueueCar*);voidLeave(StackCar*,StackCar*,LinkQueueCar*);voidList(StackCar,LinkQueueCar);voidmain(){printf("\t\t===========歡送你進入停車場管理系統(tǒng)===========\n");printf("\t\t小組成員:李嘉偉黃庭華楊茂銓李俊鵬\n");printf("\t\t班級:11級08班\n");StackCarEnter,Temp;LinkQueueCarWait;inta;intb=1;InitStack(&Enter);InitStack(&Temp);//汽車出站時,暫時按次序存放汽車的棧結(jié)構(gòu)InitQueue(&Wait);精品文檔歡迎下載while(b){ cout<<"\n1.汽車進站登記"; cout<<"2.汽車出站登記"; cout<<"3.車位狀態(tài)顯示"; cout<<"4.退出系統(tǒng)\n"; cin>>a; while(b) { if(a==1||a==2||a==3||a==4)break; else { cout<<"\n錯誤!退出系統(tǒng)\n"; b=0; break; } } switch(a) { case1:Arrival(&Enter,&Wait);break; case2:Leave(&Enter,&Temp,&Wait);break; case3:List(Enter,Wait);break; case4:exit(0); default:break; }}}voidInitStack(StackCar*s)//初始化棧精品文檔歡迎下載{inti;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;}intInitQueue(LinkQueueCar*Q)//初始化隊列{Q->head=(QueueCarNode*)malloc(sizeof(QueueCarNode));if(Q->head!=NULL){ Q->head->next=NULL; Q->rear=Q->head; return(1);}elsereturn(-1);}intArrival(StackCar*Enter,LinkQueueCar*W)//進站登記{CarNode*p;QueueCarNode*t;p=(CarNode*)malloc(sizeof(CarNode));cout<<"\n請輸入車牌號:";cin>>p->num;if(Enter->top<MAX)//有空車位{ Enter->top++;精品文檔歡迎下載 cout<<"\n車輛在車場第"<<Enter->top<<"號車位"; cout<<"\n車輛到達時間(時):"; cin>>p->reach.hour; cout<<"\n車輛到達時間(分):"; cin>>p->reach.min; Enter->stack[Enter->top]=p; return(1);}else//沒有空車位{cout<<"\n該車須在便道等待!有車位時進入車場!";t=(QueueCarNode*)malloc(sizeof(QueueCarNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}voidPRINT(CarNode*p,introom)//汽車離站時繳費顯示{cout<<"\n車輛離開的時間(時):";cin>>p->leave.hour;cout<<"\n車輛離開的時間(分):";cin>>p->leave.min;printf("\n離開車輛的車牌號為:");cout<<p->num;cout<<"\n其到達時間為:"<<p->reach.hour<<"時"<<p->reach.min<<"分";cout<<"\n離開時間為:"<<p->leave.hour<<"時"<<p->leave.min<<"分";精品文檔歡迎下載cout<<"\n應(yīng)交費用為:"<<((p->leave.hour-p->reach.hour)*60+(p->leave.min-p->reach.min))*price<<"元";free(p);}voidLeave(StackCar*Enter,StackCar*Temp,LinkQueueCar*W)//出站登記{ introom; CarNode*p,*t; QueueCarNode*q; if(Enter->top>0)//車站有車時 { while(1) { cout<<"\n請輸入車在車場的位置:";cin>>room;if(room>=1&&room<=Enter->top)break; } while(Enter->top>room)//位置不在棧頂?shù)钠嚦稣? { Temp->top++; Temp->stack[Temp->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; } p=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; while(Temp->top>=1)//當暫時存儲汽車的棧結(jié)構(gòu)中有汽車時汽車重精品文檔歡迎下載新進站 { Enter->top++; Enter->stack[Enter->top]=Temp->stack[Temp->top]; Temp->stack[Temp->top]=NULL; Temp->top--; } PRINT(p,room); if((W->head!=W->rear)&&Enter->top<MAX)//車站有空位且便道有車時,便道車進站 { q=W->head->next; t=q->data; Enter->top++; cout<<"\n便道的"<<t->num<<"號車進入車場第"<<Enter->top<<"號車位."; cout<<"\n請輸入"<<t->num<<"號車進入車場的時間(時):";cin>>t->reach.hour; cout<<"\n請輸入"<<t->num<<"號車進入車場的時間(分):"; cin>>t->reach.min; W->head->next=q->next; if(q==W->rear) W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } elsecout<<"\n便道里沒有車.\n"; } elsecout<<"\n車場里沒有車.";}精品文檔歡迎下載voidList1(StackCar*S)//車場車位顯示{inti; if(S->top>0) { cout<<"\n車場車位狀態(tài):"; cout<<"\n車位號\t"<<"到達時間\t"<<"車牌號\n"; for(i=1;i<=S->top;i++) { cout<<""<<i<<"\t"; cout<<S->stack[i]->reach.hour<<"時"<<S->stack[i]->reach.min<<"分"; cout<<"\t"<<S->stack[i]->num<<"\n"; } } elsecout<<"\n車場里沒有車";}voidList2(LinkQueueCar*W)//便道車位顯示{QueueCarNode*p;p=W->head->next;if(W->head!=W->rear){ cout<<"\n便道內(nèi)車隊依次為:"; cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"; while(p!=NULL) {精品文檔歡迎下載 cout<<p->data->num<<"\t"; p=p->next; } cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";}elsecout<<"\n便道里沒有車.";}voidList(StackCarS,LinkQueueCarW)//查詢車位狀態(tài){intflag,choice;flag=1;while(flag){cout<<"\n請選擇:";cout<<"\n\t\t1.車場列表\n\t\t2.便道列表\n\t\t3.返回主菜單\n";while(1) {cin>>choice;if(choice>=1||choice<=3)break;elsecout<<"選擇錯誤,請重新選擇!\n"; }switch(choice) {case1: List1(&S); break;case2:精品文檔歡迎下載 List2(&W); break; case3: flag=0; break; default: break; }}}調(diào)試過程中曾遇到的錯誤:最初調(diào)試中車牌號編寫為int型,輸入的只能是數(shù)字,但現(xiàn)實生活中車牌號都為漢字+英文字母+數(shù)字,在改良過

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論