停車場(chǎng)管理系統(tǒng)報(bào)告_第1頁(yè)
停車場(chǎng)管理系統(tǒng)報(bào)告_第2頁(yè)
停車場(chǎng)管理系統(tǒng)報(bào)告_第3頁(yè)
停車場(chǎng)管理系統(tǒng)報(bào)告_第4頁(yè)
停車場(chǎng)管理系統(tǒng)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

第第頁(yè)停車場(chǎng)管理系統(tǒng)報(bào)告試驗(yàn)二棧和隊(duì)列及其應(yīng)用

一、試驗(yàn)題目:

棧和隊(duì)列及其應(yīng)用——停車場(chǎng)管理

二、試驗(yàn)內(nèi)容:

設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順次,依次由北向南排列〔大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北段〕,假設(shè)停車廠內(nèi)已停滿n輛汽車,那么后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,那么排在便道上的第一輛車跡可開(kāi)入;停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車連需要先退出車廠為它讓路,待該車輛開(kāi)出大門(mén)外,其他車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車時(shí)需要按它停留的時(shí)間長(zhǎng)短繳納費(fèi)用。編寫(xiě)按上述要求進(jìn)行管理的模擬程序。

可以將停車場(chǎng)定義成一個(gè)順次棧s0,便道定義成一個(gè)鏈隊(duì)列q,而停車場(chǎng)中的某輛車要離開(kāi),那么在它后面進(jìn)停車場(chǎng)的車需要讓道,讓其離開(kāi),所以需要有一個(gè)臨時(shí)的順次棧s1,存放讓道的車輛。

當(dāng)有車輛進(jìn)停車場(chǎng)時(shí),假設(shè)棧s0不滿,那么徑直進(jìn)入棧s0;假設(shè)棧s0滿,那么進(jìn)入便道〔鏈隊(duì)列q〕。假設(shè)有s0中車輛*離開(kāi)時(shí),先讓在*后面進(jìn)棧的車從s0退棧并進(jìn)入棧s1中,讓*離開(kāi)并收取停車費(fèi)〔在便道上停留的時(shí)間不收費(fèi)〕,然后再把s1中全部元素退棧并重新進(jìn)入s0棧,最末,將鏈隊(duì)列q中的隊(duì)頭元素出隊(duì)并進(jìn)棧到s0中。

三、程序源代碼:

#includestdio.h

#includetime.h

#includestdlib.h

#includestring.h

#definecar_stop_ma*2

structTime//定義時(shí)間類型結(jié)構(gòu)體

{

intyear;

intmonth;

intday;

inthour;

intminiute;

intsecond;

};

structcars//定義汽車類型結(jié)構(gòu)體包括車牌號(hào)時(shí)間

{

char*car_id;

Timecar_time;

};

structsqStack//建立汽車棧的指針

{

cars*base;

cars*top;

};

intInitStack(sqStacks)//初始化汽車

{

s.base=(cars*)malloc((car_stop_ma*)*sizeof(cars));

if(!s.base)

{

return1;

}

s.top=s.base;

return0;

}

carsGet_Stack_top(sqStacks)//得到汽車棧頂元素

{

if(s.top==s.base)

{

printf(沒(méi)有車);

e*it(1);

}

else

return*(s.top-1);

}

voidPush_car(sqStacks,carse)//汽車棧插入新的汽車

{

if(s.top-s.base=car_stop_ma*)

{

printf(停車滿\n);

}

else

{

s.top-car_id=newchar[15];

strcpy(s.top-car_id,e.car_id);

s.top-car_time=e.car_time;

s.top++;

}

}

voidPop_car(sqStacks)//汽車棧的汽車離開(kāi)

{

if(s.base==s.top)

printf(沒(méi)有車);

else

s.top--;

}

typedefstructQNode//汽車隊(duì)列結(jié)構(gòu)體

{

carsdate;

structQNode*ne*t;

}QNode,*QueuePtr;

