模拟停车场管理实验报告1.docx
- 文档编号:7229320
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:12
- 大小:116.83KB
模拟停车场管理实验报告1.docx
《模拟停车场管理实验报告1.docx》由会员分享,可在线阅读,更多相关《模拟停车场管理实验报告1.docx(12页珍藏版)》请在冰豆网上搜索。
模拟停车场管理实验报告1
模拟停车场管理实验报告
——数学类一班王晗2012435043
1、需求分析
设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路的车辆再按原次序进入车场。
在这里假设汽车不能从便道上开走,试设计这样一个停车厂模拟管理程序。
为了以下描述的方便,停车厂的停车场用“停车位”进行叙述,停车厂的便道用“便道”进行叙述。
2、概要设计
通过分析可知用顺序结构的栈实现模拟停车场的停车位,用链式结构的队列实现模拟便道。
每一组输入三个数据:
汽车到达或者离开;车牌号;到达或者离开的时间(精确到秒)。
每输入一组数据之后输出确认信息:
若车辆到达,则显示车辆停的位置;若为离开,则显示应缴纳的费用。
3、详细设计
#include
usingnamespacestd;
intN;
constdoublem=3;
structcinfo
{
intcnum;
intatime;
};
structstack
{
cinfocstack[100];
inttop;
intsize;
};
structnode
{
node*next;
intnnum;
};
structqueue
{
node*front,*rear;
};
voidinitstack(stack*s)
{s->top=-1;}
intinstack(stack*s,cinfox)//元素进站
{
if(s->top==N-1)
{
cout<<"停车位已满!
"< return0; } else { s->cstack[++s->top]=x; return1; } } cinfooutstack(stack*s)//元素出栈 { cinfoy; if(s->top<0) { um=NULL; y.atime=NULL; returny; } else { s->top--; returns->cstack[s->top+1]; } } voidinitqueue(queue*q)//初始化队列 { q->front=newnode; q->rear=q->front; q->front->next=NULL; q->front->nnum=0; } voidinqueue(queue*q,intnum1)//元素进队列 { node*p; p=newnode; p->nnum=num1; p->next=NULL; q->rear->next=p; q->rear=p; q->front->nnum++; } intoutqueue(queue*q) { node*p; intn; if(q->front==q->rear) return0; else { p=q->front->next; q->front->next=p->next; if(p->next==NULL) q->rear=q->front; n=p->nnum; deletep; q->front->nnum--; returnn; } } voidcarrival(stack*s,queue*q,cinfox) { intf; f=instack(s,x); if(f==0) { inqueue(q,um); cout<<"车牌号为"< } else { cout<<"车牌号为"< } } voidcarleave(stack*s1,stack*s2,queue*q,cinfox) { node*p; cinfoy; inta,n=0; while((s1->top>-1)&&(n==0)) { y=outstack(s1); if(um! =um) { a=instack(s2,y); } else n=1; } if(um==um) { if(x.atime-y.atime<100) cout<<"车牌号为"< "< if(x.atime-y.atime<10000&&x.atime-y.atime>100||x.atime-y.atime==100) cout<<"车牌号为"< "< if(x.atime-y.atime>10000||x.atime-y.atime==10000) cout<<"车牌号为"< "< while(s2->top>-1) { y=outstack(s2); n=instack(s1,y); } a=outqueue(q); if(a! =0) { um=a; y.atime=x.atime; n=instack(s1,y); cout<<"车牌号为"< } } else { while(s2->top>-1) { y=outstack(s2); n=instack(s1,y); } p=q->front; n=0; while(p->next! =NULL&&n==0) { if(p->next->nnum! =um) p=p->next; else { p->next=p->next->next; q->front->nnum--; if(p->next=NULL) q->rear=q->front; cout<<"车牌号为"< n=1; } } if(n==0) { cout<<"很抱歉的告诉您,输入有误,请重新输入! "< } } } voidmain() { cout<<"请输入一个整数作为停车场停车位的数量: "< cin>>N;//这里N将作为栈能存放元素的数量 while(N<=0) { cout<<"很抱歉的告诉您,您的输入有误,请重新输入一个大于零的数: "< cin>>N; } charchoice; stack*s1,*s2; queue*q; cinfox; intflag; s1=newstack; s2=newstack; q=newqueue; initstack(s1); initstack(s2); initqueue(q); flag=1; for(;;) { cout<<"请输入登记信息: 'A'/'B';车牌号码;汽车进出停车场的时间."< while(choice) { cout<<"A/a汽车进停车场"< cout<<"B/b汽车出停车场"< cin>>choice>>um>>x.atime; switch(choice) { case'A': case'a': carrival(s1,q,x); break; case'B': case'b': carleave(s1,s2,q,x); break; default: cout<<"输入有误! ! "< } } } } 4、调试分析 遇到的问题 、车辆进出时间需要精确到秒,并且时间的格式并不方便计算,尝试了很多种的方法; 、车辆离开后便道上的车辆要进入停车位; 解决的办法 、采用数字的方式记下时间,精确到秒,计算应付金额的时候进行时间与数字之间的转换; 5、使用说明及测试结果 1、设置停车位为四个 2、按照提示依次输入。 输入四辆进入的车辆的信息,占满停车位。 3、若再输入进入车辆的信息,则会停在便道上,显示停车位已满。 4、当停在一号和三号停车位的车辆离开停车场时车位变动,停在便道上的车辆进入停车位。 6、反思及总结 1、通过本程序熟练掌握了栈和队列的定义和使用方法,对使用C++语言编码来验证数据结构的理论知识有了更深层次的理解,达到了实验目的。 2、通过在设计过程中的讨论和思考,对使用现有知识利用计算机来解决现实生活中的实际问题确立了信心,对软件工程思想和模块化程序思想有了比较清晰的理解,为今后的程序设计奠定了一定的心理和技术上的准备。 3、由于时间仓促和个人能力有限,程序中还有一些需要完善的地方,例如: 对停放到停车厂的汽车按时间的收费管理,程序界面可以使用图形方式使之更美观,使用鼠标或菜单方式使之能够适应更多人的使用习惯。 在今后的实验中要多多练习这方面的能力。 4、由于该程序的使用次数还尚少,容错性能还有待改善。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 停车场 管理 实验 报告