数据结构停车场管理实习报告_数据结构停车场管理
数据结构停车场管理实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构停车场管理”。
实习报告
题目:停车场管理
一. 需求分析
1. 用栈来表示停车场,用队列来表示停车道。
2. 用户需输入车辆的必要信息,如车辆的到达或离开,汽车牌号以及到达或离去的时刻。停车场的容量及单位时间的停车费由编程序者自行设置,结构需输出车辆停车所需缴纳的费用。
3. 本程序要求对车辆的动态能够输出具体的信息内容,包括停车或离开的时间,位置,及所需缴纳的停车费。4. 测试数据为:
N=2,输入数据为:(’A’,1,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).其中:’A’表示到达,’D’表示离去,’E’表示输入结束。5.程序执行的命令为:
1.创建栈和队列。2.对车辆的行为进行相应的处理。3.输出车辆的信息。
二. 概要设计
1.设定栈的抽象数据类型定义:
ADT Stack{
数据对象:D={ai|ai属于Elem,i=1,2……,n, n>=0}
数据关系:R1={| ai-1,ai属于D,i=2,……,n}
基本操作:
InitStack(&S)
操作结果:构造一个空栈S.pop(&S,&e)
初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并以e返回其值。
push(&S,&e)
初始条件:栈S已存在。
操作结果:在栈S的栈顶插入新的栈顶元素e。
EmptyStack(S)
初始条件:栈S已存在。
操作结果:若栈为空,则返回TRUE,否则,返回FALSE }ADT Stack;2.设定队列的抽象数据类型定义:
ADT Queue{
数据对象:D={ai| ai属于Elem, i=1,2,……,n, n>=0}
数据关系:R1={| ai-1,ai 属于D,i=2,……,n}
基本操作:
InitQueue(&Q)
操作结果:构造一个空队列Q.Append(&Q, e)
初始条件:队列Q已存在。
操作结果:插入元素e为Q的新的队尾元素。
Remove(&Q, &e)
初始条件:Q为非空队列。
操作结果:删除Q的对头元素,并用e返回其值。
EmptyQueue(Q)
初始条件:队列Q已存在。
操作结果:若队列为空,则返回TRUE,否则,返回FALSE
}ADT Queue 3.本程序主要包括三个模块
1.主程序模块;
int main(){
初始化;
do{
接受命令;
处理命令;
}while(命令!=退出); } 2.处理车辆到达模块; 3.处理车辆离开模块;
各模块之间的调用关系如下:
处理车辆到达模块主程序模块处理车辆离开模块
三. 详细设计
设计程序如下: 1.栈的头文件
#ifndef _SQSTACK_H_ #define _SQSTACK_H_ struct Car { int plate, arrive_t;};cla SqStack { public: int top;Car *base;int size;void InitStack(int m=100);bool EmptyStack()const;bool Push(Car &c);bool Pop(Car &c);};void SqStack::InitStack(int n){ base = new Car[n];top =-1;size = n;} bool SqStack::EmptyStack()const { if(top ==-1)
return true;else
return false;} bool SqStack::Push(Car &c){ if(top == sizec.arrive_t;if(timelong
cout
packing.Push(c);
while(!temp.EmptyStack())
{
temp.Pop(c);
packing.Push(c);
}
return 0;} cout
temp.Pop(c);
packing.Push(c);}
if(!sevice_road.EmptyQueue())
{
sevice_road.Remove(c);
map[c.plate] = 0;
c.arrive_t = tim;
packing.Push(c);
cout
} } return 0;} int main(){ cout > n;cout > command;while(command!= 'E'){
if(command == 'A')
{
Arrive(packing, sevice_road);
cout
}
if(command == 'D')
{
Depart(packing, temp, sevice_road);
cout
}
cin >> command;} }
车牌号时间“
四. 调试与验收
1.本次作业是设计停车场的管理系统,就需要判断车牌号,及时间的输入的正确性,输入的数据有比较严格的要求,必须符合实际。因此对数据需要多次判断。2.处理车辆到达模块和处理车辆离开模块其空间复杂度为O(m*n);3.本程序循环用的很多,找车,排队,等等。
4.在验收时,老师提出一些当输入为不正常输入的时候的情况,而我没有考虑到,所以又做了一定的修改。
5.验收时,老师提到所加map破坏了程序整体结构的完好性,是有待改进的地方。
五
用户手册
1.按屏幕提示输入停车场规模和车辆信息; 2.回车显示车辆在停车场或停车道的信息; 3.输入E退出。
六. 测试结果
七 附录
源程序文件名清单: LinkQueue.cpp LinkQueue.h SqStack.cpp
SqStack.h 停车场管理.cpp