C语言实现停车场管理

时间:2022-10-24 09:57:49

C语言课程设计之停车场管理问题,供大家参考,具体内容如下

1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

2.基本要求

(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
(2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
(3)栈以顺序结构实现,队列以链表结构实现。
(4)按照题意要求独立进行设计,设计结束后按要求写出设计报告。

一、代码块:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int ElemType;
#define MaxSize 100
#define QNODE struct QNode
 
typedef struct Node //车辆信息
{
 char AL;
 int NO;
 int time;
}Node;
typedef struct Stack //栈定义
{
 struct Node data[MaxSize];
 int top;
 int num;
}SqStack;
QNODE        //队列节点
{
 struct Node data;
 QNODE *next;
};
typedef struct linkqueue    //队列结构体定义
{
 QNODE *front,*rear;
 int num;
}LinkQueue;
 
SqStack *Init_SeqStack() //置空栈
{
 SqStack *s;
 s=(SqStack*)malloc(sizeof(SqStack));
   s->top=-1;
 s->num=0;
 return s;
}
LinkQueue *Init_LQueue()    //创建空队列
{
 
 LinkQueue *q;
   QNODE *p;
   q=(LinkQueue*)malloc(sizeof(LinkQueue));
   p=(QNODE*)malloc(sizeof(QNODE));
 p->next=NULL;
 q->front=q->rear=p;
 q->num=0;
 return q;
}
int ISEmpty_SeqStack(SqStack *s) //判断栈是否为空,栈为空返回1
{
 if(s->top ==-1)
 return 1;
 else
 return 0;
}
 
int ISFULL_SeqStack(SqStack *s,int n) //判断栈是否已满,若栈满返回1
{
 if(s->top==n-1)
 return 1;
 else
 return 0;
}
int ISEmpty_LQueue(LinkQueue *q) //判断队列是否为空,队列为空返回1
{
 if(q->front==q->rear)
 return 1;
 else
 return 0;
}
 
void IN_Lqueue( LinkQueue *q,struct Node s)  //入队
{
 QNODE *p;
 p=(QNODE*)malloc(sizeof(QNODE));
 p->data=s;
 q->num++;
 p->next=NULL;
 q->rear->next =p;
 q->rear =p;
}
void Push_SeqStack(SqStack *p,struct Node s)  //入栈
{
 p->top ++;
 p->data[p->top]=s;
 p->num++;
}
int POP_SeqStack(SqStack *s,struct Node car)//出栈
{
 SqStack *p;
 int t;
  p=Init_SeqStack();
 while(s->data[s->top].NO !=car.NO)//找到车牌号为P.NO的车,
 {
   Push_SeqStack(p,s->data[s->top]);
 s->top--;
 s->num--;
 }
 t=car.time-s->data[s->top].time;
 s->top--;
 s->num--;
 while(ISEmpty_SeqStack(p)==0)
 {
 Push_SeqStack(s,p->data[p->top]);
 p->top--;
 p->num--;
 }
 return t;
}
 
struct Node Out_LQueue(LinkQueue *q)  //出队
{
 QNODE *p;
 p=q->front->next;
 q->front->next=p->next;
 q->num --;
 if( q->front->next==NULL)
  q->rear=q->front;
 return p->data;
 free(p);
}
int main()
{
 SqStack *parkstack;  //parkstack为表示停车场的栈
 LinkQueue *parkqueue;    //parkqueue为表示便道的队列
 struct Node car;
 int n,a=0,t;        //n为停车场栈的最大容量
 float f;          //f为每小时收费
 parkstack=Init_SeqStack();
 parkqueue=Init_LQueue(); //初始界面
  printf("***************停车场信息查询***************\n");
 printf("请输入停车场最大容量n=");
 scanf("%d",&n);
 printf("\n请输入每分钟收取费用f=");
 scanf("%f",&f);
 printf("\n请输入车辆信息\n");
  scanf("%c,%d,%d",&car.AL,&car.NO,&car.time);
 while(car.AL!='Q')
 {
  if(car.AL=='A' )
  {    // 汽车到达的情况
   if(ISFULL_SeqStack(parkstack,n)==1) //栈满的情况
   {
   IN_Lqueue(parkqueue,car);  //进入队列等待
    printf("这辆车在门外便道上第%d个位置\n",parkqueue->num);
   printf("\n");
   printf("请输入车辆信息\n");
   }
   else
   {
   Push_SeqStack(parkstack,car); //入栈
   printf("这辆车在停车场内第%d个位置\n",parkstack->num);
   printf("\n");
   printf("请输入车辆信息\n");
   }
  }
 
  if(car.AL=='L' )   //汽车离开的情况
  {
        t=POP_SeqStack(parkstack,car);//出栈
  printf("这辆车停留时间为%d,收费为%f。\n",t,f*t);
  printf("\n");
  printf("请输入车辆信息\n");
    if(ISEmpty_LQueue(parkqueue)==0)  //队列不为空需要进栈
     Push_SeqStack(parkstack,Out_LQueue(parkqueue) );
  }
  if(car.AL=='P'&&car.NO==0&&car.time==0 )//显示停车场的车数
  {
   printf("停车场的车数为%d\n",parkstack->num);
    printf("\n");
   printf("请输入车辆信息\n");
  }
    if(car.AL=='W'&&car.NO==0&&car.time==0 )//显示候车场的车数
  {
   printf("候车场的车数为%d\n",parkqueue->num);
  printf("\n");
  printf("请输入车辆信息\n");
  }
 scanf("%c,%d,%d",&car.AL,&car.NO,&car.time);
 }
 
 printf("输入结束\n");
 return 1;
}

二、运行:

关键字:A——arrive;L——leave;P——park;Q——quit;W——wait.

C语言实现停车场管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_42261466/article/details/90581406