停车场管理实验报告.docx
- 文档编号:24657276
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:21
- 大小:213.02KB
停车场管理实验报告.docx
《停车场管理实验报告.docx》由会员分享,可在线阅读,更多相关《停车场管理实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
停车场管理实验报告
HUNANUNIVERSITY
课程实验报告
题目:
停车场管理
学生姓名:
学生学号:
专业班级:
指导老师:
完成日期:
一.需求分析
1.输入形式
第一次输入一个正整数,代表停车场容量大小。
然后输入三个值,分别为字符、正整数、正整数,中间用空格隔开,分别代表车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
其中字符必须为“A,D,E”三者之一。
输入格式为:
“A15”、“D115”和“E00“。
当用户输入的字符不是ADE或者输入的不是正整数时,提示用户输入错误并重新输入
2.输出形式
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
(注:
本程序中默认停车一小时收费10元)
3.程序功能
本程序可通过用户输入的车辆信息,输出该车的停车位置或者停车时间及应缴费用
4.测试数据
请输入停车场容量:
5
A11车停在停车场第1个位置
A22车停在停车场第2个位置
A66车停在停车场第3个位置
D14停车时间:
3缴纳费用:
¥30
D26停车时间:
3缴纳费用:
¥30
FC19.5输入有误,请重新输入
E00
二.概要设计
1.抽象数据类型
将每辆车模拟成一个对象,每个对象具有车牌号时间等属性,所以定义一个Car类存储这些信息
classCar
{
public:
intCarNumber;//车牌号码
intArriveTime;//到达时间
intLeaveTime;//离开时间
}
使用栈模拟停车场,其ADT设计:
ADTstack
数据对象:
Car类
数据关系:
线性关系
基本操作:
voidclear();//栈的初始化
boolpush(constCar&item);//栈的插入操作
boolpop(Car&it);//栈的删除操作
booltopValue(Car&it)//栈的顶层元素
intlength()const
{returnsize};//栈的实际长度
使用队列模拟场外通道,其ADT设计如下:
ADTQueue
数据对象:
Car类
数据关系:
线性关系
基本操作:
voidclear();//队列的初始化
boolenqueue(constCar&it);//入队
booldequeue(Car&it);//出队
intlength()const
{returnsize;};//队列的长度
2.算法基本思想
①在该程序中,对停车场和场外通中每辆车停车的编号而言,他们有唯一的第一个元素和最后一个元素,而且除第一个元素以外的每个元素都有唯一的后继,除最后一个元素以外的每个元素都有唯一的前驱。
因此这些元素具有线性关系。
而且,对于停车场里面的汽车,他们逻辑次序是“先进后出,后进先出“的,且只在表头作插入和删除,所以可以使用栈来模拟停车场。
而在场外通道中的汽车,他们是”先进先出”的,在一端插入另一端删除操作,所以可以用队列来模拟场外通道。
当汽车离开时,在它之后进入的车辆必须先退出再按原次序进入停车场,所以需要定义另外一个临时栈存储这些元素。
(本算法按用户输入的顺序进行车辆的停放,不是按车牌号码依次停放)
②
(1)当有汽车需要进停车场停车时,进行入栈操作,若停车场已满,即栈已满,则将车停在场外通道里,进行入队操作,并记下此时的时间ArriveTime;
(2)当有汽车需要离开停车场时,对该车对应的元素进行出栈操作,并将后面进来的车辆所对应的元素进行出栈操作,将这些元素(除了需要离开的车对应的元素)存入另外一个栈,即为需要离开停车场的车让道,并记下此时的时间LeaveTime;
(3)在需要离开停车场的车成功离开停车场时,将存储在临时栈的那些元素按照原来的顺序依次插入原来的栈;
(4)如果队列不为空(即停车场场外通道上有车,这些车需要进入停车场停车),进行入栈操作,即进行
(1)操作;
(5)通过LeaveTime与ArriveTime的差计算停车时间和停车费用(本程序默认停车每小时10元);
3.程序基本流程
程序由个基本模块组成:
输入模块:
输入停车场的容量和车辆的相关信息;
停车模块:
根据车的信息,将该车对应的元素进行入栈操作;
离开模块:
根据车的信息,将该车对应的元素进行出栈操作,并将后面的元素存入一个临时栈中;
输出模块:
输出该车停车位置或停车费用;
三.详细设计
1.物理数据类型
1停车场容量为正整数,使用整型数据存储n;
2对于剩下的输入使用字符型、整型、整型存储,并将相应数据存入Car类
classCar
{
public:
intCarNumber;//车牌号码
intArriveTime;//到达时间
intLeaveTime;//离开时间
}
③定义一个Link类用来存储元素值element及下一个存储表中下一个节点指针的next域,其ADT设计如下:
template
{
public:
Carelement;
Link*next;
Link(constCar&elemval,Link*nextval=NULL)
{
element=elemval;
next=nextval;
}
Link(Link*nextval=NULL)
{
next=nextval;
}
};
④由于停车场容量一定,即栈空间大小不变,所以可以选用顺序表实现栈
classAStck:
publicStack
{
private:
intsize;//栈的长度
inttop;//栈顶元素
Car*listArray;//顺序表保存栈元素
public:
AStack(intsz)
{size=sz;top=0;listArray=newCar[sz];}//构造函数
~AStack(){delete[]listArray;}//析构函数
voidclear(){top=0;}//栈的清空
boolpush(constCar&item)
{
if(top==size)returnfalse;
else
{listArray[top++]=item;returntrue;}
}//栈的插入
boolpop(Car&item)
{
if(top==0)returnfalse;
else
{
item=listArray[-top];returntrue;
}
}//栈的删除
booltopValue(Car&it)const
{
if(top==0)returnfalse;
else
{it=listArray[top-1];returntrue;}
}//获取栈顶元素
intlength()const{returntop;}//栈的长度
};
⑤由于该队列中元素添加操作和删除操作比较多,所以使用链式队列实现队列:
template
publicLink
{
private:
intsize;
Link
Link
public:
LQueue(intsz){front=NULL;rear=NULL;size=0}
~Lqueue(){delete[]front;delete[]rear;};
voidclear()
{while(front!
=NULL)
{rear=front;
front=front->next;
deleterear;
}
rear=NULL;size=0;
}//队列的清空
boolenqueue(constCar&it)
{
if(rear=NULL)
front=rear=newLink
else
{
rear->next=newLink
rear=rear->next;
}
size++;
returntrue;
}//入队
booldequeue(Car&it)
{
if(size==0)returnfalse;
it=front->element;
Link
front=front->next
deleteltemp;
if(front==NULL)rear=NULL;
siz--;
returntrue;
}//出队
intlength()const{returnsize;}//队列的长度
}
2.算法具体步骤
(park为停车场对应的栈,out指临时栈,line指队列)
charc;
input(c);//输入汽车停车或者离开或者结束;
input(num);//输入汽车编号
input(time);//输入汽车进入或离开时间
CarC[100];//Car的对象数组
while
(1)//停车
{
switch(c)
{
case('A')//进入停车场
{
if(parkisFULL)//停车场已满
{enqueue(C[num-1]);output(line.length())}
//输出停车位置
else{
park.push(C[a-1]);
C[a-1].ArriveTime=b;
C[a-1].carNumber=a;
output(park.length())//输出停车位置
}
}break;
case(’D’)//离开
{
C[a-1].LeaveTime=b;
C[a-1].carNumber=a;//进来与离开时间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 实验 报告