模拟停车厂管理报告.docx

上传人:b****5 文档编号:5854528 上传时间:2023-01-01 格式:DOCX 页数:13 大小:80.38KB
下载 相关 举报
模拟停车厂管理报告.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班姓名:

田娟学号:

2013433033日期:

12月25号

一、需求分析

1.程序的功能;

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

汽车在停车场内按车辆到达的先后顺序依次排列,若停车场内已停满汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。

每辆停放在停车场的车,在离开时按其在停车场停留时间的长短交费。

在这里假设汽车不能从便道上开走。

试设计一个实现停车场管理的程序。

2.输入输出的要求;

按照从终端输入数据序列进行模拟管理。

1.栈用顺序结构实现,队列用链式结构实现;

2.每一组输入数据包括三个数据项:

汽车“到达”或“离去”的信息、汽车牌照号码、汽车到达或离去的时刻;

3.对每一组输入数据进行操作后的输出信息为:

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

3.测试数据。

1.当停车场容量为2时,(‘A’、“F001”、5),(‘A’、“A002”、10),(‘D’、“F001”、15),(‘A’、“F003”、20),(‘A’、“C004”、25),(‘A’、“B005”、30),(‘D’、“A002”、35),(‘D’、“C004”、40),(‘E’、0、0)。

二、概要设计

1.本程序所用的抽象数据类型的定义;

typedefstructNode

{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟便道*/

2.主模块的流程及各子模块的主要功能;

2.1*初始化栈*/

voidInitStack(SeqStackCar*s)/

2,2初始化便道*/

intInitQueue(LinkQueueCar*Q)/*

2.3车辆到达*

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*/

2.4车辆离开

4voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*

2.5输出离开车辆的信息清单*/

voidPRINT(CarNode*p,introom)/*

2.6列表显示车场信息

voidList1(SeqStackCar*S)/**/

2.7列表显示便道信息

voidList2(LinkQueueCar*W)/**/

2.8/*列表界面

voidList(SeqStackCarS,LinkQueueCarW)*/

3.模块之间的层次关系。

停车管理系统

车辆到达

车辆离开

退出系统

车辆基本信息显示

三、详细设计

1.采用c语言定义相关的数据类型;

typedefstructtime

{

inthour;

intmin;

}Time;/*时间结点*/

typedefstructnode

{

charnum[5];

Timereach;

Timeleave;

}CarNode;/*车辆信息结点*/

typedefstructNODE

{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟停车场*/

typedefstructcar

{

CarNode*data;

structcar*next;

}QueueNode;

2.写出各模块的伪码算法;

voidmain()

{

SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

InitStack(&Enter);/*初始化车站*/

InitStack(&Temp);/*初始化让路的临时栈*/

InitQueue(&Wait);/*初始化通道*/

while

(1)

{

cout<<"停车管理系统"<

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

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

cout<<"3.车辆基本信息显示"<

cout<<"4.退出系统"<

cout<<"请选择所需要的服务!

输入1-4"<

while

(1)

{

cin>>ch;

if(ch>=1&&ch<=4)break;

elsecout<<"输入错误!

请选择:

(1-4)."<

}

switch(ch)

{

case1:

Arrival(&Enter,&Wait);break;/*车辆到达*/

case2:

Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/

case3:

List(Enter,Wait);break;/*列表显示信息*/

case4:

exit(0);/*退出主程序*/

default:

break;

}

}

}

voidInitStack(SeqStackCar*s)/*初始化栈*/

{

inti;

s->top=0;

for(i=0;i<=MAX;i++)

s->stack[s->top]=NULL;

}

intInitQueue(LinkQueueCar*Q)/*初始化便道*/

{

Q->head=(QueueNode*)malloc(sizeof(QueueNode));

if(Q->head!

=NULL)

{

Q->head->next=NULL;

Q->rear=Q->head;

return

(1);

}

elsereturn(-1);

}

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/

{

CarNode*p;

QueueNode*t;

p=(CarNode*)malloc(sizeof(CarNode));

cout<<"请输入车牌号(如:

A123):

"<

cin>>p->num;

if(Enter->top

{

Enter->top++;

cout<<"车辆在车场第"<top<<"位置!

"<

cout<<"请输入到达时间:

(小时:

分钟)"<

cin>>p->reach.hour;

while(p->reach.hour<0||p->reach.hour>23)//控制时间格式正确

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的时(0-23)!

"<

cin>>p->reach.hour;

}

cin>>p->reach.min;

while(p->reach.min<0||p->reach.min>59)//控制分钟输入正确

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的分(0-59)!

"<

cin>>p->reach.min;

}

Enter->stack[Enter->top]=p;

return

(1);

}

else/*车场已满,车进便道*/

{

cout<<"车场已满,请在便道等待!

"<

t=(QueueNode*)malloc(sizeof(QueueNode));

t->data=p;

t->next=NULL;

W->rear->next=t;

W->rear=t;

return

(1);

}

}

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/

