版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026河北保定易縣公安局招聘警務(wù)輔助人員4名備考考試試題及答案解析
- 2026廣東中山大涌鎮(zhèn)起鳳環(huán)社區(qū)居民委員會(huì)公益性崗位招聘2人備考考試題庫(kù)及答案解析
- 2026江西省弋投建設(shè)(集團(tuán))有限公司社會(huì)招聘2人筆試備考試題及答案解析
- 2026貴州黔東南州三穗縣第二批城鎮(zhèn)公益性崗位招聘21人備考考試題庫(kù)及答案解析
- 文庫(kù)發(fā)布:飛利浦介紹
- 2026福建廈門(mén)海隆對(duì)外勞務(wù)合作有限公司系統(tǒng)內(nèi)選聘1人備考考試題庫(kù)及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考?xì)埣踩寺?lián)合會(huì)直屬事業(yè)單位公開(kāi)招聘人員備考考試題庫(kù)及答案解析
- 2026上半年黑龍江伊春市事業(yè)單位招聘262人備考考試試題及答案解析
- 2026湖南農(nóng)業(yè)發(fā)展投資集團(tuán)有限責(zé)任公司招聘3人備考考試試題及答案解析
- 2026年臨沂市市直部分醫(yī)療衛(wèi)生事業(yè)單位公開(kāi)招聘醫(yī)療后勤崗位工作人員(9人)備考考試題庫(kù)及答案解析
- 體系工程師工作年終總結(jié)
- 五年級(jí)上冊(cè)小數(shù)四則混合運(yùn)算100道及答案
- 3D小人素材13(共16)-金色系列
- 上腔靜脈綜合征患者的護(hù)理專(zhuān)家講座
- 免責(zé)協(xié)議告知函
- 食物與情緒-營(yíng)養(yǎng)對(duì)心理健康的影響
- 2023氣管插管意外拔管的不良事件分析及改進(jìn)措施
- 麻醉藥品、精神藥品月檢查記錄
- 基礎(chǔ)化學(xué)(本科)PPT完整全套教學(xué)課件
- 蕉嶺縣幅地質(zhì)圖說(shuō)明書(shū)
- 電梯控制系統(tǒng)論文
評(píng)論
0/150
提交評(píng)論