structLinkQueue//汽車隊(duì)列指針

{

QueuePtrfront;

QueuePtrrear;

};

intInitQueue(LinkQueueQ)//汽車隊(duì)列的初始化

{

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front)

{

printf(不能初始化隊(duì)列);

e*it(1);

}

Q.front-ne*t=NULL;

return0;

}

voidEnQueue(LinkQueueQ,QNodee)//汽車隊(duì)列添加新元素

{

QueuePtrp=(QueuePtr)malloc(sizeof(QNode));

p-date.car_id=newchar[15];

strcpy(p-date.car_id,e.date.car_id);

p-date.car_time=e.date.car_time;

Q.rear-ne*t=p;

Q.rear=p;

}

intDeQueue(LinkQueueQ)//刪除汽車隊(duì)頭元素

{

if(Q.front==Q.rear)

{

printf(空車,不能刪除);

e*it(1);

}

QueuePtrp;

p=Q.front-ne*t;

if(Q.front-ne*t==Q.rear)

{

Q.rear=Q.front;

}

Q.front-ne*t=p-ne*t;

free(p);

return0;

}

carsGet_Queue_top(LinkQueueQ)//得到汽車隊(duì)頭元素

{

if(Q.front==Q.rear)

{

printf(空車);

e*it(1);

}

else

return(Q.front-ne*t-date);

}

voidGet_time(intyear,intmonth,intday,inthour,intminiute,intsecond)//產(chǎn)生時(shí)間函數(shù)

{

time_tt=time(0);

chartmp[64];

strftime(tmp,sizeof(tmp),%Y%m%d%*%A%j%z,localtime(t));

sscanf(tmp,%d%d%d%d:%d:%d,year,month,day,hour,miniute,second);

}

voidmain()

{

inti,j=0;

intsum=0;

doublemoney=5;

intChoose;

charc;

charb[10];

carse,e2;

cars*p;

e.car_id=newchar[15];

QNodeE,E2;

LinkQueueQ;

sqStacks1,s2;

InitQueue(Q);

InitStack(s1);

InitStack(s2);

printf(歡迎進(jìn)入停車場(chǎng)管理系統(tǒng)\n);

printf(按1進(jìn)入車輛\n);

printf(按2離開(kāi)車輛\n);

printf(按0退出系統(tǒng)\n);

printf(*************************************************\n);

printf(請(qǐng)輸入您的選擇);

scanf(%d,Choose);

while(Choose!=0)

{

switch(Choose)

{

case1:

printf(請(qǐng)輸入你的車牌號(hào));

i=0;

while((c=getchar())!='')

{

b[i++]=c;

}

b[i]='\0';

strcpy(e.car_id,b);

Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);

if(sum=car_stop_ma*)

{

E.ne*t=NULL;

E.date=e;

printf(停車場(chǎng)已停滿。請(qǐng)您在便道等候。\n);

EnQueue(Q,E);

}

else

{

printf(您在%d年%d月%d日%d:%d:%d時(shí)刻進(jìn)入\n,e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);//測(cè)試結(jié)果

Push_car(s1,e);

sum++;

}

printf(***************************************************\n);

printf(輸入你的選擇);

scanf(%d,Choose);

break;

case2:

printf(請(qǐng)輸入出停車場(chǎng)的車牌號(hào));

i=0;

while((c=getchar())!='')

{

b[i++]=c;

}

b[i]='\0';

strcpy(e.car_id,b);

Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);

p=s1.top;

j=0;

while(jsum(strcmp((p-1)-car_id,e.car_id))!=0)

{

j++;

p--;

}

if(jsum)

{

i=0;

money=((e.car_time.second-(p-1)-car_time.second)+(e.car_time.miniute-(p-1)-car_time.miniute)*60);

printf(車牌號(hào)為%s的車離開(kāi),繳納費(fèi)用%f元\n,b,money);

while(ij)

{

e2=Get_Stack_top(s1);

Pop_car(s1);

Push_car(s2,e2);i++;

}

Pop_car(s1);

i=0;

while(ij)

{

e2=Get_Stack_top(s2);

Pop_car(s2);

Push_car(s1,e2);i++;

}

sum--;//汽車總是要減削了

if(sumcar_stop_ma*(Q.front!=Q.rear))

{

E2.date=Get_Queue_top(Q);

strcpy(e.car_id,E2.date.car_id);

Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);

DeQueue(Q);

Push_car(s1,e);

printf(您%s在%d年%d月%d日%d:%d:%d時(shí)刻進(jìn)入\n,e.car_id,e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);//測(cè)試結(jié)果

sum++;

}

}

