实验题目 - - 模拟停车场管理

发布时间:2014-02-10 16:11:02   来源:文档文库   
字号:

实验题目 模拟停车场管理

一、 需求分析

1、 程序的基本功能:

1 主控功能:介绍程序的基本功能,并给出程序功能所对应的键盘操作的提示,如车到来或离去的表示方法,停车场或者便道的状态的查询方法提示等。

2 汽车到来:首先要查询当前停车的状态,当停车场非满时,将其驶入停车场(入栈),开始计费;当停车场满时,让其进入便道等候(入队)。

3 汽车离开停车场:当某辆车要离开停车场的时候,比他后进停车场的车要为他让路,(即将这些车依次“压入”辅助栈),开走请求离开的车辆,再将辅助栈中的车依次出栈,“压入”停车场;同时根据离开的车在停车场停留的时间进行收费;最后查询是否有车在便道等候,若有,将便道上的第一辆车驶入停车场(先出队,再入栈),开始计费。

4 查询状态:用来在屏幕上显示停车位和便道上各位置的状态。

2、 输入输出要求:

1 输入:汽车“到达”或“离去”的信息、汽车牌照号码、汽车到达或离去的时刻。

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

3、 测试数据:

当停车场容量为5时,连续有7辆车到来,牌照号分别为F001F002F003F004F005F006F007,前5辆车应该进入停车位15车位,第67辆车应停入便道的12位值上。牌照号为F003的汽车从停车场开走,应显示F005F004的让路动作和F006从便道到停车位上的动作。

二、 概要设计

1、 抽象数据类型的定义:

使用栈来模拟停车场,使用队列来模拟停车场外的便道;还需另设计一个辅助栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。

2、 本程序包括以下4个模块:

1 汽车进停车场:

{

如果停车场满了,就将其余的车停放在便道,将车依次进队;

如果停车场没满,就将车依次进栈;

}

2 汽车出停车场:

{

显示车出停车场的信息,如果便道上有车则将车停入停车场,将车进站,并显示新进入停车场的车辆信息;

}

3 查询停车场信息:

{

显示停车场停放车辆的信息;

显示便道等候车辆的信息;

}

4 主程序模块:

{

进入停车场;

驶出停车场;

查询停车场信息;

退出程序;

}

3、 各程序模块之间的层次关系

主程序模块

汽车进入 汽车离开 查询车辆

三、 详细设计:

1、 类型数据结构体的定义:

typedef struct Car

{

char license[N];

float time;

char state;

}Car; //汽车类型的定义

typedef struct

{

Car Pack[MAX_PARK];

int top;

}ParkStack; //顺序栈停车场的定义

typedef struct qnode

{

Car data;

struct qnode *next;

}Qnode; //各汽车信息的存储空间

typedef struct

{

Qnode *front,*rear;

}RoadQueue; //用来表示队头和队尾位置的指针

2、 伪码算法:

#include

#include

#include

#define MAX_PARK 4

#define N 10

typedef struct Car

{

char license[N];

float time;

char state;

}Car;

typedef struct

{

Car Pack[MAX_PARK];

int top;

}ParkStack;

typedef struct qnode

{

Car data;

struct qnode *next;

}Qnode;

typedef struct

{

Qnode *front,*rear;

}RoadQueue;

ParkStack *Init_ParkStack()

{

ParkStack *s;

s=new ParkStack;

s->top=-1;

return s;

}

int Empty_ParkStack(ParkStack*s)

{

if(s->top==-1)

return 1;

else

return 0;

}

void Push_ParkStack(ParkStack *s,Car x)

{

s->top++;

strcpy(s->Pack[s->top].license,x.license);

s->Pack[s->top].state=x.state;

s->Pack[s->top].time=x.time;

}

void Pop_ParkStack(ParkStack *s,Car *x)

{

*x=s->Pack[s->top];

s->top--;

}

RoadQueue *Init_RoadQueue()

{

RoadQueue *q;

Qnode *p;

q=new RoadQueue;

p=new Qnode;

p->next=NULL;

q->front=p;

q->rear=p;

return q;

}

void In_RoadQueue(RoadQueue *q,Car x)

{

Qnode *p;

p=new Qnode;

strcpy(p->data.license,x.license);

p->data.state=x.state;

p->next=NULL;

q->rear->next=p;

q->rear=p;

}

int Empty_RoadQueue(RoadQueue *q)

