停车场管理系统Word格式文档下载.docx
《停车场管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《停车场管理系统Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
说明:
对时间复杂度的分析,均指在最坏情况下的时间复杂度。
在栈结构中:
(1)初始化栈(即车库),使车库为空的,此时,时间复杂度=O(max)。
(2)停车最坏的情况是要车位已经满,此时,时时间复杂度=O
(1)。
(3)关于车辆离开的时间复杂度=O(max)。
(4)车场信息的显示的时间复杂度=O
(1)。
在队列结构中:
(1)出场车的信息的时间复杂度=O
(1)。
(2)判断通道上是否有车及车站是否已满,此时,时间复杂度O=(max)。
(3)车辆停车费用的时间复杂度O=
(1)。
四.设计原理、框图
车进入车场
不做任何计算
无点x
有
输入离开车辆的离开时间,进行停车费用的计算
此车后面的车辆退出并进入临时栈
车子离开
五.运行结果
车辆进入车场:
车场已满:
车辆离开,并收费:
列出车场信息:
列出车道信息:
2.7程序
#include<
stdio.h>
stdlib.h>
string.h>
/*------------------------------------------------------------------------------*/
#defineMAX3/*车库容量*/
#defineprice0.05/*每车每分钟费用*/
typedefstructtime{
inthour;
intmin;
}Time;
/*时间结点*/
typedefstructnode{
charnum[10];
Timereach;
Timeleave;
}CarNode;
/*车辆信息结点*/
/*模拟车场*/
typedefstructcar{
CarNode*data;
structcar*next;
}QueueNode;
/*模拟通道*/
voidInitStack(SeqStackCar*);
/*初始化栈*/
intInitQueue(LinkQueueCar*);
/*初始化便道*/
intArrival(SeqStackCar*,LinkQueueCar*);
/*车辆到达*/
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);
/*车辆离开*/
voidList(SeqStackCar,LinkQueueCar);
/*显示存车信息*/
voidmain()
{
SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&
Enter);
/*初始化车站*/
Temp);
/*初始化让路的临时栈*/
InitQueue(&
Wait);
/*初始化通道*/
while
(1)
printf("
\n1.车辆到达"
);
2.车辆离开"
3.列表显示"
4.退出系统"
scanf("
%d"
&
ch);
if(ch>
=1&
&
ch<
=4)break;
elseprintf("
\npleasechoose:
1|2|3|4."
}
switch(ch)
case1:
Arrival(&
Enter,&
break;
case2:
Leave(&
Temp,&
case3:
List(Enter,Wait);
/*列表打印信息*/
case4:
exit(0);
/*退出主程序*/
default:
break;
voidInitStack(SeqStackCar*s)/*初始化栈*/
inti;
s->
top=0;
for(i=0;
i<
=MAX;
i++)
stack[s->
top]=NULL;
intInitQueue(LinkQueueCar*Q)/*初始化便道*/
Q->
head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->
head!
=NULL)
head->
next=NULL;
rear=Q->
head;
return
(1);
elsereturn(-1);
voidPRINT(CarNode*p,introom)/*打印出场车的信息*/
intA1,A2,B1,B2;
\n请输入离开的时间:
/**:
**/"
%d:
(p->
leave.hour),&
leave.min));
\n离开车辆的车牌号为:
"
puts(p->
num);
\n其到达时间为:
%d:
p->
reach.hour,p->
reach.min);
离开时间为:
leave.hour,p->
leave.min);
A1=p->
reach.hour;
A2=p->
reach.min;
B1=p->
leave.hour;
B2=p->
leave.min;
\n应交费用为:
%2.1f元"
((B1-A1)*60+(B2-A2))*price);
free(p);
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
\n请输入车牌号(例如:
闽A1234):
gets(p->
if(Enter->
top<
MAX)/*车场未满,车进车场*/
Enter->
top++;
\n车辆在车场第%d位置."
Enter->
top);
\n请输入到达时间:
reach.hour),&
reach.min));
stack[Enter->
top]=p;
else/*车场已满,车进便道*/
\n该车须在便道等待!
t=(QueueNode*)malloc(sizeof(QueueNode));
t->
data=p;
W->
rear->
next=t;
rear=t;
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)
{/*车辆离开*/
inti,room;
CarNode*p,*t;
QueueNode*q;
/*判断车场内是否有车*/
top>
0)/*有车*/
while
(1)/*输入离开车辆的信息*/
\n请输入车在车场的位置/1--%d/:
room);
if(room>
room<
=Enter->
top)break;
while(Enter->
room)/*车辆离开*/
Temp->
stack[Temp->
top]=Enter->
top];
top--;
p=Enter->
while(Temp->
=1)
top]=Temp->
PRINT(p,room);
/*判断通道上是否有车及车站是否已满*/
if((W->
=W->
rear)&
MAX)/*便道的车辆进入车场*/
q=W->
next;
t=q->
data;
\n便道的%s号车进入车场第%d位置."
t->
num,Enter->
\n请输入现在的时间/**:
**/:
(t->
next=q->
if(q==W->
rear)W->
rear=W->
top]=t;
free(q);
\n便道里没有车.\n"
\n车场里没有车."
/*没车*/
voidList1(SeqStackCar*S)/*列表显示车场信息*/
if(S->
0)/*判断车站内是否有车*/
\n车场:
\n位置到达时间车牌号\n"
for(i=1;
=S->
top;
%d"
i);
%d"
S->
stack[i]->
reach.hour,S->
puts(S->
\n车场里没有车"
voidList2(LinkQueueCar*W)/*列表显示便道信息*/
QueueNode*p;
p=W->
if(W->
rear)/*判断通道上是否有车*/
\n等待车辆的号码为:
while(p!
data->
p=p->
\n便道里没有车."
voidList(SeqStackCarS,LinkQueueCarW)
intflag,tag;
flag=1;
while(flag)
\n请选择1|2|3:
\n1.车场\n2.便道\n3.返回\n"
tag);
if(tag>
=1||tag<
=3)break;
switch(tag)
List1(&
S);
/*列表显示车场信息*/
List2(&
W);
/*列表显示便道息*/
flag=0;