停车场管理系统实验报告Word文档格式.docx
《停车场管理系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《停车场管理系统实验报告Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
![停车场管理系统实验报告Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/9436ff30-1186-4ce7-8621-e22c658c0e78/9436ff30-1186-4ce7-8621-e22c658c0e781.gif)
intdata;
stnode*next;
}LinkStack;
//创建一个栈头结点,无头结
voidInitStack(LinkStack*&
ls)
ls=NULL;
}
//进栈,相当于头插法
voidPush(LinkStack*&
ls,intx)
LinkStack*p;
p=(LinkStack*)malloc(sizeof(LinkStack));
p->
data=x;
next=NULL;
next=ls;
ls=p;
//出栈
voidPop(LinkStack*&
if(ls==NULL)
return;
intx;
p=ls;
while(p)
{
x=p->
data;
ls=p->
next;
cout<
<
x<
"
"
;
free(p);
p=ls;
}
cout<
出栈成功!
!
endl;
//创建栈
voidCreatStack(LinkStack*&
InitStack(ls);
inti=1,num;
以000表示输入结束!
while
(1)
请输入第"
i<
个元素:
cin>
>
num;
if(num==000)
break;
Push(ls,num);
i++;
进栈成功!
!
voidmain()
LinkStack*ls,*p;
CreatStack(ls);
Pop(ls);
2.#include<
#defineQueueSize100
typedefstructsqqueue
intdata[QueueSize];
intfront,rear;
}SqQueue;
//初始化队列
voidInitQueue(SqQueue&
qu)
qu.rear=qu.front=0;
//进队
intEnQueue(SqQueue&
sq,intx)
if((sq.rear+1)%QueueSize==sq.front)
return0;
sq.rear=(sq.rear+1)%QueueSize;
sq.data[sq.rear]=x;
return1;
//出队
voidDeQueue(SqQueue&
sq)
if(sq.front==sq.rear)
while(sq.front!
=sq.rear)
sq.front=(sq.front+1)%QueueSize;
x=sq.data[sq.front];
出队成功!
//创建队
voidCreatQueue(SqQueue&
InitQueue(sq);
intnum,i=1;
以000表示输入结束!
EnQueue(sq,num);
进队成功!
SqQueuesq;
CreatQueue(sq);
DeQueue(sq);
3.#include<
stdio.h>
#defineMAX2
#defineprice0.05
typedefstructnode
inthour;
intmin;
}Time;
//时间结点
typedefstructNode
charnum[10];
//车牌号
Timereach;
//时间
Timeleave;
}CarNode;
//车辆信息结点
typedefstructNODE
CarNode*stack[MAX];
inttop;
}CarStack;
//顺序栈模拟车站
typedefstructQNode//队列
CarNode*data;
QNode*next;
}QueueNode;
//链队结点类型
typedefstructpqrt
QueueNode*front,*rear;
//设置头指针尾指针
}LinkQueueCar;
//模拟通道
//初始化栈
voidInitStack(CarStack*cs);
//初始化队列(便道)
intInitQueue(LinkQueueCar*qc);
//车辆到达
intArrival(CarStack*Enter,LinkQueueCar*qc);
//车辆离开
voidLeave(CarStack*Enter,CarStack*Temp,LinkQueueCar*qc);
//显示车库信息
voidList(CarStacks,LinkQueueCarw);
CarStackEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&
Enter);
Temp);
InitQueue(&
Wait);
欢迎光临"
-----------------------"
1.车辆到达"
2.车辆离开"
3.车场显示"
4.退出程序"
请选择所需的服务!
while
(1)
{
cin>
ch;
if(ch>
=1&
&
ch<
=4)
break;
}
switch(ch)
case1:
Arrival(&
Enter,&
case2:
Leave(&
Temp,&
case3:
List(Enter,Wait);
case4:
exit(0);
default:
break;
voidInitStack(CarStack*cs)
cs->
top=-1;
for(inti=0;
MAX;
i++)
cs->
stack[cs->
top]=NULL;
intInitQueue(LinkQueueCar*qc)//初始化队列
//qc=(LinkQueueCar*)malloc(sizeof(LinkQueueCar));
这句话不能要?
?
qc->
front=(QueueNode*)malloc(sizeof(QueueNode));
if(qc->
front!
=NULL)
qc->
front->
//带头结点的
rear=qc->
front;
//一定要注意赋值顺序不能反了!
return1;
else
return-1;
//打印车站车离开的信息
voidPrint(CarNode*p,introom)
intA1,A2,B1,B2;
//车辆收费
请输入离开时间:
/**:
**/"
请输入离开时间的时(0-23):
cin>
p->
leave.hour;
while(p->
leave.hour<
reach.hour||p->
leave.hour>
23)
error!
B1=p->
请输入离开时间的分钟(0-59):
leave.min;
leave.min<
0||p->
leave.min>
59)
B2=p->
endl<
离开汽车的车牌号为:
puts(p->
num);
其到达时间为:
reach.hour<
:
reach.min<
其离开时间为:
A1=p->
reach.hour;
A2=p->
reach.min;
应交费用为:
((B1-A1)*60+(B2-A2))*price<
元"
free(p);
intArrival(CarStack*Enter,LinkQueueCar*qc)
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
请输入车牌号(例A8888):
gets(p->
if((Enter->
top+1)<
MAX)
Enter->
top++;
车辆在车场第"
Enter->
top<
位置"
请输入到达时间:
请输入到达时间的时(0-23):
while(p->
reach.hour>
cout<
请输入到达时间的分(0-59):
stack[Enter->
top]=p;
//注意数组下标是从0开始,在显示时下标也要与之对应
车近停车场成功!
该车需在便道上等待!
t=(QueueNode*)malloc(sizeof(QueueNode));
//进队列
t->
data=p;
rear->
next=t;
rear=t;
车进便道成功!
voidLeave(CarStack*Enter,CarStack*Temp,LinkQueueCar*qc)
CarNode*p,*t;
QueueNode*q;
introom;
if(Enter->
top>
-1)//判断车场是否为空
请输入车在车场中的位置:
room;
if(room>
=0&
room<
=Enter->
top)
//要离开的车后面还有车,则后面的车需进入临时栈给前面的车让路
while(Enter->
room)//用Enter->
top和room相比看你的车在第几个位置,前面的几辆车需全部让路
Temp->
stack[Temp->
top]=Enter->
top];
Enter->
top--;
//让路完以后车再离开
p=Enter->
//车离开后,如果临时栈里有车,重新进车站
while(Temp->
=0)
top]=Temp->
临时车场里的车重新进站成功!
Print(p,room);
//调用计费函数
//车离开后如果便道上有车,也进车站
if(qc->
=qc->
rear&
MAX)//判断便道上是否有车以及车站是否已满
q=qc->
t=q->
便道上的"
t->
num<
号车进入车场第"
请输入现在的时间:
while(t->
0||t->
{
cout<
cin>
}
qc->
next=q->
//出便道
if(q==qc->
rear)qc->
front=qc->
rear;
top]=t;
//进车站
free(q);
便道的车进入停车场成功!
else
便道里没有车!
车场里没有车!
voidList1(CarStack*s)//显示车场信息
inti;
if(s->
-1)
车场"
位置时间车牌号"
for(i=0;
(s->
top+1);
s->
stack[i]->
voidList2(LinkQueueCar*w)//显示便道信息
QueueNode*p;
p=w->
//p先指向第一辆车,
if(w->
=w->
rear)//判断便道是否为空
等待车辆的号码为:
while(p)//用指针p遍历输出数据
puts(p->
data->
p=p->
voidList(CarStacks,LinkQueueCarw)//显示整个停车场的信息
intflag,tag;
flag=1;
while(flag)
请选择1|2|3:
1.车场"
2.便道"
3.返回"
tag;
if(tag>
=1||tag<
=3)
else
switch(tag)
List1(&
s);
List2(&
w);
flag=0;
五、程序运行情况(写出输入数据及运行结果)
六、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)
本次实验前两题是栈和队列的基本算法,是基础练习,关键是第三题,具体谈谈我理解的停车场。
停车场系统总的来说分为五大块,第一块和第二块属于基本操作,包括初始化栈和队列;
第三块是车到达,分为两个层次:
1.车到达了进栈2.栈满,进队列。
第四块是车离开,分为五个层次:
1.车离开,判断该车后面是否还有车2.有车的话,后面的车让路,进临时栈3.然后该车离开,打印出离开信息4.离开后,判断临时栈上是否有车,有车重新进车站5.再判断便道上是否有车,有车也进车站。
第五块是显示车站信息,分为三个层次:
1.显示车站信息2.显示便道信息3.返回。
整个停车场系统涉及的结构体有:
1.描述时间Time2.描述一辆车CarNode
3.模拟车站CarStack4.模拟便道QueueNode,LinkQueueCar
整个停车场系统涉及的函数有;
1.栈和队列的初始化2.车进站3.车出战4.计费函数
5.显示车站信息6.显示便道信息7.显示整个停车场的信息
需要注意的问题:
1.在初始化栈是top=-1或0是不一样的,涉及到后面显示时数组下标的问题。
另外因为栈中包含指针数组所以必须给指针初始化
2.车出站时分的几个层次都要考虑到,注意函数的参数包括三部分(车站,临时车站,队列),注意各个环节的连接,临时栈的应用。
在判断车在第几个位置时需要根据自己输入车在车场的位置,然后与top比较,看车是否在栈尾,是直接出栈还是需要让路后在出栈?
判断便道上的车是否能进车站时要根据两个条件,一是便道上有车,二是车站没满。
3.显示时要注意数组的下标,初始化时top=-1,所以在用for循环遍历所有的结点时要用for(i=0;
i++)才能正确输出。
4.在写计费函数时,分别用几个变量存放到达和离开的时间,做减法后乘以价格输出就行了,容易实现关键是要理解。
5.主函数和显示函数中都用的是switch语句,很好用。
同时我觉得while
(1)死循环也很好用,以后要试着多用。