实验报告 停车场管理.docx

上传人:b****6 文档编号:7207414 上传时间:2023-01-21 格式:DOCX 页数:13 大小:19.84KB
下载 相关 举报
实验报告 停车场管理.docx_第1页
第1页 / 共13页
实验报告 停车场管理.docx_第2页
第2页 / 共13页
实验报告 停车场管理.docx_第3页
第3页 / 共13页
实验报告 停车场管理.docx_第4页
第4页 / 共13页
实验报告 停车场管理.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验报告 停车场管理.docx

《实验报告 停车场管理.docx》由会员分享,可在线阅读,更多相关《实验报告 停车场管理.docx(13页珍藏版)》请在冰豆网上搜索。

实验报告 停车场管理.docx

实验报告停车场管理

实验停车场管理

姓名:

曹国君梁辰唐琪皓黄悦班级:

信息1班

学号:

********************************实验时间:

第5周

1.问题描述

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入得车辆必须先退出车场为它让路,待该车辆开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按照它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

2.数据结构设计

由于停车场的停车位有限,只有一个入口,且通道狭长,当停车场内某辆车要离开时,在它之后开入得车辆必须先退出车场为它让路,顺序栈的结构符合停车场的需求。

若车场内已停满,车辆再外排队等候,队伍不限长度,可以使用链式队列进行模拟。

输入:

停车位数,停车费单价,进入或离去,车牌号,进入或离去时间

输出:

进入:

输出停在停车场或者便道上的位置

离去:

输出停留在停车场上的时间(离开时间-进入停车场的时间)及费用

为了满足以上的要求,至少需要记录进入时间以及车牌号

template

classSqStack

{protected:

//顺序栈的数据成员:

inttop;//栈顶指针

intmaxSize;

structSet//定义一个结构体,可以存放两个数据

{ElemTypenum;

ElemTypetime;

};//栈最大容量

Set*elems;

}

template

structNode

{

//数据成员:

ElemTypedata1,data2;//两个数据域

Node*next;//指针域

//构造函数:

Node();//无参数的构造函数

Node(ElemTypeitem1,ElemTypeitem2,Node*link=NULL);//已知数数据元素值和指针建立结构

};

3.程序设计

(1)头文件

由于数据域的改变,创建,插入,删除等函数都需要增加一个数据域的处理。

顺序栈:

public:

//抽象数据类型方法声明及重载编译系统默认方法声明:

SqStack(intsize=DEFAULT_SIZE);//构造函数

virtual~SqStack();//析构函数

intLength()const;//求栈长度

boolEmpty()const;//判断栈是否为空

voidClear();//将栈清空

voidTraverse(void(*Visit)(constElemType&))const;//遍历栈

StatusPush(constElemType&e,constElemType&t);//入栈

StatusTop(ElemType&e,ElemType&t)const;//取顶元素

StatusPop(ElemType&e,ElemType&e);//出栈

SqStack(constSqStack©);//复制构造函数

SqStack&operator=(constSqStack©);//赋值语句重载

 

链式队列:

public:

LinkQueue();//无参数的构造函数

virtual~LinkQueue();//析构函数

intLength()const;//求队列长度

boolEmpty()const;//判断队列是否为空

voidClear();//将队列清空

voidTraverse(void(*Visit)(constElemType&))const;//遍历队列

StatusDelQueue(ElemType&e,ElemType&t);//出队操作

StatusGetHead(ElemType&e,ElemType&t)const;//取队头操作

StatusEnQueue(constElemType&e,constElemType&t);//入队操作

LinkQueue(constLinkQueue©);//复制构造函数

LinkQueue&operator=(constLinkQueue©);//赋值语句重载

(2)辅助函数

当车辆离开时,输入车牌号与离开时间,如果该车辆在停车场中,则在其之后的车辆需要暂时离开停车场为其让路,返回其进入停车场的时间,并判别为真;如果该车辆不存在停车场中,则判别为假。

intdepart(constint&a,constint&n,SqStack&p,bool&dans)//返回进入时间

