停车场管理的模拟系统解读.docx
《停车场管理的模拟系统解读.docx》由会员分享,可在线阅读,更多相关《停车场管理的模拟系统解读.docx(18页珍藏版)》请在冰豆网上搜索。
![停车场管理的模拟系统解读.docx](https://file1.bdocx.com/fileroot1/2022-12/16/8861c84b-a382-447f-aa40-3385da6a51f9/8861c84b-a382-447f-aa40-3385da6a51f91.gif)
停车场管理的模拟系统解读
广东海洋大学信息学院
课程设计报告
设计题目
停车场管理的模拟系统
课程名称
数据结构
姓名(学号)
联系电话
专业名称
计算机科学与技术
所在班级
计科1112
指导教师
谢仕义
教师职称
教授
起止时间
2011年12月26日至2012年1月6日
评定成绩
一、课程设计的主要内容
熟悉理解栈和队列的逻辑结构和存储结构,设计实现停车场管理的模拟系统,其主要内容如下:
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,其模型如下图1所示。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场按顺序开入临时停放道为其让路,待其开出大门外后,再按原次序进入车场,每辆停放在停车场的汽车在它离开停车场时必须按其停留的时间长短缴纳费用(从进入停车场开始计费)。
二、功能和结构设计
.主界面
为实现各项功能,首先设计一个汉多个功能的主控菜单子程序,已连接系统各项功能,方便用户使用。
系统主控菜单界面如下:
,系统的主要要求:
1.以栈模拟停车场,以队列模拟停车场外的便道,同时用另一个栈模拟为离去车辆让路而从停车场退出来的车辆的临时停放道。
2.每一组输入数据包括三个数据项:
车辆“到达”或“离去”信息、车辆牌照号码、车辆到达或离去的时刻。
3对每一组输入数据进行操作后的输出信息为:
每当有车辆到达或离去时,动态输出停车场内、便道上以及临时停放道的车辆排队情况,若是车辆离去,还应输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停车不收费)。
.记录到达车辆:
.程序原定车位5个,当停车场车位已满时,到达车辆进入便道等候,当停车场有车离开时,在便道上的车自动进入停车场,并且以此时的时间来计算从便道进入停车场的车时间,离开的车要按停放的时间收取费用:
.查询功能,可以选择查询停车场里的停放的车,或者是查询便道上等候的车辆:
三、流程图和算法设计
.Judge_Output算法流程图
.A_cars算法流程图
.D_cars流程图
四、
源程序代码
#include
#include
#include
#defineMAX5//车库容量
#defineprice0.01//每分钟费用
typedefstructtime
{
inthour;
intmin;
}Time;//时间结点
typedefstructnode
{
charnum[10];
Timereach;
Timeleave;
}CarNode;//车辆结点
typedefstructNODE
{
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;//模拟车站
typedefstructcar
{
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;//模拟通道
voidInitStack(SeqStackCar*);//初始化栈
intInitQueue(LinkQueueCar*);//初始化便道
intArrival(SeqStackCar*,LinkQueueCar*);//车辆到达
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆离开
voidList(SeqStackCar,LinkQueueCar);//显示存车信息
voidmain()
{
system("color00f");
SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&Enter);//初始化车站
InitStack(&Temp);//初始化让路的临时栈
InitQueue(&Wait);//初始化便道
while
(1)
{
cout<<"欢迎光临"<cout<<"*************************"<cout<<"1.车辆到达"<cout<<"2.车辆离开"<cout<<"3.列表显示"<cout<<"4.退出系统"<cout<<"*************************"<cout<<"请选择所需要的服务!
"<cout<<"请注意正确输入时间,不要为非数字!
"<while
(1)
{
cin>>ch;
if(ch>=1&&ch<=4)break;
else
cout<<"请选择:
1|2|3|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;is->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);
}
voidPRINT(CarNode*p,introom)//打印出站车的信息
{
intA1,A2,B1,B2;
cout<<"请输入离开的时间:
/**:
**/"<cin>>p->leave.hour;
while(p->leave.hourreach.hour||p->leave.hour>23)
{
cout<<"error!
"<cout<<"请输入离开的时间的时("<reach.hour<<"-23)"<cin>>p->leave.hour;
B1=p->leave.hour;
}
cout<<":
"<cin>>p->leave.min;
cout<"<puts(p->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))*price<<"元!
"<free(p);
}
intArrival(SeqStackCar*Enter,LinkQueueCar*W)//车辆到达
{
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
cout<<"请输入车牌号(例:
A1234):
"<gets(p->num);
if(Enter->top{
Enter->top++;
cout<<"车辆在车场第"<top<<"位置!
"<cout<<"请输入到达时间的时:
/**:
**/"<cin>>p->reach.hour;
while(p->reach.hour<0||p->reach.hour>23)
{
cout<<"error!
"<cout<<"请输入到达时间的时(0-23)!
"<cin>>p->reach.hour;
}
cout<<"到达时间的分:
"<cin>>p->reach.min;
while(p->reach.min<0||p->reach.min>59)
{
cout<<"error!
"<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,*t;
QueueNode*q;
//判断车场内是否有车
if(Enter->top>0)//有车
{
while
(1)//输入离开车辆的信息
{
cout<<"请输入车在车场的位置1--"<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;
t=q->data;
Enter->top++;
cout<<"便道的"<num<<"号车进入车场第"<top<<"位置!
"<cout<<"请输入现在的时间如/*:
*/"<if(p->reach.hour<0||p->reach.hour>23)
{
cout<<"error!
"<cout<<"请输入到达时间的时(0-23)!
"<cin>>p->reach.hour;
}
cout<<":
"<cin>>p->reach.min;
if(p->reach.min<0||p->reach.min>59)
{
cout<<"error!
"<cout<<"请输入到达时间的分(0-59)!
"<cin>>p->reach.min;
}
W->head->next=q->next;
if(q==W->rear)W->rear=W->head;
Enter->stack[Enter->top]=t;
free(q);
}
else
cout<<"便道里没有车!
"<}
else
cout<<"车场里没有车!
"<}
voidList1(SeqStackCar*S)//列表显示车场信息
{
inti;
if(S->top>0)//判断车场内是否有车
{
cout<<"车场:
"<cout<<"位置到达时间车牌号"<for(i=1;i<=S->top;i++)
{
cout<<""<stack[i]->reach.hour<<":
"<stack[i]->reach.min<<""<stack[i]->num<}
}
else
cout<<"车场里没有车!
"<}
voidList2(LinkQueueCar*W)//列表显示便道信息
{
QueueNode*p;
p=W->head->next;
if(W->head!
=W->rear)//判断通道上是否有车
{
cout<<"等待车辆的号码为:
"<while(p!
=NULL)
{
puts(p->data->num);
p=p->next;
}
}
else
cout<<"便道里没有车!
";
}
voidList(SeqStackCarS,LinkQueueCarW)
{
intflag,tag;
flag=1;
while(flag)
{
cout<<"请选择1|2|3:
"<cout<<"1.车场"<<"2.便道"<<"3.返回"<while
(1)
{
cin>>tag;
if(tag>=1||tag<=3)break;
else
cout<<"请选择1|2|3:
"<}
switch(tag)
{
case1:
List1(&S);break;//列表显示车场信息
case2:
List2(&W);break;//列表显示便道信息
case3:
flag=0;break;
default:
break;
}
}
}
五、课程设计总结
通过这次C++课程设计,我认识到课本上学到的远远不够。
本次设计使我深入的了解了C++编程的实际问题下的灵活运用,并对C++有了更深一步的认识。
虽然经过努力终于把系统完成,可是系统还是不完善,程序中的一些算法还不是很清楚,只不过把一些简单的功能实现了出来,这些缺陷归根到底都是我的C++语言和数据结构水平还不是很高,好需要经过不懈的努力才能做出比较完善的系统。
这次课程设计让我明白到要真正掌握一门汇编语言需要的不仅仅是课本上的东西,还要在实际的编程过程中慢慢掌握其中的奥妙。
同时我明白了,要成为一名优秀的编程人员必须具备坚实的编程语言基础,熟练的调试程序的技能,耐心也很重要,同时细心也是不可或缺的。
所以为了自己的梦想,在以后的学习过程中,我要不断的充实自己,努力地学习。
通过本次的课程设计让我熟悉了软件开发的基本过程,初步掌握了了软件开发过程的问题分析,系统设计,程序编码,测试等阶段的基本任务和技能方法,培养了我的算法设计和算法分析的能力,提高了综合运用所学的理论知识和方法以及独立分析问题的能力。
六、参考资料