




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
軟件學院綜合訓練項目報告書課程名稱 數據結構項目名稱 停車場停車管理專業班級 軟件15-5班 組 另g 第四組成員 馮煜民、裴雅昕、王婷任課教師 孫寧目錄TOC\o"1-5"\h\z\o"CurrentDocument"1設計時間 3第十一周--第十二周 3\o"CurrentDocument"2設計任務 3\o"CurrentDocument"3設計內容 3\o"CurrentDocument"3.1問題分析 4\o"CurrentDocument"3.2程序設計 5\o"CurrentDocument"3.3測試與分析 10\o"CurrentDocument"3.4代碼 134總結與展望 20\o"CurrentDocument"參考文獻 21\o"CurrentDocument"成員分工 21\o"CurrentDocument"成績評定 211設計時間第十一周一第十二周2設計任務設停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入停車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短繳納費用。試為停車場編制按上述要求進行管理的模擬程序,程序運行要有相應功能選擇菜單。3設計內容以棧模擬停車場,以隊列模擬停車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。每一組輸入數據包括三個數據項:汽車“到達”或者“離開”信息、汽車牌照號碼以及汽車到達或離開的時刻。對每一組輸入數據進行操作后的輸出信息為:a、 若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;b、 若是車輛離開,則輸出汽車在停車場內停留的時間和應繳的費用(在便道上停留的時間不收費)。棧以順序結構實現,隊列以鏈表結構實現。需另設一個棧,臨時停放為給要離開的汽車讓路而從停車場退出來的汽車,也用順序存儲結構實現。輸入數據按到達或離開的時刻有序。棧中每一個元素表示一輛汽車,包含2個數據項:汽車的牌照號碼和進入停車場的時刻。程序運行有功能選擇菜單。3.1問題分析3.11程序功能首先定義用來模擬停車場的鏈棧以及用來模擬便道的鏈隊列為存儲結構,然后編寫主函數,在此主函數中實現對其它各個模塊的調用。在主函數中首先調用鏈棧和鏈隊初始化函數,分別建立兩個鏈棧和一個鏈隊。然后出現歡迎用戶使用的主界面,然后提示用戶進入此停車場管理系統后,再出現一個供用戶選擇所需服務的選項,在用戶的選擇過程中,程序又分別調用車輛的到達、車輛的離開、停車場內停放車輛的信息、便道內的停放車輛信息以及退出程序這五個個函數模塊。其中,在車輛的離開那個模塊函數中又調用了打印離開車輛信息的函數以及停車收費函數,在停車場內停放車輛信息的那個模塊函數中,又分別調用了在停車場容量已滿時車輛進入便道的入隊函數以及時間函數。主函數3.2程序設計3.2.1抽象數據類型的定義及實現typedefstruct{intday;inthour;intmin;}TIME;〃時間結點typedefstruct{charnum[10]; 〃車牌號TIMEtime; 〃進入停車場的時間intn; 〃進入停車場的位置[information;〃鏈棧結構體定義typedefstructnode{informationdata;structnode*next;}stacknode;stacknode*topl,*top2;〃鏈隊列結構體定義typedefstruct{informationdata;stacknode*front,*rear;}LQueue;LQueue*Q;3.2.2主程序的流程1?定義一個字符型數組,用來存儲車牌號。初始化兩個鏈棧,一個鏈隊。2?顯示用戶界面,提示用戶進行服務選擇。3.Switch語句根據用戶的選擇執行相關的語句,最終將結果打印到界面。3.2.3函數說明及函數的調用關系圖。stacknode*Init(); //棧的初始化//初始化車輛進入//初始化車輛進入//亭車費用計算函數//車輛駛出出場函數//初始化隊列函數intexpenses(stacknode*p,intx,inty);stacknode*leave(stacknode*top1,charstr[],LQueue*Q);LQueue*InitLQue();
LQueue*wait(LQueue*q,stacknode*s);/車輛進入候車便道函數intEmptyLQue(LQueue*q);//判斷候車便道有無等待車輛函數stacknode*out(LQueue*q);//候車區車輛出隊stacknode*LQinto(stacknode*p,stacknode*top1);/從候車便道進入停車場函數//顯示停車場所有信息函//顯示停車場所有信息函數3.2.4.主要函數及算法stacknode*into(stacknode*top1,LQueue*Q){time_trawtime; //調用系統時間函數structtm*timeinfo;//時間結點time(&rawtime);timeinfo=localtime(&rawtime);p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntop1;}printf("請輸入進入停車場車輛的車牌號:");scanf("%s",p-〉data.num);q二topl;while(q!二NULL){if(strcmp(p-〉data.num,q-〉data.num)==0){printf("車牌號輸入有誤,該車已進入!");returntopl;}q=q—〉next;}p—>data.time.day二timeinfo—〉tm_mday;p—>data.time.hour二timeinfo—〉tm_hour;p—>data.time.min二timeinfo—〉tm_min;p—>data.n=b;if(b〉MAX){printf("停車場已滿,請在便道等候!\n");wait(Q,p);returntopl;}if(top1==NULL){p—>next=NULL;topl二p;}else{p—>next=topl;topl=p;}b++;printf("車輛進入停車場成功,時間已經自動載入!\n");printf("車牌為%s的汽車駛入時間為:%d號%d點%宀分\n",topl-〉data.num,topl-〉data.time.day,topl-〉data.time.hour,topl-〉data.time.min);returntopl;}stacknode*leave(stacknode*topl,charstr[],LQueue*Q){timetrawtime;structtm*timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);day二timeinfo—〉tm_mday;hour二timeinfo—〉tm_hour;min二timeinfo—〉tm_min;if(topl==NULL){printf("停車場沒有車輛!\n");returntopl;}q=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntopl;}q二topl;while(q!=NULL){if(strcmp(q—>data.num,str)==0)break;q=q—〉next;}辻(q==NULL){printf("輸入有誤,該車輛不在停車場!\n");returntopl;}for(i二top1—>data.n;i〉q-〉data.n;i—){p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntopl;}strcpy(p—>data.num,topl-〉data.num);p—>data.time二topl-〉data.time;p—>data.n=topl—〉data.n—l;topi二topl—〉next;if(top2==NULL){p—>next=NULL;top2=p;}else{p—>next=top2;top2=p;}}topi二top1—>next;while(top2!=NULL){p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntop1;}p->data.n=top2->data.n;strcpy(p-〉data.num,top2->data.num);p->data.time二top2—>data.time;p—>next=topi;top1=p;top2=top2—>next;}if(EmptyLQue(Q)){p=out(Q);p—>data.n—;top1=LQinto(p,topi);}elseb--;printf("車牌為%s的汽車駛出時間為:%d號%d點%宀分\n",q-〉data.num,day,hour,min);printf("車輛駛出停車場需要繳納的費用為:%d元\n",expenses(q,day,hour,min));returntopi;}stacknode*LQinto(stacknode*p,stacknode*topi){p2—>next=topi;topi=p2;returntopi;
}3.3測試與分析3.3.1測試1?輸入選項“1”,車牌號:A12?輸入選項“2”,輸入車牌號A2
廠1E:\CVuVan\bin\wwtemp?已大亡TOC\o"1-5"\h\z1.進入停車場 +2?退世停豐揚 *3.顯示停車場情況 *4.顯示磺道律車情況 *5-退出系統 *:+=i=i=i=i=i=4=m=i=i=i=i=i=4om=i=i=i=i=i=4om=i=i=i=i=i=i=m=i=i=i=i=i=i=m=i=i=i=i=i=^植輸人選項1-耳選擇您想要的服務>>????>????>????>????>????<????<????<<?<??<<??1植輸入進入停車場車輛的車牌號;曲庫輛進入停車場成功,時間已經自動載入!年臉為恵前汽時向為:19號20點走亦1植輸入進入停車場車輛的車牌號:挺岸輛進入停車場咸功,時間已經自動載入!徉牌為曬的汽車駛入時間為:19號加點刖分>>????>????>????>????>????<<???<<????<<???<<<??2慣輸入離開車輛的車牌號:A2庫牌為她的汽車駛出時間為:19號加點死分徉輛哽出停車場需要繳納的費用為:1元>>????>????>????>????>????<????<????<<?<??<<??半幘輸入選項1弋選擇您想要的服務???????????????????????????????????????<牌號:A2時間毎:19號20點5吩幘輸入進入停車場車輛的車牌號:A1帚輛進入停車場成功,時間已經自動載入!悄牌知半幘輸入選項1弋選擇您想要的服務???????????????????????????????????????<牌號:A2時間毎:19號20點5吩幘輸入進入停車場車輛的車牌號:A1帚輛進入停車場成功,時間已經自動載入!悄牌知1的汽車駛入時間為:19號20點砧分???????????????????????????????????????<幘輸入進入停車場車輛的車牌號:A2帚輛進入停車場成功,時間已經自動載入!悄牌知2的汽車駛入時間為:19號20點5吩???????????????????????????????????????<2猜輸入離幵車輛的悄牌知2的汽車駛|岸輛駛出停車場需要繳納的費用為:1元???????????????????????????????????????<3停車場內全部車輛信息表車牌號 進入時間 位墨IIA1 19號20點砧分 第1位|丨???????????????????????????????????????<4?輸入選項“4”3?輸入選項“3”13E:\CYuYan\bin\wwtemp.exe 口回車牌寫 迅人時間 位羞IIAl 19°20^5S分 第1位|丨>>????>>????>>????>?>??<<<????<<????<????<<????<1情輸入進入停車場車輛的車牌號:A3岸輛進入停車場成功,時間已經自動載入!岸牌為酮的汽車駛入時間為:均號21點盼>>????>>????>>????>>???<<<????<????<<????<<????<1情輸人進入停車場車舸的車牌號:A4岸輛進入停車場成功,時間已經自動載人!岸牌為皿的汽車駛入時間為:均號21點0分>>????>>????>?>???>?>??<<<????<<????<????<<????<1情輸入進入停車場車輛的車牌號:A5轉車場已滿,請在便道等候!>>????>>????>>????>??>?<<<????<????<<????<<????<k便道信息車牌號 進入時間IIA5 曲號卻點0分II>>????>>????>>????>>???<<<????<????<<????<<????<半:5?輸入“2”,輸入車牌號A4,再輸入4:M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M:車牌號 進入時間IIA5 19號21點0分||???????????????????????????????????????<2請輸入離幵車輛的車牌號:A4車牌為胡的汽車駛出時間為:均號陽點1分車輛駛出停車場需要繳納的費用為:1元???????????????????????????????????????<4 便道信息:M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M=M:便道沒有車輛!???????????????????????????????????????<半:3.3.2分析1?在程序調試過程中,出現了一些關于指針方面的問題,在執行選項4的功能時,本來應該顯示的是“便道內停放車輛的信息”,但是在此時出現了異常,程序的輸出結果為一連串的漢字“屯”,以及一長串的數字,根據過往編程的經驗,出現的異常問題應該屬于指針方面的問題,經過對程序的逐一排查,把問題所在范圍鎖定在了便道顯示函數里,經過調試發現的確為指針類型定義,類型定義的錯誤。2?在整個程序的設計過程中,首先選用了鏈式存儲結構,棧和隊列都采用了鏈式存儲的結構,這樣的做的目的是為了降低空間復雜度,減少內存的浪費,但是在進行結構體成員調用時,代碼顯得有些臃腫,容易出現細節性錯誤。3?在整個程序的設計中,基本都已if語句和while語句為主,所以主要元操作的語句頻度低,時間復雜度小,時間復雜度為0(n)。4?在程序設計中,有一個好的收獲就是,調用了“window.h”頭文件中的時間函數,這樣減少了用戶的輸入數據的量,也使時間記錄更加規范3.4代碼/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"#include"string.h"#include"time.h"#include"malloc.h"#include"windows.h"#defineMAX3//停車場容量#defineprice1intb=1;typedefstruct{intday;inthour;intmin;}TIME;//時間結點typedefstruct{charnum[10]; //車牌號TIMEtime; //進入停車場的時間intn; //進入停車場的位置}information;//鏈棧結構體定義typedefstructnode{informationdata;structnode*next;}stacknode;stacknode*topl,*top2;//鏈隊列結構體定義typedefstruct{informationdata;stacknode*front,*rear;}LQueue;LQueue*Q;//棧的初始化stacknode*Init(){stacknode*top;top=(stacknode*)malloc(sizeof(stacknode));top二NULL;returntop;}//隊列函數初始化LQueue*InitLQue(){LQueue*Q;stacknode*p;Q=(LQueue*)malloc(sizeof(LQueue));p=(stacknode*)malloc(sizeof(stacknode));p-〉next=NULL;Q—〉front二Q->rear=p;returnQ;}//便道隊列入隊LQueue*wait(LQueue*t,stacknode*s){s—>next=NULL;t-〉rear—〉next二s;t—〉rear二s;returnt;}//判斷候車便道有無車輛等待intEmptyLQue(LQueue*q1){if(ql-〉front==ql-〉rear)return0;elsereturn1;}//便道車輛出隊stacknode*out(LQueue*q2){stacknode*p1;pl二q2—〉front—〉next;if(q2-〉front-〉next二二q2-〉rear){q2—〉rear二q2—〉front;returnpl;}elseq2—〉front—〉next二p1—〉next;pl-〉next=NULL;returnpl;}//候車隊列進入停車場stacknode*LQinto(stacknode*p2,stacknode*topl){p2—〉next=top1;top1=p2;returntopl;}//初始化車輛進入stacknode*into(stacknode*top1,LQueue*Q){stacknode*p,*q;time_trawtime; //調用系統時間函數structtm*timeinfo;//時間結點time(&rawtime);timeinfo=localtime(&rawtime);p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntopl;}printf("請輸入進入停車場車輛的車牌號:");scanf("%s",p-〉data.num);q二topl;while(q!=NULL){if(strcmp(p—>data.num,q-〉data.num)==0){printf("車牌號輸入有誤,該車已進入!");returntopl;}q=q—>next;}p—>data.time.day二timeinfo—〉tm_mday;p—>data.time.hour二timeinfo—〉tm_hour;p—>data.time.min二timeinfo—〉tm_min;p—>data.n=b;if(b〉MAX){printf("停車場已滿,請在便道等候!\n");wait(Q,p);returntopl;}if(top1==NULL){p-〉next=NULL;top1=p;}else{p—〉next=top1;top1=p;}b++;printf("車輛進入停車場成功,時間已經自動載入!\n");printf("車牌為%s的汽車駛入時間為:%d號%d點%宀分\n",top1—>data.num,top1—>data.time.day,top1—>data.time.hour,top1—>data.time.min);returntopl;}//停車費用計算函數intexpenses(stacknode*p,intxl,intx2,intx3){intw;if(x3!=0)w=(x1*24+x2+1-(p-〉data.time.day*24+p-〉data.time.hour))*price;elsew=(x1*24+x2—(p—>data.time.day*24+p—>data.time.hour))*price;returnw;}//車輛駛出出場函數stacknode*leave(stacknode*topl,charstr[],LQueue*Q){stacknode*p,*q;inti,day,hour,min;time_trawtime;structtm*timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);day二timeinfo—〉tm_mday;hour二timeinfo—〉tm_hour;min二timeinfo—〉tm_min;if(top1==NULL){printf("停車場沒有車輛!\n");returntopl;}q=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntop1;}q二top1;while(q!=NULL){if(strcmp(q-〉data.num,str)==0)break;q=q—〉next;}辻(q==NULL){printf("輸入有誤,該車輛不在停車場!\n");returntopl;}for(i二top1—>data.n;i〉q-〉data.n;i—){p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntopl;}strcpy(p-〉data.num,top1—>data.num);p—>data.time二top1-〉data.time;p—>data.n=top1-〉data.n—1;topl二top1—>next;if(top2==NULL){p—>next=NULL;top2=p;}else{p—>next=top2;top2=p;}}topi二topl—〉next;while(top2!=NULL){p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");returntopi;}p->data.n=top2—>data.n;strcpy(p-〉data.num,top2—>data.num);p—>data.time二top2—>data.time;p—>next=topi;top1=p;top2=top2—>next;}if(EmptyLQue(Q)){p=out(Q);p—>data.n—;top1=LQinto(p,topi);}elseb--;printf("車牌為%s的汽車駛出時間為:%d號%d點%宀分\n",q-〉data.num,day,hour,min);printf("車輛駛出停車場需要繳納的費用為:%d元\n",expenses(q,day,hour,min));returntopi;}//顯示停車場內所有車輛信息voidshow(stacknode*topi){printf("\t\t\t 停車場內全部車輛信息表\n");printf("\t\t\t*************************************\n");if(topi==NULL)printf("停車場內無車!\n");else{printf("\t\t\t車牌號 進入時間 位置\n");while(topi!=NULL){printf("\t\t\t||%s %d號%d點%宀分 第%d位||\n",topl-〉data.num,topl-〉data.time.day,topl-〉data.time.hour,topl-〉data.time.min,topl-〉data,n);topl二top1-〉next;}}}//顯示候車區的汽車信息voidT_shou(LQueue*p){stacknode*q4;q4=(stacknode*)malloc(sizeof(stacknode));(q4)=(p-〉front-〉next);printf("\t\t\t 便道信息\n");printf("\t\t\t****************************************\n");if(p->front二二p-〉rear)printf("\t\t\t 便道沒有車輛!\n");else{printf("\t\t\t車牌號 進入時間\n");while(q4!=NULL){printf("\t\t\t||%s %d號%d點%宀分||\n",q4-〉data.num,q4-〉data.time.day,q4-〉data.time.hour,q4-〉data.time.min);q4二q4-〉next;}}voidmain(){inti;charstr[10];Q=InitLQue();top1=Init();top2=Init();system("colorOB");printf("\t\t*1?進入停車場*\n")printf("\t\t*2.退出停車場*\n")printf("\t\t*3.顯示停車場情況*\n")printf("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 瑪納斯小產區四種干紅葡萄酒色澤、香氣和礦質元素質量特征研究
- 儀式與詩情-北宋祈雨詩研究
- 2025-2030年中國氣體過濾器行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國棉絨芽墊和棉襪行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國檸檬酸酯增塑劑行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國無鋁食品袋行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國接觸式和對流式干燥機行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國抽油機行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國托盤輸送機行業市場現狀供需分析及投資評估規劃分析研究報告
- 基于Hadoop的船舶軌跡可視化系統研究
- 山東電動伸縮雨棚施工方案
- 新媒體營銷技術與應用PPT完整全套教學課件
- 第5章紅外教學課件
- 卡氏肺孢子蟲肺炎
- 大足縣某水庫除險加固工程施工組織設計
- 基于單片機數字電壓表電路設計外文文獻原稿和譯文
- JJG 1149-2022電動汽車非車載充電機(試行)
- 2023版浙江評審衛生高級專業技術資格醫學衛生刊物名錄
- GB/T 1689-1998硫化橡膠耐磨性能的測定(用阿克隆磨耗機)
- GB/T 16823.3-2010緊固件扭矩-夾緊力試驗
- 江蘇省金陵中學2023學年物理高一下期末調研試題(含答案解析)
評論
0/150
提交評論