{

introom;

CarNode*p;

QueueNode*q;/*判断车场内是否有车*/

if(Enter->top>0)/*有车*/

{

while

(1)/*输入离开车辆的信息*/

{

cout<<"请输入车在车场的位置--"<top<<":

";

cin>>room;

if(room>=1&&room<=Enter->top)break;

}

while(Enter->top>room)/*车辆离开*/

{

Temp->top++;/*临时通道栈顶指针*/

Temp->stack[Temp->top]=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

}

p=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

while(Temp->top>=1)/*判断临时通道上是否有车*/

{

Enter->top++;

Enter->stack[Enter->top]=Temp->stack[Temp->top];

Temp->stack[Temp->top]=NULL;

Temp->top--;}

PRINT(p,room);

if((W->head!

=W->rear)&&Enter->top

{

/*便道的车辆进入车场*/

q=W->head->next;

p=q->data;/*p指向链队头*/

Enter->top++;

cout<<"便道的"<num<<"号车进入车场第"<top<<"位置!

"<

cout<<"进便道时间"<

cin>>p->leave.hour;

cin>>p->leave.min;

Enter->stack[Enter->top]=p;

W->head->next=q->next;

if(q==W->rear)W->rear=W->head;

free(q);/*释放q地址*/

}

else

cout<<"便道里没有车!

"<

}

elsecout<<"车场里没有车!

"<

}

voidPRINT(CarNode*p,introom)/*输出离开车辆的信息清单*/

{

intA1,A2,B1,B2;

cout<<"请输入离开的时间:

(小时:

分钟)"<

cin>>p->leave.hour;

while(p->leave.hour<0||p->leave.hour>23)

{

cout<<"输入错误!

"<

cout<<"请重输入离开的时间的时(0-23)"<

cin>>p->leave.hour;

B1=p->leave.hour;

}

cin>>p->leave.min;

if(p->leave.min<0||p->leave.min>59)

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的分(0-59)!

"<

cin>>p->leave.min;

}

cout<<"离开车辆的车牌号为:

"<

cout<num;

cout<<"其到达时间为:

"<reach.hour<<":

"<reach.min<

cout<<"离开时间为:

"<leave.hour<<":

"<leave.min<

A1=p->reach.hour;

A2=p->reach.min;

B1=p->leave.hour;

B2=p->leave.min;

cout<<"应交费用为:

"<<(((B1-A1)*60+(B2-A2))+1440)%1440*price<<"元!

"<

free(p);

}

voidList1(SeqStackCar*S)/*列表显示车场信息*/

{

cout<<"显示车场停车情况!

"<

inti;

if(S->top>0)/*判断车站内是否有车*/

{

cout<<"位置到达时间车牌号"<

for(i=1;i<=S->top;i++)

{

cout<<""<stack[i]->reach.hour<<":

"<stack[i]->reach.min<<""<stack[i]->num<

}

}

elsecout<<"车场里没有车!

"<

}

voidList2(LinkQueueCar*W)/*列表显示便道信息*/

{

cout<<"您选择的是便道停车情况!

"<

intj=1;

QueueNode*p;

p=W->head->next;

if(W->head!

=W->rear)/*判断通道上是否有车*/

{

cout<<"等待车辆的车牌号码为:

"<

while(p!

=NULL)

{

cout<data->num<

p=p->next;

j++;

}//开始时显示不正确,没有按照正常输出

}

elsecout<<"便道里没有车!

";

}

voidList(SeqStackCarS,LinkQueueCarW)/*列表界面*/

{

intflag,tag;

while(flag)/*列表显示循环控制*/

{

cout<<"请选择您要显示信息!

(1-3):

"<

cout<<"****--1.车场--****"<

cout<<"****--2.便道--****"<

cout<<"****--3.返回--****"<

while(flag)

{

cin>>tag;

if(tag>=1||tag<=3)break;

elsecout<<"输入错误!

请选择(1-3):

"<

}

switch(tag)

{

case1:

List1(&S);break;/*列表显示车场信息*/

case2:

List2(&W);break;/*列表显示便道信息*/

case3:

flag=0;break;

default:

break;

}

}

}

四、调试分析

1.调试中遇到的问题及对问题的解决方法;

停车场内已停满汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场

五、使用说明及测试结果

1.停车场管理系统

2.车辆进站

3.车辆出站

4.显示车辆所在信息

6、源代码

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

当前位置:首页 > 医药卫生 > 基础医学

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

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