else

printf(此輛車不存在\n);

printf(***************************************************\n);

printf(輸入你的選擇);

scanf(%d,Choose);

break;

case0:

printf(您要離開(kāi)此系統(tǒng));break;

default:

{

printf(***************************************************\n);

printf(輸入錯(cuò)誤重新輸入);

}

scanf(%d,Choose);break;

}

}

}

四、測(cè)試結(jié)果:

五、小結(jié)〔包括收獲、心得體會(huì)、存在的問(wèn)題及解決問(wèn)題的方法、建議等〕

注:內(nèi)容一律運(yùn)用宋體五號(hào)字,單倍行間距

1〕定義汽車類型的結(jié)構(gòu)體,包括汽車車牌號(hào)為char*類型,進(jìn)入停車場(chǎng)的時(shí)間類型又是時(shí)間類型的結(jié)構(gòu)體。用函數(shù)voidGet_time(intyear,intmonth,intday,inthour,intminiute,intsecond)//產(chǎn)生時(shí)間函數(shù),返回需要的時(shí)間。

2〕初始化棧時(shí),s.top=s.base;將兩者的順次寫(xiě)反了,造成建立的的失敗;

3〕定義結(jié)構(gòu)體時(shí),兩個(gè)結(jié)構(gòu)體類型的變量可以徑直賦值,假如結(jié)構(gòu)體中不包含數(shù)組類型的變量,假如結(jié)構(gòu)體中有指針也可以徑直賦值。但是假如其中一個(gè)指針發(fā)生轉(zhuǎn)變,那么另一個(gè)也要轉(zhuǎn)變

4〕用全局變量sum掌握停車場(chǎng)中車的數(shù)量。假如車進(jìn)入sum++,假如車要離開(kāi)時(shí)那么sum--;

5〕刪除隊(duì)列中的元素時(shí)

if(Q.front-ne*t==Q.rear)

{

Q.rear=Q.front;

}

Q.front-ne*t=p-ne*t;兩句話不能顛倒

6〕假如有汽車要離開(kāi)時(shí),要判斷便道是否有車,假如有,那么要進(jìn)入停車場(chǎng),并記錄進(jìn)入時(shí)間;

7〕汽車進(jìn)入停車場(chǎng)時(shí),

voidPush_car(sqStacks,carse)//汽車棧插入新的汽車

{

if(s.top-s.base=car_stop_ma*)

{

printf(停車滿\n);

}

else

{

s.top-car_id=newchar[15];

strcpy(s.top-car_id,e.car_id);

s.top-car_time=e.car_time;

s.top++;

}

}

要給汽車的車牌號(hào)記錄,開(kāi)拓空間來(lái)放字符串。

試驗(yàn)二棧和隊(duì)列及其應(yīng)用

一、試驗(yàn)題目:

棧和隊(duì)列及其應(yīng)用——停車場(chǎng)管理

二、試驗(yàn)內(nèi)容:

設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順次,依次由北向南排列〔大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北段〕,假設(shè)停車廠內(nèi)已停滿n輛汽車,那么后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,那么排在便道上的第一輛車跡可開(kāi)入;停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論