{SqStackpark1(n);//建立一个临时栈

inttmpn,tmpt,count=0,atime,i;

do{p.Pop(tmpn,tmpt);

park1.Push(tmpn,tmpt);

count++;}//计数器用来记录让开的车数

while(tmpn!

=a&&!

p.Empty());//如果栈顶车牌不符合条件,而且栈不为空,把栈顶元素弹出后放入临时栈中

if(tmpn==a)//如果找到了该车

{dans=1;//判别为真

park1.Pop(tmpn,tmpt);//该车辆离开

count--;}

else

{dans=0;}//如果遍历仍找不到车,则判别为假

atime=tmpt;

for(inti=0;i

{park1.Pop(tmpn,tmpt);

p.Push(tmpn,tmpt);

}

returnatime;//返回进入时间

}

 

为了避免输入重复的车牌号,输入的离开时间小于进入时间,设计了遍历功能供使用者参考

template

voidSqStack:

:

Traverse(void(*Visit)(constElemType&))const

//操作结果:

从栈顶到栈底依次对栈的每个元素调用函数(*visit)

{

for(intPos=top-1;Pos>=0;Pos--)//从栈底到栈顶对栈的每个元素调用函数(*visit)

{cout<<"车牌:

";(*Visit)(elems[Pos].num);

cout<<"到达时间:

";(*Visit)(elems[Pos].time);

cout<

}

}

(3)主程序

#include"assistance.h"

#include"sq_stack.h"

#include"lk_queue.h"

intdepart(constint&a,constint&n,SqStack&p,bool&dans)

{SqStackpark1(n);

inttmpn,tmpt,count=0,atime,i;

do{p.Pop(tmpn,tmpt);

park1.Push(tmpn,tmpt);

count++;}

while(tmpn!

=a&&!

p.Empty());

if(tmpn==a)

{dans=1;

park1.Pop(tmpn,tmpt);

count--;}

else

{dans=0;}

atime=tmpt;

for(inti=0;i

{park1.Pop(tmpn,tmpt);

p.Push(tmpn,tmpt);

}

returnatime;

}

intmain(){

intn=0,time,num,tmp,oldtime;

doubleprix;//停车单价

boolsi;//判别车辆是否存在

charjug='P';

cout<<"欢迎使用停车场管理系统"<

while(n<1)

{

cout<<"请输入停车场的车位数:

"<

cin>>n;

}

LinkQueuehallway;

SqStackpark(n);

cout<<"请输入每分钟停车费:

"<

cin>>prix;

 

while(jug!

='E')//选择界面

{

cout<<"A.车辆到达"<

cout<<"D.车辆离开"<

cout<<"L.查看停车场情况"<

cout<<"E.退出程序"<

cin>>jug;

switch(jug){

case'A':

//进入

{cout<<"请输入车牌号与达到时间:

"<

cin>>num>>time;

if(park.Length()!

=n)//停车场没满

{park.Push(num,time);

cout<<"车牌号为"<

"<

"<

Else//停车场满

{hallway.EnQueue(num,time);cout<<"停车场已满,车牌号为"<

"<

"<

//进入便道排队

continue;

}

case'D':

//离开

{if(!

park.Empty())//停车场有车辆

{

cout<<"请输入车牌号与离开时间:

"<

cin>>num>>time;

oldtime=depart(num,n,park,si);//记录进入时间,判定其存在

if(si){//存在则输出

cout<<"车牌号为"<

"<

"<

"<

"<<(time-oldtime)*prix<

if(!

hallway.Empty())//如果有车辆在便道内等候

{hallway.DelQueue(num,tmp);

park.Push(num,time);

cout<<"车牌号为"<

"<

"<

}

}

elsecout<<"停车场内没有该车辆"<

elsecout<<"停车场内没有任何车辆"<

continue;}

case'L':

{cout<<"停车场出入口(南)"<

park.Traverse(Write);//遍历停车场占用的车位

cout<

continue;}}}

cout<<"再见"<

system("pause");

return0;

}

 

停车场管理数据测试

次数

输入

输出

车位数

单价

到达离去信息

时刻

车牌号

位置

停留时间

费用

1

2

5

A

5

1

车位1

 

 

A

10

2

车位2

 

 

D

15

1

 

10

50

A

20

3

车位2

 

 

A

25

4

便道位1

 

 

A

30

5

便道位2

 

 

D

35

2

 

25

125

D

40

4

 

5

25

E

0

0

 

 

 

2

2

0.5

A

5

1

车位1

 

 

A

10

2

车位2

 

 

A

15

3

便道位1

 

 

A

20

4

便道位2

 

 

A

25

5

便道位3

 

 

D

30

2

 

20

10

A

35

6

便道位3

 

 

D

40

3

 

10

5

D

45

1

 

40

20

E

0

0

 

 

 

3

1

5

A

5

1

车位1

 

 

A

10

2

便道位1

 

 

D

15

2

 

 

 

A

15

3

便道位2

 

 

D

25

1

 

20

100

D

25

2

 

0

0

D

35

3

 

10

50

E

0

0

 

 

 

4

5

1

A

4

3

车位1

 

 

A

7

2

车位2

 

 

A

15

5

车位3

 

 

D

8

3

 

4

4

A

9

1

车位3

 

 

A

18

4

车位4

 

 

D

25

2

 

18

18

A

30

6

车位4

 

 

E

0

0

 

 

 

5

3

2.785

A

5

1

车位1

 

 

A

5

2

车位2

 

 

A

5

3

车位3

 

 

A

5

4

便道位1

 

 

D

10

2

 

5

13.925

D

10

4

 

0

0

A

15

5

车位3

 

 

D

15

1

 

10

27.85

E

0

0

 

 

 

6

2

10

D

 

 

 

 

 

A

10

1

车位1

 

 

A

11

2

车位2

 

 

A

11

2

便道位1

 

 

D

22

2

 

11

110

D

33

2

 

11

110

D

44

1

 

34

340

E

0

0

 

 

 

 

 

 

 

 

 

7

3

0.01

A

6

1

车位1

 

 

A

80

2

车位2

 

 

A

120

3

车位3

 

 

D

180

3

 

60

0.6

A

250

4

车位3

 

 

A

300

5

便道位1

 

 

D

350

4

 

100

1

E

0

0

 

 

 

 

 

 

 

 

 

8

2

8

A

36

1

车位1

 

 

D

48

2

 

 

 

D

45

1

 

9

72

A

48

3

车位1

 

 

A

55

4

车位2

 

 

A

55

5

便道位1

 

 

D

60

3

 

12

96

E

0

0

 

 

 

 

 

 

 

 

 

9

10

2

A

2

1

车位1

 

 

A

2

2

车位2

 

 

A

4

3

车位3

 

 

A

8

4

车位4

 

 

D

10

1

 

8

16

A

16

5

车位4

 

 

D

20

2

 

18

36

E

0

0

 

 

 

 

 

 

 

 

 

10

0

0

 

 

 

 

 

 

 

5.测试记录及收获

由于时间紧迫,对于车牌重复,到达时间小于离开时间的情况未做进一步的限制,假定输入的车牌不重复,时间的输入依次递增。

为了避免以上错误,设计了遍历停车场情况的函数,以此弥补程序的不足。

通过本次实验,我们小组进一步熟悉了栈和队列的区别。

无论是链式还是顺序,各有优点,灵活地运用这些结构,可以模拟许多常见的情况。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1