2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告停車(chē)場(chǎng)問(wèn)題_第1頁(yè)
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告停車(chē)場(chǎng)問(wèn)題_第2頁(yè)
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告停車(chē)場(chǎng)問(wèn)題_第3頁(yè)
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告停車(chē)場(chǎng)問(wèn)題_第4頁(yè)
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告停車(chē)場(chǎng)問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《計(jì)算機(jī)軟件技術(shù)基礎(chǔ)》

實(shí)驗(yàn)報(bào)告I—數(shù)據(jù)結(jié)構(gòu)

實(shí)驗(yàn)二:停車(chē)場(chǎng)管理問(wèn)題

一、問(wèn)題描述

1.實(shí)驗(yàn)題目:

設(shè)停車(chē)場(chǎng)是一個(gè)可停放n輛汽車(chē)的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車(chē)進(jìn)出。汽車(chē)

在停車(chē)場(chǎng)內(nèi)按車(chē)輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端,最先到達(dá)的第一

輛車(chē)停放在車(chē)場(chǎng)的最北端)。若停車(chē)場(chǎng)內(nèi)已經(jīng)停滿(mǎn)n輛車(chē),那么后來(lái)的車(chē)只能在門(mén)外的便道

上等候。一旦有車(chē)開(kāi)走,則排在便道上的第一輛車(chē)即可開(kāi)入。當(dāng)停車(chē)場(chǎng)內(nèi)某輛車(chē)要離開(kāi)時(shí),

在它之后進(jìn)入的車(chē)輛必須先退出車(chē)場(chǎng)為它讓路,待該輛車(chē)開(kāi)出大門(mén)外,其他車(chē)輛再按原順序進(jìn)

入車(chē)場(chǎng)。每輛停放在車(chē)場(chǎng)的車(chē)在它離開(kāi)停車(chē)場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短繳納費(fèi)用。試為停

車(chē)場(chǎng)編制按上述規(guī)定進(jìn)行管理的模擬程序。

2.基本規(guī)定:

團(tuán)以棧模擬停車(chē)場(chǎng),以隊(duì)列模擬車(chē)場(chǎng)外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行模擬管理。

每一組輸入數(shù)據(jù)涉及三個(gè)數(shù)據(jù)項(xiàng):汽車(chē)的“到達(dá)"('A'表達(dá))或“拜別"('D'表達(dá))信息、

汽車(chē)標(biāo)記(牌照號(hào))以及到達(dá)或拜別的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若

是車(chē)輛到達(dá),則輸出汽車(chē)在停車(chē)場(chǎng)內(nèi)或者便道上的停車(chē)位置;若是車(chē)輛拜別,則輸出汽車(chē)在停

車(chē)場(chǎng)停留的時(shí)間和應(yīng)繳納的費(fèi)用(便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈

表結(jié)構(gòu)實(shí)現(xiàn)。

3.測(cè)試數(shù)據(jù):

設(shè)n=2,輸入數(shù)據(jù)為:('A',1,5),('A',2,10),('D',1,15),('A',3,2

0),('A',4,25),('A',5,30),('D',2,35),('D',。40),('E',0,0)-每一組輸

入數(shù)據(jù)涉及三個(gè)數(shù)據(jù)項(xiàng):汽車(chē)“到達(dá)"或''拜別”信息、汽車(chē)牌照號(hào)碼及到達(dá)或拜別的時(shí)刻,

其中,'A'表達(dá)成達(dá);'D'表達(dá)拜別,'E'表達(dá)輸入結(jié)束。其中:('A',1,5)表達(dá)1號(hào)

牌照車(chē)在5這個(gè)時(shí)刻到達(dá),而(’D',1,15)表達(dá)1號(hào)牌照車(chē)在15這個(gè)時(shí)刻拜別。

二、需求分析

1.程序所能達(dá)成的基本也許:

本程序用來(lái)模擬一個(gè)可停放n輛車(chē)的停車(chē)場(chǎng)的停車(chē)管理問(wèn)題。用棧和隊(duì)列模擬停車(chē)

場(chǎng)及場(chǎng)外通道,輸入車(chē)輛狀態(tài)(到達(dá)或者離開(kāi)),車(chē)牌號(hào)和時(shí)間,就可顯示停車(chē)位置或者該車(chē)

在停車(chē)場(chǎng)停留時(shí)間及應(yīng)繳費(fèi)用。

2.輸入的形式及輸入值范圍:

程序接受5個(gè)命令,分別是:到達(dá)('A',車(chē)牌號(hào),時(shí)間);拜別('D',車(chē)牌號(hào),時(shí)間);

停車(chē)場(chǎng)(卬,,0,0)顯示停車(chē)場(chǎng)的車(chē)數(shù);候車(chē)場(chǎng)LW',0,0)顯示候車(chē)場(chǎng)的車(chē)數(shù);退出('E',

0,0)退出程序。

3.輸出的形式:

對(duì)于車(chē)輛到達(dá),要輸出汽車(chē)在停車(chē)場(chǎng)內(nèi)或者便道上的停車(chē)位置;對(duì)于車(chē)輛拜別,則輸

出汽車(chē)在停車(chē)場(chǎng)停留的時(shí)間和應(yīng)繳納的費(fèi)用(便道上不收費(fèi))。用戶(hù)輸入完畢后,程序自動(dòng)運(yùn)

營(yíng)輸出運(yùn)營(yíng)結(jié)果。

4.測(cè)試數(shù)據(jù)規(guī)定:

設(shè)n=2,輸入數(shù)據(jù)為:5),('A',2,10),('D',1,15),('A',3,20),('A',4,

25),('A',5,30),('D',2,35),('D',4,40),('E',0,0),每一組輸入數(shù)據(jù)涉及