{

if(q->front==q->rear)

return 1;

else

return 0;

}

void Out_RoadQueue(RoadQueue *q,Car *x)

{

Qnode *p;

if(Empty_RoadQueue(q))

{

cout<<"\t\t"<<"便道为空";

}

else

{

p=q->front->next;

q->front->next=p->next;

*x=p->data;

delete p;

if(q->front->next==NULL)

q->rear=q->front;

}

}

void Carin(ParkStack *q,RoadQueue *p)

{

Car c;

cout<<"\t\t"<<"请输入当前时间:";

cin>>c.time;

cout<<"\t\t"<<"请输入车牌号:";

cin>>c.license;

cout<<"\t\t"<<"请输入停车状态(P:停车,W:等待)";

cin>>c.state;

if(q->top==MAX_PARK-1)

{

cout<<"\t\t"<<"新来的车在便道等候停车!";

In_RoadQueue(p,c);

}

else

{

Push_ParkStack(q,c);

cout<<"\t\t"<<"车已在停车场停车,现在开始计时!";

}

cout<

}

void Carout(ParkStack *q,ParkStack *s,RoadQueue *p)

{

char license[N];

Car c;

float t;

double a=0;

cout<<"\t\t"<<"请输入当前时间:";

cin>>t;

cout<<"\t\t"<<"请输入车牌号:";

cin>>license;

Pop_ParkStack(q,&c);

while (strcmp(c.license,license)!=0)

{

Push_ParkStack(s,c);

Pop_ParkStack(q,&c);

}

a=(t-c.time)*10;

cout<车牌号为"<的车辆驶出停车场"<

cout<<"\t\t"<<"停车费用为:"<

while (!Empty_ParkStack(s))

{

Pop_ParkStack(s, &c);

Push_ParkStack(q, c);

}

if (!Empty_RoadQueue(p))

{

Out_RoadQueue(p,&c);

c.time=t;

cout<<"\t\t"<进入停车场"<

Push_ParkStack(q, c);

}

}

void Carsearch(ParkStack *q,ParkStack *s,RoadQueue *p)

{

Car c;

Qnode *t;

cout<<"\t\t停车场情况为:"<

if(Empty_ParkStack(q))

cout<<"\t\t"<<"停车场为空"<

else

{

while(!Empty_ParkStack(q))

{

Pop_ParkStack(q, &c);

q->top--;

Push_ParkStack(s, c);

q->top++;

}

while(!Empty_ParkStack(s))

{

Pop_ParkStack(s, &c);

cout<<"\t\t"<停车时刻:"<

Push_ParkStack(q, c);

}

}

cout<<"\t\t---------------------------------"<

cout<<"\t\t便道情况为:"<

t=p->front->next;

if(t==NULL)

cout<<"\t\t"<<"便道为空"<

else

{

while(t!=NULL)

{

cout<<"\t\t"<data.license<<"\tW"<

t=t->next;

}

}

}

int main()

{

ParkStack *p,*s;

RoadQueue *t;

int a;

p=Init_ParkStack();

s=Init_ParkStack();

t=Init_RoadQueue();

while(a)

{

cout<<"\t\t"<<"-----------请选择-------------"<

cout<<"\t\t"<<"*********1.进入停车场*********"<

cout<<"\t\t"<<"*********2.驶出停车场*********"<

cout<<"\t\t"<<"*********3.查询车情况*********"<

cout<<"\t\t"<<"*********0.退出程序***********"<

cout<<"\t\t"<<"请输入:";

cin>>a;

switch(a)

{

case 1:

{

Carin(p,t);

cout<

break;

}

case 2:

{

Carout(p,s,t);

cout<

break;

}

case 3:

{

Carsearch(p,s,t);

cout<

break;

}

case 0:break;

}

}

return 0;

}

3、 函数间的调用关系:

Main

四、 调试分析

调试中遇到的问题及对问题的解决方法:

驶出汽车时显示的信息不对,汽车离开的函数有问题。解决办法:重新检查输出汽车信息的程序段,并且一步步地检查程序代码改正。

五、 使用说明及测试结果

1、 使用说明

1 输入进入停车场的车辆信息。

2 输入离开停车场的车辆信息。

3 程序运行界面如下:

六、 源程序

本文来源:https://www.2haoxitong.net/k/doc/542d86537e21af45b307a8a3.html

《实验题目 - - 模拟停车场管理.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式