停车场管理系统设计——C语言

  • 格式:doc
  • 大小:266.00 KB
  • 文档页数:12

下载文档原格式

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

停车场管理

一. 题目要求

1.设计一个停车场用长度为N的堆栈来模拟。由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。

2.程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

二. 需求分析

根据题目要求首先设计一个堆栈,以堆栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不像汽车一样需要让道,可设计了一个顺序表来存放时间。又用顺序表用派生法设计了一个堆栈,恰好满足

上面模拟停车场的需要。

三. 总体设计

四.详细设计

⒈主函数

主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。

程序:

int main()

{ int n,m,i=1,j,flag=0; /*定义变量*/

Car c[10];

Car x;

Stack S,S0; /*设定堆栈S ,SO*/ LinkQueue Q; /*便道*/

InitStack(&S); /*堆栈S*/

InitStack(&S0); /*临时堆栈S0*/

InitQueue(&Q);

while(1)

{ print();

scanf("%d",&m);

switch(m) /*switch多分支语句*/

{case 1:printf("\n请输入车牌号:");

scanf("%d",&c[i].num);

printf("\n请输入到达/离开时间:");

scanf("%d:%d",&c[i].t.hour,&c[i].t.min);

In(&S,&Q,&c[i]);i++;

break; /*车辆的情况*/

case 2:printf("\n请输入车牌号:");

scanf("%d",&n);

for(j=0;j<10;j++)

if(n==c[j].num) break;

printf("\n请输入到达/离开时间:");

scanf("%d:%d",&c[j].t.hour,&c[j].t.min);

Out(&S,&S0,&c[j],&Q); break; /*车辆的情况*/ case 3: print1(&S); /*输出车库中车的信息*/ print2(&Q); /*输出过道上车的信息*/

break; /*终止*/

case 4: flag=1; break;

default:printf("\n输入错误,请输入 1,2,3 或4");

}

if(flag)break; /*结束程序*/

} return 0;

}

2.各功能模块设计

(1)输入模块

根据数据信息可知车牌号,车位,进出车库时间均为整数,采用整型,停车费用含小数,用实型。一条记录对应一辆车的信息。

程序:

typedef struct

{ int hour;

int min;

} time; /*车的时间结构体函数*/ typedef struct

{ int num;

int position;

time t;

float money;

} Car; /*车的信息*/

(2)建立模块

该模块的功能是建立堆栈、便道并使其初始化。初始化时采用的是库函数malloc。

程序:

建立堆栈的程序:

typedef struct

{ Car elem[SIZE+1];

int top; /*指向便道中的第一个空位*/ } Stack; /*修建的堆栈*/

typedef struct Node

{ Car data;

struct Node *next;

}CQueueNode;

建立过道的程序:

typedef struct

{ CQueueNode *front;

CQueueNode *rear;

}LinkQueue; /*设置的便道*/

便道初始化程序:

void InitQueue(LinkQueue *Q)

{ Q->front=(CQueueNode*)malloc(sizeof(CQueueNode)); /*使mallo返回的指针转换为指向CQueueNode类型数据的指针*/

if(Q->front!=NULL)

{ Q->rear=Q->front;

Q->front->next=NULL; }

} /*便道的初始化*/

int EnterQueue(LinkQueue *Q,Car *t)

{ CQueueNode *NewNode;

NewNode=(CQueueNode*)malloc(sizeof(CQueueNode)); /*给便道申请空间*/

if(NewNode!=NULL)

{NewNode->data.num=t->num;