三個(gè)數(shù)據(jù)項(xiàng):汽車(chē)“到達(dá)”或“拜別”信息、汽車(chē)牌照號(hào)碼及到達(dá)或拜別的時(shí)刻,其中,‘A'

表達(dá)成達(dá);'D'表達(dá)拜別,'E'表達(dá)輸入結(jié)束。其中:('A',1,5)表達(dá)1號(hào)牌照車(chē)在5這

個(gè)時(shí)刻到達(dá),而('D',1,15)表達(dá)1號(hào)牌照車(chē)在15這個(gè)時(shí)刻拜別。

三、概要設(shè)計(jì)

為了實(shí)現(xiàn)上述功能,該程序以棧模擬停車(chē)場(chǎng)以及臨時(shí)停放為給要拜別的汽車(chē)讓路而從

停車(chē)場(chǎng)退出來(lái)的汽車(chē)的場(chǎng)地,以隊(duì)列模擬車(chē)場(chǎng)外的便道,因此需要棧和隊(duì)列這兩個(gè)抽象數(shù)據(jù)

類(lèi)型。

1.棧抽象數(shù)據(jù)類(lèi)型定義:

ADTSqStack{

數(shù)據(jù)對(duì)象:D={ai,bi,ci,di|ai£int,bi£int,ci£int,diG

char),

i=1,2...,n,n20}:

數(shù)據(jù)關(guān)系:R={(ai,bi,dijai,bi,di£D,ai,bi,diestructcar};

基本操作:

Car_enter(carnum,cartime)〃將到達(dá)車(chē)輛a的信息入棧s或者

入隊(duì)q

Car_Leave(carnum,cartime);〃將待離開(kāi)車(chē)輛d出棧s,并將q中相應(yīng)

車(chē)輛入棧并進(jìn)行相關(guān)的操作

Resu1t(charcarmove,intcarnum,intcartime)〃根據(jù)輸入

信息完畢車(chē)輛的離開(kāi)或者到達(dá)

}ADTSqStack

ADT的C語(yǔ)言形式說(shuō)明:

typedefstruct//構(gòu)造一個(gè)順序棧

structNode1home[MaxSize];

intstacktop;〃棧頂?shù)闹羔?/p>

}Stack;

2.隊(duì)列抽象數(shù)據(jù)類(lèi)型定義

ADTLinkQueue{

數(shù)據(jù)對(duì)象:D={ai,bi,ciIaieQnode*,bi£Qnode*,ciCint),

i=1,2...,n,n^O);

數(shù)據(jù)關(guān)系:R=0

基本操作:

Car_enIer(carnum,cartime)〃將到達(dá)車(chē)輛a的信息入棧s或者入隊(duì)

q

Car_Leave(carnum,cartime);〃將待離開(kāi)車(chē)輛d出棧s,并將

q中相應(yīng)車(chē)輛入棧并進(jìn)行相關(guān)的操作

Result(charearmove,intcarnum,intca「time)〃根據(jù)輸入信息

完畢車(chē)輛的離開(kāi)或者到達(dá)

}ADTLinkQueue

ADT的C語(yǔ)言形式說(shuō)明:

typedefstruct//構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列

0QNode*front,*rear;

}Queue;

voidCar_enter(intcamum,intcartime)//到達(dá)車(chē)輛的信息入?;蛘呷腙?duì)

voidCar_Leave(intcarnum,intcartime)〃車(chē)離開(kāi)

intResult(charcarmove,intcarnumjntcartime)〃根據(jù)輸入信息完畢車(chē)輛的

離開(kāi)或者達(dá)成

3.主程序流程及其模塊調(diào)用關(guān)系:

1)主程序流程:

主函數(shù)提醒用戶(hù)輸入指令:到達(dá)(‘AL車(chē)牌號(hào),時(shí)間);拜別('D',車(chē)牌號(hào),時(shí)間);

停車(chē)場(chǎng)'P'顯示停車(chē)場(chǎng)的車(chē)數(shù);候車(chē)場(chǎng)'W'顯示候車(chē)場(chǎng)的車(chē)數(shù);退出'E'退出程序。

調(diào)用intResult(charcarmove,intcarnum,intcartime)根據(jù)輸入信息完畢車(chē)輛

的離開(kāi)或者達(dá)成。

若輸入A則調(diào)用Car_enter(intcarnum,intcartime),創(chuàng)建順序棧CarS

和鏈?zhǔn)疥?duì)列CarQ,根據(jù)棧是否滿(mǎn)決定輸入的信息入棧還是入隊(duì)列。若棧未滿(mǎn),輸入的車(chē)輛

信息入棧,若已滿(mǎn),入隊(duì)列。

若輸入D則調(diào)用Car_Leave(intearnum,intcartime):創(chuàng)建一個(gè)臨時(shí)棧存

