C語言停車場管理實驗報告_第1頁
C語言停車場管理實驗報告_第2頁
C語言停車場管理實驗報告_第3頁
C語言停車場管理實驗報告_第4頁
C語言停車場管理實驗報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

設(shè)停車場內(nèi)只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。功能描述以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼及到達(dá)或離去的時刻,對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車離去;則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費(fèi)用(在便道上停留的時間不收費(fèi))。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)系統(tǒng)設(shè)計及實現(xiàn)1.頭文件及宏定義#include<conio.h>#include<malloc.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>#defineClearScreen()system("cls")//清空當(dāng)前屏幕#definesetcolor()system("color2f")//設(shè)置背景前景顏色#definePause(szPrompt)printf("%s",szPrompt),getch()2.時間和汽車信息結(jié)構(gòu)體的定義(部分代碼)typedefstructcarinformation//車輛信息{charszRegistrationMark[64];//車牌號charszArrivalTime[16];//到達(dá)時間charszEntranceTime[16];//進(jìn)入停車場(開始計費(fèi))時間charszDepartureTime[16];//離開時間}TCARINFORMATION,*LPTCARINFORMATION;3.棧和隊列的定義(部分代碼)typedefstructcarqueue//鏈隊{LPTCARNODElpHead;//頭結(jié)點(diǎn)LPTCARNODElpRear;//指向當(dāng)前隊尾的指針intnEffectiveSize;//當(dāng)前隊中元素個數(shù)}TCARQUEUE,*LPTCARQUEUE;4.棧和隊列的初始化(部分代碼)voidInitQueue(LPTCARQUEUE&lpCarQueue){lpCarQueue=(LPTCARQUEUE)malloc(sizeof(TCARQUEUE));lpCarQueue->lpHead=(LPTCARNODE)malloc(sizeof(TCARNODE));lpCarQueue->lpHead->lpNext=NULL;lpCarQueue->lpRear=lpCarQueue->lpHead;lpCarQueue->nEffectiveSize=0;}實現(xiàn)過程1.開始界面:輸入車庫容量2.輸入車輛到達(dá)信息3.當(dāng)車庫停滿車時臨時停到便道上不收車費(fèi)4.車輛離開后車庫有車位便道上的車進(jìn)入車庫并顯示離去車的收費(fèi)記錄5.顯示車庫及便道信息6.停止輸入顯示制作者信息及退出程序?qū)嵱?xùn)心得通過這次實訓(xùn)我對課本上的理論知識有了更深層次的了解,可能在僅一周的時間內(nèi)學(xué)到的東西有限,不過卻也是受益非淺,實訓(xùn)本來就是對平常所學(xué)的理論知識通過具體的實現(xiàn)表示出來是在完成理論課程學(xué)習(xí)之后安排的綜合實踐訓(xùn)練,任何一個優(yōu)秀的程序員都是從實踐中獲得經(jīng)驗和教訓(xùn)的。經(jīng)過僅僅一周的實訓(xùn)從總體上說收獲是很不錯的!首先代碼的編寫能力明顯提高,有了想法基本都能順利表達(dá)出來;再者就是數(shù)據(jù)結(jié)構(gòu)的選擇使用能力也有了很大的提高!雖然,平時的實驗課我們也有用各種數(shù)據(jù)做題,但那些都是很明確的該做什么操作,存什么,我們的發(fā)揮空間不大一般照做就行,然而這次實習(xí)我們卻是在自主的選擇判斷,這本身就是一個很大的提高!但是還是很多的知識不了解,不過收獲真的很多,但是最大的收獲可能就是對編程的興趣吧,在一次次的改掉錯誤,一次次的完成想要的效果后,越寫越有感覺,越寫越有成就感!當(dāng)然還收獲了無知,更確切的說是自知,原來我們現(xiàn)在什么也不算,還有很多有用的知識等著我們?nèi)W(xué)習(xí)!附錄(代碼)#include<conio.h>#include<malloc.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>//清空當(dāng)前屏幕#defineClearScreen()system("cls")//設(shè)置背景前景顏色#definesetcolor()system("color2f")//顯示字符串szPrompt并等待用戶按下任意鍵#definePause(szPrompt)printf("%s",szPrompt),getch()typedefstructcarinformation//車輛信息{charszRegistrationMark[64];//車牌號charszArrivalTime[16];//到達(dá)時間charszEntranceTime[16];//進(jìn)入停車場(開始計費(fèi))時間charszDepartureTime[16];//離開時間}TCARINFORMATION,*LPTCARINFORMATION;typedefstructcarstack{LPTCARINFORMATIONlpCarInformation;//車輛信息intnTop;//棧頂元素下標(biāo)intnStackSize;//棧容量}TCARSTACK,*LPTCARSTACK;//初始化棧lpCarStack,將其容量設(shè)置為nSizevoidInitStack(LPTCARSTACK&lpCarStack,intnSize){lpCarStack=(LPTCARSTACK)malloc(sizeof(TCARSTACK));lpCarStack->lpCarInformation=(LPTCARINFORMATION)malloc(nSize*sizeof(TCARINFORMATION));lpCarStack->nTop=-1;lpCarStack->nStackSize=nSize;}//車輛信息carinfo入棧lpCarStackvoidPush(LPTCARSTACK&lpCarStack,TCARINFORMATIONcarinfo){lpCarStack->nTop++;lpCarStack->lpCarInformation[lpCarStack->nTop]=carinfo;}//車輛信息從棧lpCarStack中彈出并存入carinfovoidPop(LPTCARSTACK&lpCarStack,TCARINFORMATION&carinfo){carinfo=lpCarStack->lpCarInformation[lpCarStack->nTop];lpCarStack->nTop--;}//若棧lpCarstack空,返回TRUE;否則,返回FALSEBOOLIsStackEmpty(LPTCARSTACKlpCarStack){returnlpCarStack->nTop==-1;}//若棧lpStackFull滿,返回TRUE;否則,返回FALSEBOOLIsStackFull(LPTCARSTACKlpCarStack){returnlpCarStack->nTop==(lpCarStack->nStackSize-1);}//銷毀棧lpCarStack,將指針lpCarStack置為NULLvoidDestroyStack(LPTCARSTACK&lpCarStack){free(lpCarStack->lpCarInformation);free(lpCarStack);lpCarStack=NULL;}typedefstructcarnode//鏈隊結(jié)點(diǎn)信息{TCARINFORMATIONcarinfo;//車輛信息structcarnode*lpNext;//指向下一個元素的指針}TCARNODE,*LPTCARNODE;typedefstructcarqueue//鏈隊{LPTCARNODElpHead;//頭結(jié)點(diǎn)LPTCARNODElpRear;//指向當(dāng)前隊尾的指針intnEffectiveSize;//當(dāng)前隊中元素個數(shù)}TCARQUEUE,*LPTCARQUEUE;//初始化鏈隊lpCarQueuevoidInitQueue(LPTCARQUEUE&lpCarQueue){lpCarQueue=(LPTCARQUEUE)malloc(sizeof(TCARQUEUE));lpCarQueue->lpHead=(LPTCARNODE)malloc(sizeof(TCARNODE));lpCarQueue->lpHead->lpNext=NULL;lpCarQueue->lpRear=lpCarQueue->lpHead;lpCarQueue->nEffectiveSize=0;}//車輛信息carinfo入隊lpCarQueuevoidEnQueue(LPTCARQUEUE&lpCarQueue,TCARINFORMATIONcarinfo){LPTCARNODElpCarNode=(LPTCARNODE)malloc(sizeof(carnode));lpCarNode->carinfo=carinfo;lpCarNode->lpNext=NULL;lpCarQueue->lpRear->lpNext=lpCarNode;lpCarQueue->lpRear=lpCarQueue->lpRear->lpNext;lpCarQueue->nEffectiveSize++;}//隊頭元素從鏈隊lpCarQueue中出隊并存入carinfovoidDeQueue(LPTCARQUEUE&lpCarQueue,TCARINFORMATION&carinfo){LPTCARNODElpTemp=lpCarQueue->lpHead->lpNext;carinfo=lpTemp->carinfo;lpCarQueue->lpHead->lpNext=lpTemp->lpNext;free(lpTemp);lpCarQueue->nEffectiveSize--;}//若鏈隊lpCarQueue為空,返回TRUE;否則,返回FALSEBOOLIsQueueEmpty(LPTCARQUEUElpCarQueue){returnlpCarQueue->nEffectiveSize==0;}//銷毀鏈隊lpCarQueuevoidDestroyQueue(LPTCARQUEUE&lpCarQueue){LPTCARNODElpNextCarNode=NULL;for(LPTCARNODElpCarNode=lpCarQueue->lpHead;lpCarNode!=NULL;lpCarNode=lpNextCarNode){lpNextCarNode=lpCarNode->lpNext;free(lpCarNode);}free(lpCarQueue);lpCarQueue=NULL;}//將字符串時間格式轉(zhuǎn)換為數(shù)字(分鐘)格式,例如12:36將被轉(zhuǎn)換為756(12*60+36)intConvertTimeFormat(char*lpTime){intnHour=0;intnMinute=0;sscanf(lpTime,"%d:%d",&nHour,&nMinute);returnnHour*60+nMinute;}//根據(jù)在停車場內(nèi)的停留時間nContinuanceMinutes(分鐘)計算費(fèi)用doubleCalculateExpense(intnContinuanceMinutes){returnnContinuanceMinutes*(5.0/60);}intmain(void){setcolor();intnParkCapability=0;//停車場容量putchar('\n');printf("請輸入停車場容量:");scanf("%d",&nParkCapability);LPTCARSTACKlpCarStack=NULL;//停車場,用棧模擬豫InitStack(lpCarStack,nParkCapability);LPTCARQUEUElpCarQueue=NULL;//便道,用鏈隊模擬InitQueue(lpCarQueue);charcCommandType=NULL;//命令類型charszUserInput[128]={NULL};//用戶輸入do{ClearScreen();setcolor();putchar('\n');puts("--------------------");puts("[命令類型]");puts("A-車輛到達(dá)");puts("D-車輛離開");puts("E-停止輸入");puts("O-顯示當(dāng)前停車場和便道使用情況");putchar('\n');puts("例:");puts("A,豫A1234,14:26");puts("D,豫A1234,16:51");puts("E");puts("O");putchar('\n');printf("請輸入命令:");scanf("%s",szUserInput);puts("--------------------");charszCarInformation[128]={NULL};sscanf(szUserInput,//將命令類型與車輛信息分開存放"%c,%s",&cCommandType,//用戶輸入的前半部分,即命令類型szCarInformation//用戶輸入的后半部分,即車輛信息);char*lpCommaLocation=NULL;//車輛信息字符串中的逗號位置for(lpCommaLocation=szCarInformation;*lpCommaLocation!='\0';lpCommaLocation++){if(*lpCommaLocation==','){break;}}*lpCommaLocation='\0';TCARINFORMATIONcarinfo={NULL};//存儲本次用戶輸入的車輛信息strcpy(carinfo.szRegistrationMark,szCarInformation);if(cCommandType=='A'){strcpy(carinfo.szArrivalTime,lpCommaLocation+1);if(FALSE==IsStackFull(lpCarStack)){strcpy(carinfo.szEntranceTime,carinfo.szArrivalTime);Push(lpCarStack,carinfo);printf("已進(jìn)入停車場第%d個車位\n",lpCarStack->nTop+1);printf("車牌號:\t\t%s\n",carinfo.szRegistrationMark);printf("進(jìn)入時間:\t%s\n",carinfo.szEntranceTime);puts("是否收費(fèi):\t是");}else{EnQueue(lpCarQueue,carinfo);printf("停車場已滿,已停放在便道的第%d個車位\n",lpCarQueue->nEffectiveSize);printf("車牌號:\t\t%s\n",carinfo.szRegistrationMark);printf("停放時間:\t%s\n",carinfo.szArrivalTime);puts("是否收費(fèi):\t否");}}elseif(cCommandType=='D'){strcpy(carinfo.szDepartureTime,lpCommaLocation+1);LPTCARSTACKlpTempCarStack=NULL;InitStack(lpTempCarStack,nParkCapability);TCARINFORMATIONcarinfoOut={NULL};BOOLbIsCarFound=FALSE;while(FALSE==IsStackEmpty(lpCarStack)){Pop(lpCarStack,carinfoOut);if(0!=strcmp(carinfoOut.szRegistrationMark,carinfo.szRegistrationMark)){Push(lpTempCarStack,carinfoOut);}else{bIsCarFound=TRUE;break;}}while(FALSE==IsStackEmpty(lpTempCarStack)){TCARINFORMATIONtempcarinfo={NULL};Pop(lpTempCarStack,tempcarinfo);Push(lpCarStack,tempcarinfo);}if(FALSE==bIsCarFound){printf("車牌號為%s的車未進(jìn)入停車場.\n",carinfo.szRegistrationMark);Pause("--------------------\n按任意鍵輸入下一條信息...\n");continue;}strcpy(carinfoOut.szDepartureTime,carinfo.szDepartureTime);intnEntranceTime=ConvertTimeFormat(carinfoOut.szEntranceTime);intnDepartureTime=ConvertTimeFormat(carinfoOut.szDepartureTime);intnContinuanceMinutes=nDepartureTime-nEntranceTime;printf("計費(fèi)時段:\t%s-%s(共%d分鐘)\n",carinfoOut.szEntranceTime,carinfoOut.szDepartureTime,nContinuanceMinutes);doublerExpense=CalculateExpense(nContinuanceMinutes);printf("應(yīng)交納的費(fèi)用:\t%.1lf元\n",rExpense);if(FALSE==IsQueueEmpty(lpCarQueue)){TCARINFORMATIONtempcarinfo={NULL};DeQueue(lpCarQueue,tempcarinfo);strcpy(tempcarinfo.szEntranceTime,carinfoOut.szDepartureTime);Push(lpCarStack,tempcarinfo);puts("--------------------");printf("停放在便道的第1個車位,車牌號為%s的車已進(jìn)入停車場\n",tempcarinfo.szRegistrationMark);}}elseif(cCommandType=='E'){puts("********************");puts("姓名:肖熊\n");puts("學(xué)號:200813080245\n");puts("********************");break;}elseif(cCommandType=='O'){ClearScreen();

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論