停车场管理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HUNAN UNIVERSITY

课程实验报告

题目:停车场管理

学生姓名:

学生学号:

专业班级:

指导老师:

完成日期:

一.需求分析

1.输入形式

第一次输入一个正整数,代表停车场容量大小。然后输入三个值,分别为字符、正整数、正整数,中间用空格隔开,分别代表车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。其中字符必须为“A,D,E”三者之一。输入格式为:“A 1 5”、“D 1 15”和“E 0 0“。

当用户输入的字符不是ADE或者输入的不是正整数时,提示用户输入错误并重新输入

2.输出形式

若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

(注:本程序中默认停车一小时收费10元)

3.程序功能

本程序可通过用户输入的车辆信息,输出该车的停车位置或者停车时间及应缴费用

4.测试数据

请输入停车场容量:5

A 1 1 车停在停车场第 1 个位置

A 2 2 车停在停车场第 2 个位置

A 6 6 车停在停车场第 3 个位置

D 1 4 停车时间:3 缴纳费用:¥30

D 2 6 停车时间:3 缴纳费用:¥30

F C 19.5 输入有误,请重新输入

E 0 0

二.概要设计

1.抽象数据类型

将每辆车模拟成一个对象,每个对象具有车牌号时间等属性,所以定义一个Car类存储这些信息

class Car

{

public:

int CarNumber;//车牌号码

int ArriveTime;//到达时间

int LeaveTime;//离开时间

}

使用栈模拟停车场,其ADT设计:

ADT stack

数据对象:Car类

数据关系:线性关系

基本操作:

void clear();//栈的初始化

bool push(const Car& item);//栈的插入操作

bool pop(Car& it);//栈的删除操作

bool topValue(Car& it)//栈的顶层元素

int length() const

{return size};//栈的实际长度

使用队列模拟场外通道,其ADT设计如下:

ADT Queue

数据对象:Car类

数据关系:线性关系

基本操作:

void clear();//队列的初始化

bool enqueue(const Car& it);//入队

bool dequeue(Car& it);//出队

int length() const

{return size;};//队列的长度

2.算法基本思想

①在该程序中,对停车场和场外通中每辆车停车的编号而言,他们有

唯一的第一个元素和最后一个元素,而且除第一个元素以外的每个元素都有唯一的后继,除最后一个元素以外的每个元素都有唯一的前驱。因此这些元素具有线性关系。而且,对于停车场里面的汽车,他们逻辑次序是“先进后出,后进先出“的,且只在表头作插入和删除,所以可以使用栈来模拟停车场。而在场外通道中的汽车,他们是”先进先出”的,在一端插入另一端删除操作,所以可以用队列来模拟场外通道。当汽车离开时,在它之后进入的车辆必须先退出再按原次序进入停车场,所以需要定义另外一个临时栈存储这些元素。(本算法按用户输入的顺序进行车辆的停放,不是按车牌号码依次停放)

②(1)当有汽车需要进停车场停车时,进行入栈操作,若停车场已

满,即栈已满,则将车停在场外通道里,进行入队操作,并记下此时的时间ArriveTime;

(2)当有汽车需要离开停车场时,对该车对应的元素进行出栈操作,并将后面进来的车辆所对应的元素进行出栈操作,将这些元素(除了需要离开的车对应的元素)存入另外一个栈,即为需要离开停车场的车让道,并记下此时的时间LeaveTime;

(3)在需要离开停车场的车成功离开停车场时,将存储在临时栈的那些元素按照原来的顺序依次插入原来的栈;

(4)如果队列不为空(即停车场场外通道上有车,这些车需要进入停车场停车),进行入栈操作,即进行(1)操作;

(5)通过LeaveTime 与ArriveTime的差计算停车时间和停车费用(本程序默认停车每小时10元);

3.程序基本流程

程序由个基本模块组成:

输入模块:输入停车场的容量和车辆的相关信息;

停车模块:根据车的信息,将该车对应的元素进行入栈操作;

离开模块:根据车的信息,将该车对应的元素进行出栈操作,并将后面的元素存入一个临时栈中;

输出模块:输出该车停车位置或停车费用;

三.详细设计

1.物理数据类型

①停车场容量为正整数,使用整型数据存储n;

②对于剩下的输入使用字符型、整型、整型存储,并将相应数据存入

Car类

class Car

{

public:

int CarNumber;//车牌号码

int ArriveTime;//到达时间

int LeaveTime;//离开时间

}

③定义一个Link类用来存储元素值element及下一个存储表中下一个节

点指针的next域,其ADT设计如下:

template class Link

{

public:

Car element;

Link *next;

Link(const Car & elemval, Link* nextval = NULL)

{

element = elemval;

next = nextval;

}

Link(Link *nextval = NULL)

{

next = nextval;

}

};

④由于停车场容量一定,即栈空间大小不变,所以可以选用顺序表实现栈

class AStck:public Stack//

{

private:

int size;//栈的长度

int top;//栈顶元素

Car *listArray;//顺序表保存栈元素

public:

AStack(int sz)

{size=sz;top=0;listArray=new Car[sz];} //构造函数

相关文档
最新文档