放退出讓路的車(chē),若在車(chē)庫(kù)中找到相應(yīng)的車(chē),車(chē)庫(kù)中該車(chē)后面的車(chē)輛信息進(jìn)入臨時(shí)棧CarS2,

該車(chē)出棧,顯示車(chē)牌號(hào),此時(shí)時(shí)間,停留時(shí)間,應(yīng)繳費(fèi)用。臨時(shí)棧中的車(chē)的信息再回到CarS中。

此時(shí)若隊(duì)列CarQ不為空則將隊(duì)列中車(chē)輛信息放入棧CarS中。若在車(chē)庫(kù)中找不到相應(yīng)的

四、具體設(shè)計(jì)

1.元素類(lèi)型、結(jié)點(diǎn)類(lèi)型和結(jié)點(diǎn)指針類(lèi)型:

typedefstructNode1//構(gòu)建——個(gè)結(jié)構(gòu)體

I

intcarnum;

inttime;

}Node1;

typedefstructNode2

!

ointcarnum;

inttime;

structNode2*next;

}Node2;

2、創(chuàng)建順序棧

typedefstruct//構(gòu)造一個(gè)順序棧

(

structNodelhome[MaxSize];

intstacktop;//棧頂?shù)闹羔?/p>

}Stack;

3、創(chuàng)建鏈?zhǔn)疥?duì)列

typedefstruct〃構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列

(

團(tuán)Node2*front,*rear;

}Queue;

4.車(chē)輛到達(dá):

voidCar_enter(intcamum,intcartime)//到達(dá)車(chē)輛的信息入?;蛘呷腙?duì)

(

0if(CarS.stacktop<MaxSize)〃假如棧沒(méi)有滿(mǎn)的時(shí)候

(

[3CarS.home[CarS.stacktop].carnum=carnum;//到達(dá)車(chē)輛信息放入順序棧

CarS.home[CarS.stacktop].time=cartime;

PCar++;〃車(chē)庫(kù)里的車(chē)數(shù)量+1

printf(“%d號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)!進(jìn)入時(shí)刻:%d位置:%d\n”,Ca

rS.home[CarS.stacktop].carnum,CarS.home[CarS.stacktop].time,PCar);

0CarS.stacktoP++;〃棧頂指針加一

e1se//若棧滿(mǎn)

CarQ.front->carnum=carnum;

CarQ.front->time=cartime;//到達(dá)車(chē)輛信息加入到隊(duì)列中

WCar++;//候車(chē)場(chǎng)車(chē)輛數(shù)+1

printf(”%d號(hào)車(chē)進(jìn)入候車(chē)場(chǎng)!到達(dá)時(shí)刻:%d位置:%d\n",CarQ.front->ca

rnum=carnum,CarQ.front->time=cartime,WCar);

CarQ.front->next=(Node2*)maIIoc(sizeof(Node2));〃分派空間

CarQ,front=CarQ.front->next;//更改隊(duì)列指針

)

}

5,車(chē)輛離開(kāi)

voidCar_Leave(intcarnum,intcartime)//車(chē)離開(kāi)

(

團(tuán)StackCarS2;〃構(gòu)造一個(gè)棧臨時(shí)存放為了讓位退出來(lái)的車(chē)

inti;

intfindcar=—1;

Node2*p,*f;

CarS2.stacktop=0;〃設(shè)臨時(shí)棧CarS2為空

for(i=0;i<CarS.stacktop;i++)〃通過(guò)循環(huán)對(duì)比查找要離開(kāi)的車(chē)

if(carnum==CarS.home[i].carnum)

findcar二i;〃假如要尋找的車(chē)在車(chē)庫(kù)里則讓findcar等于車(chē)的號(hào)碼

break;

0)

)

if(findcar!=-1)〃假如在車(chē)庫(kù)里找到這輛車(chē)

