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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論