(

團(tuán)for(;-CarS.stacktop>findcar;CarS2.stacktop++)〃將車(chē)庫(kù)里面在i車(chē)外面的車(chē)移

動(dòng)到臨時(shí)棧CarS2中

回(

CarS2.home[CarS2.stacktop].carnum=CarS.home[CarS.stacktop].carn

um;

CarS2.home[CarS2.stacktop].time=CarS.home[CarS.stackto

p].time;

}

printf(”%d號(hào)車(chē)離開(kāi)停車(chē)場(chǎng)!離開(kāi)時(shí)刻:%d,停留時(shí)長(zhǎng)(%①\P,Car

S.home[CarS.stacktop].carnum,cartime,cartime-CarS.home[CarS.stacktop].time);

PCar一一;〃車(chē)庫(kù)內(nèi)車(chē)輛一1

printf("應(yīng)付停車(chē)費(fèi)%d\n",(cartime-CarS.home[CarS.stacktop].tim

e)*5);

for(i=CarS2.stacktop—1;i>=0;i--)〃把臨時(shí)棧里面的車(chē)移回去

回(

CarS.home[CarS.stacktop].carnum=CarS2.home[i].carnum;

CarS.home[CarS.stacktop].time=CarS2.home[i].time;

CarS.stacktop++;

CarS2.stacktop-;

團(tuán)}

0

if(CarQ.front!=CarQ.rear)//假如候車(chē)場(chǎng)有車(chē),將它移進(jìn)車(chē)庫(kù)

回(

0CarS.home[CarS.stacktop].carnum=CarQ.rear->carnum;//將隊(duì)列中的

車(chē)牌號(hào)信息放入棧

00CarS.home[CarS.stacktop].time=cartime;//將此時(shí)的時(shí)刻記錄入棧CarS,保

證計(jì)算費(fèi)用是從車(chē)輛從候車(chē)場(chǎng)進(jìn)入車(chē)庫(kù)后才開(kāi)始算

CarS.stacktop++;

00PCar++;//車(chē)庫(kù)車(chē)輛數(shù)+1

00WCa「-一;//候車(chē)場(chǎng)車(chē)輛數(shù)一1

p=CarQ.rear;

CarQ.rear=CarQ.rear->next;

free(p);

0}

)

else//假如車(chē)庫(kù)中找不到此車(chē),再在候車(chē)場(chǎng)找

{

0p=CarQ.rear;

if(p!=CarQ.front&&p->carnum!=carnum)〃候車(chē)場(chǎng)隊(duì)列不為空

(

0f=p—>next;

while(f!=CarQ.front&&f->carnum!=carnum)

(

00p=f;

f=f->next;

)

0

團(tuán)if(f->carnum==carnum)//假如尋找的車(chē)在便道上,出隊(duì)列

{

findcar=l;

p->next=f->next;

printf(H%d號(hào)車(chē)離開(kāi)候車(chē)場(chǎng)!離開(kāi)時(shí)間:%d,停留時(shí)長(zhǎng)(%可\n",f一“

arnum,cartime,cartime-f—>time);

WCar-;

printf("應(yīng)付停車(chē)費(fèi):%d\n",(cartime—f->time)*0);

free(f);

)

)

團(tuán)if(p—>carnum==carnum)〃要離開(kāi)的車(chē)在隊(duì)尾,直接出隊(duì)

(

團(tuán)團(tuán)findcar=1;

CarQ.rear=CarQ.rear->next;

printf("%d號(hào)車(chē)離開(kāi)候車(chē)場(chǎng)!離開(kāi)時(shí)間:%d,停留時(shí)長(zhǎng)(%d))!\n",P->ca

mum,cartime,cartime-p->time);

WCar-;

printf("應(yīng)付停車(chē)費(fèi):%d\n”,(cartime-p->time)*0);

free(p);

0}

)

if(findear==-l)

printf("%d號(hào)車(chē)不在停車(chē)場(chǎng)中!\n",carnum);

)

6.主函數(shù)

main()

{

0printf("實(shí)驗(yàn)名稱(chēng):停車(chē)場(chǎng)管理問(wèn)題\n");

printf("學(xué)號(hào):\n");

printf("姓名:xx\n");

,,

Pir*in4i-n—.————-—---—-_-------————-—--------------------------------------------------------------------

======\n");

time_trawtimel;

structtm*timeinfo1;

time(&rawtime1);

timeinfol=1ocaltime(&rawtimel);〃時(shí)間函數(shù);

團(tuán)printf("程序運(yùn)營(yíng)開(kāi)始,當(dāng)前日期和時(shí)間:%su,asctime(timeinfol));

Qintgo=lzcarnum,cartime,MM;

charcarmove;

CarS.stacktop=0;

CarQ.rear=CarQ.front=(Node2*)maHoc(sizeof(Node2));

while(go)

printf('An車(chē)輛到達(dá)請(qǐng)輸入A;\n車(chē)輛離開(kāi)請(qǐng)輸入D;\n顯示停車(chē)場(chǎng)內(nèi)車(chē)數(shù)請(qǐng)輸

入P;\n顯示候車(chē)場(chǎng)車(chē)數(shù)請(qǐng)輸入W;\n退出程序請(qǐng)輸入E:\n");

00printf(”\n請(qǐng)輸入信息:");

0carmove=getchar();

printf("\n");

switch(carmove)

case'A,:

團(tuán)團(tuán)團(tuán)

00printf(u%c\n車(chē)牌號(hào):\t",carmove);

scanf(n%d”,&carnum);

printf("時(shí)間:\t");

Wscanf("%d",&cartime);

MM=Resu1t(carmove,carnum,cartime);

回0if(!MM)go=0;

團(tuán)break;

回)

case'D,:

團(tuán)國(guó){

國(guó)printf(H%c\n車(chē)牌號(hào):\t",carmove);

0團(tuán)scanf(”%cT,&carnum);

printf("現(xiàn)在時(shí)刻:\t“);

團(tuán)團(tuán)scanf("%d“,&cartime);

MM=Resu1t(carmove,carnum,cartime);

0if(!MM)go=0;

團(tuán)團(tuán)豳break;

0a}

case'W':

Wprintf("正在外通道等待的車(chē)數(shù)量是:%d\n",WCar);

0break;

case'P/:

00Printf(”車(chē)庫(kù)內(nèi)車(chē)的數(shù)量是:%d\n"ZPCar);

團(tuán)0break;

case?」|1111次”退出!\11");

0time_trawtime2;

structtm*timeinfo2;

time(&rawtime2);

timeinfo2=localtime(&rawtime2);

printf("程序運(yùn)營(yíng)結(jié)束,當(dāng)前日期和時(shí)間:%s,asctime(timein

fo2));

回團(tuán)return0;

回}

getchar();

)

五、調(diào)試分析

此程序是分模塊設(shè)計(jì),根據(jù)輸入的指令調(diào)用“到達(dá)”和“離開(kāi)”模塊,使車(chē)的信息入棧入

隊(duì),或出棧出隊(duì)。每次運(yùn)營(yíng)后又返回主菜單。程序整體結(jié)構(gòu)清楚,操作方便。

六、使用說(shuō)明

用戶(hù)根據(jù)提醒輸入指令:到達(dá)輸入A,離開(kāi)輸入D,顯示車(chē)庫(kù)車(chē)輛數(shù)輸入P,顯示

候車(chē)場(chǎng)車(chē)輛數(shù)輸入W,退出程序輸入E。

輸入A后,根據(jù)提醒輸入車(chē)牌號(hào)i和此時(shí)時(shí)間,將顯示“第i號(hào)車(chē)進(jìn)入車(chē)庫(kù)!

時(shí)間:位置:"或“第i號(hào)車(chē)進(jìn)入候車(chē)場(chǎng)!時(shí)間:位置:";

輸入D后,根據(jù)提醒輸入車(chē)牌號(hào)i和此時(shí)時(shí)間,將顯示“第i號(hào)車(chē)離開(kāi)車(chē)庫(kù)!

時(shí)間:停留時(shí)間:應(yīng)繳費(fèi)用:"?;颉暗趇號(hào)車(chē)離開(kāi)候車(chē)場(chǎng)!時(shí)間:停留時(shí)

間:應(yīng)繳費(fèi)用:”;

輸入W后顯示“正在外通道等待的車(chē)數(shù)量是:";

輸入P后顯示“車(chē)庫(kù)內(nèi)車(chē)的數(shù)量是“;

輸入E后退出程序。

七、調(diào)試結(jié)果

設(shè)車(chē)庫(kù)最大容量為2.輸入一組數(shù)據(jù)進(jìn)行測(cè)試:('A',1,5),('A',2,1

0),('D',1,15),('A',3,20),('A',4,25),('A',5,30),('D

2,35),('D',4,40),('E',0,0)。

初始界面為:

■"C:\Users\Administrator\Desktop\l\Debug\l.exe"[三—回運(yùn)

試驗(yàn)名稱(chēng):停車(chē)場(chǎng)管理問(wèn)題

學(xué)號(hào):031350103

性名:佟欣

SatNou0713:30:222015

達(dá)

到5^

請(qǐng)A:

開(kāi)

示D;

場(chǎng)

請(qǐng)P

車(chē)

場(chǎng)

車(chē)

強(qiáng)

贊U;

請(qǐng)

E:

青輸入信息:

'■?C:\Users\Administrator\Desktop\l\Debug\l.exe"IU■回漢

字號(hào):031350103

姓名:佟欣

程序運(yùn)行開(kāi)始,當(dāng)前日期和時(shí)間:SatNou0713:33:292015

篇到

4達(dá)

請(qǐng)A;

^開(kāi)

1人

示D;

-鬻

場(chǎng)

請(qǐng)

顯mP

車(chē)

場(chǎng)

車(chē)

顯n

請(qǐng)

t輸W;

E:

睛輸入信息

庫(kù)牌號(hào):1

,時(shí)間:5

1號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)?進(jìn)入時(shí)刻:5位置"

請(qǐng)

p到誨

A;

請(qǐng)

F離刑

示D;

場(chǎng)

請(qǐng)

顯jP

a車(chē)

場(chǎng)

蠶b

請(qǐng)

退

?輸W;

E:

到達(dá)車(chē)輛超過(guò)車(chē)庫(kù)容量時(shí):

?"C:\Users\Administrator\Desktop\l\Debug\l.exe"I0回漢

車(chē)牌號(hào):3

時(shí)間:20

3號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)?進(jìn)入時(shí)刻:20位置:2

達(dá)請(qǐng)

4人

4

開(kāi)

人A;

W請(qǐng)

示D;

場(chǎng)

請(qǐng)

顯iO

車(chē)P

j

場(chǎng)

顯H^

杳h

費(fèi)

退

Wt請(qǐng)W;

E:

請(qǐng)輸入信息:A

車(chē)牌號(hào):4

時(shí)間:25

性號(hào)車(chē)進(jìn)入候車(chē)場(chǎng)?到達(dá)時(shí)刻:25位置:1

達(dá)請(qǐng)

?到

A;

請(qǐng)

開(kāi)

人D;

請(qǐng)

場(chǎng)

顯mP

車(chē)

n場(chǎng)車(chē)

贊W;

t請(qǐng)輸

退E:

it

I"CAUsersXAdministratorXDesktopXlXDebugXl.exe"

車(chē)牌號(hào):2

時(shí)間:10

2號(hào)u車(chē)進(jìn)入停車(chē)場(chǎng),進(jìn)入時(shí)刻:1。位置:2

S'青

刑青A;

F示

D;

場(chǎng)

em車(chē)

一i請(qǐng)?bào)魅?/p>

場(chǎng)

a-孝P;

wH戶(hù)

請(qǐng)

a-E輸輸入w;

退

請(qǐng)輸入信息:D

車(chē)牌號(hào):1

現(xiàn)在時(shí)刻:15

1號(hào)車(chē)高比亭車(chē)場(chǎng)?離開(kāi)時(shí)刻:15,停留時(shí)長(zhǎng)(10)

應(yīng)付停車(chē)費(fèi)50

達(dá)請(qǐng)

4入

4的

<請(qǐng)

顯示

車(chē)

e場(chǎng)

瞽解入

車(chē)jjP;

場(chǎng)

意w

田輸入H;

退

請(qǐng)

漕揄人仁.息

輸入P

?eC:\Users\Administrator\Desktop\l\Debug\l.exe"I三回.漢I

場(chǎng)

內(nèi)車(chē)

顯示?P

場(chǎng)車(chē)

顯W

退

請(qǐng)輸

E:

請(qǐng)輸入信息:P

車(chē)庫(kù)內(nèi)車(chē)的數(shù)量是:2

?|主A

.RAA;

崗IHD;

E1^瞽

場(chǎng)

顯w

不I

場(chǎng)道裕入

車(chē)P;

14^

主榆入W;

退

輸A

HE:

輸入信息:W

正在外通道等待的車(chē)數(shù)量是:0

青鬻

至A;

示D;

tn瞽

車(chē)

一遒制入

簾P;

場(chǎng)

退

畬輸入W;

H-輸

eoE:

■'C:\Users\Adminktrator\Desktop\l\Debug\l.exe.iCDIHJ0

請(qǐng)輸入信息:D

車(chē)牌號(hào):4

40

-1亭車(chē)場(chǎng)?離開(kāi)時(shí)刻:40,停留時(shí)長(zhǎng)(5)

應(yīng)付停車(chē)添25

達(dá)請(qǐng)

鬻^

請(qǐng)

開(kāi)^A;

O場(chǎng)D;

£馨

車(chē)請(qǐng)策入

H場(chǎng)舉P;

國(guó)

退

臂輸入W;

t請(qǐng)

E:

請(qǐng)輸入信息:P

車(chē)庫(kù)內(nèi)車(chē)的數(shù)量是:2

達(dá)請(qǐng)

4人

有fi;

請(qǐng)

開(kāi)

示D;

請(qǐng)

W場(chǎng)P

車(chē)

顯l

場(chǎng)

市H

退

請(qǐng)

i輸V;

:E:

請(qǐng)輸

Parking_TX.exe

Parkmg_TXexe遇到問(wèn)題需要關(guān)閉.我們對(duì)此引起的不便表

示抱歉。

如果您正處于進(jìn)程當(dāng)中,信息有可能丟失。

關(guān)于此錯(cuò)誤的其他信息,請(qǐng)單擊小處.

調(diào)試⑤|關(guān)閉?|

??C:\Users\Administrator\Desktop\l\Debug\l.exe"

請(qǐng)輸入信息:P

車(chē)庫(kù)內(nèi)車(chē)的數(shù)量是:2

請(qǐng)W

fi;

請(qǐng)

硒|ED;

g瞽

j場(chǎng)

號(hào)

車(chē)

車(chē)

場(chǎng)

請(qǐng)

性E:

請(qǐng)輸入信息川

正在外通道等待的車(chē)數(shù)量是:0

達(dá)

、3W

IE

月A;

開(kāi)T

、

-13E人D;

E入

i44請(qǐng)

-IP

jW%-車(chē)

車(chē)

/「

hJ9勿

費(fèi)

主W;

、3

W:IEA

TE:

請(qǐng)輸入仁息:E

退出?

程序運(yùn)行結(jié)束,當(dāng)前日期和時(shí)間:SatNou0713:35:412015

Pressanykeytocontinue

經(jīng)檢查程序,將stack*CarS;Queue*CarQ;這兩個(gè)指針型變量改成StackCarS;//

用來(lái)表達(dá)車(chē)庫(kù)的棧QueueCarQ;//用來(lái)表達(dá)候車(chē)場(chǎng)的隊(duì)列,再次運(yùn)營(yíng)發(fā)現(xiàn)可以成功運(yùn)營(yíng)。

2.當(dāng)輸入上述數(shù)據(jù)后輸入P和W后顯示的車(chē)輛數(shù)不對(duì),當(dāng)車(chē)庫(kù)內(nèi)車(chē)輛離開(kāi)時(shí),外通道的

車(chē)進(jìn)入車(chē)庫(kù),但PCar和WCar沒(méi)有對(duì)的跟隨變化,如圖

03C:\DocuBerrtsandSettings\hp\桌面\Debug\l.exe.-|g|x|

清輸入信息:P-

請(qǐng)入

車(chē)

翦到

達(dá)

車(chē)

請(qǐng)A;

開(kāi)

示D;

數(shù)

車(chē)

場(chǎng)

車(chē)

數(shù)

場(chǎng)

請(qǐng)

退

請(qǐng)

E:

仲輸入信息:“

正在外通道等待的車(chē)數(shù)量是:2

車(chē)

請(qǐng)

達(dá)

人A;

車(chē)

請(qǐng)

開(kāi)D;

數(shù)

車(chē)

場(chǎng)

請(qǐng)曼

示P

車(chē)

數(shù)

請(qǐng)

場(chǎng)

退

請(qǐng)W;

E:

性輸入信息:E

旭,出[

摩序運(yùn)行結(jié)總當(dāng)前日期和時(shí)間:F?iNou0621:02:502015

Pressanykeytocontinue

CarS.home[CarS.stacktop].time=cartime;//將此時(shí)的時(shí)刻記錄入棧CarS,

保證計(jì)算費(fèi)用是從車(chē)輛從候車(chē)場(chǎng)進(jìn)入車(chē)庫(kù)后才開(kāi)始算

CarS.stacktop++;

p=CarQ.rear;

CarQ.rear=CarQ.rear->next;

free(p);

這段程序中少了PCar++;WCar--;,加上后再次運(yùn)營(yíng),程序?qū)Φ摹?/p>

3.計(jì)算費(fèi)用時(shí)發(fā)現(xiàn)錯(cuò)誤,在候車(chē)廳時(shí)間也被計(jì)入停車(chē)費(fèi)。經(jīng)檢查程序,將

CarS.home[CarS.stacktop].time=CarQ.rear->time;

改成CarS.home[CarS.stacktop[time=cartime;使其計(jì)費(fèi)時(shí)間從進(jìn)入車(chē)庫(kù)開(kāi)始

而不是從達(dá)成候車(chē)場(chǎng)開(kāi)始。再次運(yùn)營(yíng)發(fā)現(xiàn)結(jié)果對(duì)的。

九、實(shí)驗(yàn)收貨和感想

這是第一次運(yùn)用棧和隊(duì)列的相關(guān)知識(shí)編寫(xiě)程序,開(kāi)始看到這個(gè)題目感覺(jué)挑戰(zhàn)很大,從未嘗

試過(guò)這么復(fù)雜的一個(gè)系統(tǒng)。停車(chē)場(chǎng)問(wèn)題相較與約瑟夫斯問(wèn)題要復(fù)雜得多,分了多個(gè)模塊。起

初編寫(xiě)時(shí)漏洞很多,好在當(dāng)框架出來(lái)后各個(gè)漏洞都可以被填補(bǔ)。比如程序剛運(yùn)營(yíng)成功時(shí),發(fā)

現(xiàn)不能顯示位置,車(chē)庫(kù)車(chē)輛數(shù)和候車(chē)場(chǎng)車(chē)輛數(shù)不對(duì)的,計(jì)費(fèi)不對(duì)的等很多漏洞,但這些細(xì)節(jié)

的小問(wèn)題都比較容易排查修改,最終終于做出了符合規(guī)定的停車(chē)場(chǎng)管理系統(tǒng)。當(dāng)完畢后,我對(duì)

棧和隊(duì)列的相關(guān)算法的理解也更加清楚深刻了。這個(gè)程序中尚有一些靈活可變的地方,用宏

定義定義了車(chē)庫(kù)容量和費(fèi)用單價(jià),使具體數(shù)字可以較為靈活的改變,增長(zhǎng)了這個(gè)程序的使用

價(jià)值。計(jì)算機(jī)實(shí)踐課程給了我動(dòng)手操作的機(jī)會(huì),使我將理論和實(shí)際操作結(jié)合起來(lái),更好地理

解算法,更快地學(xué)會(huì)編程。每次編程都感覺(jué)收獲非常多。練習(xí)的越多,對(duì)算法語(yǔ)句越是純熟,

越能有深刻的理解,不僅幫助我更好的學(xué)習(xí)《軟件技術(shù)基礎(chǔ)》也為以后我們專(zhuān)業(yè)課的道路打

好基石,對(duì)我們的邏輯能力也是很大的提高。

十、源程序

#include<stdio.h>

#inc1ude<stdlib.h>

#include<time.h>

#defineMaxSize2〃車(chē)庫(kù)最大容量

#definefee10//在車(chē)庫(kù)中停車(chē)的單價(jià)

typedefstructNodel//構(gòu)建一個(gè)結(jié)構(gòu)體

(

intcarnum;

inttime;

}Node1;

typedefstruct〃構(gòu)造一個(gè)順序棧

(

0structNodelhome[MaxSize];

intstacktop;//棧頂?shù)闹羔?/p>

}Stack;

typedefstructNode2

0intcarnum;

inttime;

structNode2*next;

}Node2;

typedefstruct〃構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列

(

0Node2*front,*rear;

}Queue;

StackCarS;//用來(lái)表達(dá)車(chē)庫(kù)的棧

QueueCarQ;〃用來(lái)表達(dá)候車(chē)場(chǎng)的隊(duì)列

intPCar=0;〃車(chē)庫(kù)里車(chē)的數(shù)量

intWCar=0;//候車(chē)場(chǎng)的車(chē)的數(shù)量

voidCar_enter(intcarnumjntcartime)//到達(dá)車(chē)輛的信息入?;蛘呷腙?duì)

if(CarS.stacktopvMaxSize)〃假如棧沒(méi)有滿(mǎn)的時(shí)候

00CarS.home[CarS.stacktop].carnum=carnum;〃到達(dá)車(chē)輛信息放入順序棧

CarS.horne[CarS.stacktop].time=cartime;

PCar++;〃車(chē)庫(kù)里的車(chē)數(shù)量+1

printf("%d號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)!進(jìn)入時(shí)刻:%d位置:%d\n",CarS.home[C

arS.stacktop].carnum,CarS.home[CarS.stacktop],time,PCar);

CarS.stacktop++;〃棧頂指針加一

)

else//若棧滿(mǎn)

(

CarQ.front->carnum=carnum;

CarQ.front->time=cartime;〃到達(dá)車(chē)輛信息加入到隊(duì)列中

WCar++;//候車(chē)場(chǎng)車(chē)輛數(shù)+1

團(tuán)號(hào)車(chē)進(jìn)入候車(chē)場(chǎng)!到達(dá)時(shí)刻:位置:

printf(”%d%d%d\n"/CarQ.front->c

arnum=carnum,CarQ.front->time=cartime,WCar);

CarQ.front->next=(Node2*)ma1loc(sizeof(Node2));//分派空間

CarQ.front=CarQ.front->next;〃更改隊(duì)列指針

)

voidCar_Leave(intcarnumjntcartime)//車(chē)離開(kāi)

(

SStackCarS2;//構(gòu)造一個(gè)棧臨時(shí)存放為了讓位退出來(lái)的車(chē)

inti;

intfindcar=-l;

Node2*p產(chǎn)f;

CarS2.stacktop=0;//設(shè)臨時(shí)棧CarS2為空

for(i=0;i<CarS.stacktop;i++)〃通過(guò)循環(huán)對(duì)比查找要離開(kāi)的車(chē)

0if(carnum==CarS.horne[i].carnum)

findcar=i;//假如要尋找的車(chē)在車(chē)庫(kù)里則讓findcar等于車(chē)的號(hào)碼

break;

a)

0)

if(findcar!=-1)〃假如在車(chē)庫(kù)里找到這輛車(chē)

0for(;-CarS.stacktop>findcar;CarS2.stacktop++)〃將車(chē)庫(kù)里面在i車(chē)外面的車(chē)

移動(dòng)到臨時(shí)棧CarS2中

0

CarS2.homeECarS2.stacktop].carnum=CarS.home[CarS.stackto

p].carnum;

CarS2.home[CarS2.stacktop].time=CarS.home[CarS.stacktop].time;

}

Printf("%d號(hào)車(chē)離開(kāi)停車(chē)場(chǎng)!離開(kāi)時(shí)刻:%d,停留時(shí)長(zhǎng)(%d)\n”,Car

S.home[CarS.stacktop],camum,cartime,cartime-CarS.home[CarS.stacktop].time);

PCar--;//車(chē)庫(kù)內(nèi)車(chē)輛-1

printf("應(yīng)付停車(chē)費(fèi)%d\n",(cartime-CarS.horne[CarS.stacktop].tim

e)*5);

for(i=CarS2.stacktop-1;i>=0;i—?)〃把臨時(shí)棧里面的車(chē)移回去

0

回CarS.home[CarS.stacktop].carnum=CarS2.home[i].carnum;

CarS.home[CarS.stacktop].time=CarS2.home

CarS.stacktop++;

CarS2.stacktop------;

)

if(CarQ.front!=CarQ.rear)〃假如候車(chē)場(chǎng)有車(chē),將它移進(jìn)車(chē)庫(kù)

(

團(tuán)團(tuán)CarS,home[CarS.stacktop].carnum=CarQ.rear->camum;//將隊(duì)列中的車(chē)牌

號(hào)信息放入棧

00CarS.home[CarS.stacktop].time=cartime;〃將此時(shí)的時(shí)刻記錄入棧CarS,保證計(jì)算

費(fèi)用是從車(chē)輛從候車(chē)場(chǎng)進(jìn)入車(chē)庫(kù)后才開(kāi)始算

CarS.stacktop++;

00PCar++;〃車(chē)庫(kù)車(chē)輛數(shù)+1

胴WCar--;〃候車(chē)場(chǎng)車(chē)輛數(shù)-1

p=CarQ.rear;

CarQ.rear=CarQ.rear->next;

free(p);

回)

)

else//假如車(chē)庫(kù)中找不到此車(chē),再在候車(chē)場(chǎng)找

0p=CarQ.rear;

if(p!=CarQ.front&&p->carnum1=carnum)//候車(chē)場(chǎng)隊(duì)列不為空

(

00f=p->next;

while(f!=CarQ.front&&f->carnum!=carnum)

(

團(tuán)團(tuán)團(tuán)P=f;

f=f->next;

團(tuán)團(tuán))

if(f—>carnum==carnum)〃假如尋找的車(chē)在便道上,出隊(duì)列

0(

00findcar=l;

p->next=f—>next;

printf(“%d號(hào)車(chē)離開(kāi)候車(chē)場(chǎng)!離開(kāi)時(shí)間:%d,停留時(shí)長(zhǎng)

(%d)\n",f->carnum,cartime,cartime-f—>time);

WCar--;

printf("應(yīng)付停車(chē)費(fèi):%d\n",(cartime-f->time)*0);

free(f);

團(tuán)團(tuán))

)

回if(p->carnum二二earnum)//要離開(kāi)的車(chē)在隊(duì)尾,直接出隊(duì)

(

團(tuán)findcar=l;

CarQ.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論