模拟停车场管理系统.docx
《模拟停车场管理系统.docx》由会员分享,可在线阅读,更多相关《模拟停车场管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
模拟停车场管理系统
软件实训(可视化程序设计)
实验报告
课题名称:
模拟停车场管理系统
学生学号:
1104030231
专业班级:
2011级电信02班
学生姓名:
周汝耀
学生成绩:
指导教师:
沈斌
课题工作时间:
2014.12.22至2013.12.28
武汉工程大学教务处制
目录
1.需求分析...........................................1
1.1系统需求..........................................1
1.2功能分析...........................................1
2.逻辑结构设计.......................................2
2.1实施方案............................................2
2.2设计思路............................................2
2.3流程图............................................3
3.程序文件.............................................4
3.1程序代码..........................................4
4.调试过程...........................................18
5.设计结论...........................................20
6.参考文献............................................20
1.需求分析
1.1系统需求
一个典型的停车场收费管理信息系统需要包括车辆进出管理及收费功能、停车场车位及车辆的进出查询功能和系统设置及管理功能。
通过对停车场车辆管理的调查研究,要求系统具有以下功能:
(1)全面展示停车场的服务功能及环境。
(2)存储客户进出信息。
(3)全面展示停车场的车位服务功能。
(4)提供车位所在停车场的详细信息。
(5)提供管理后台入口。
(6)全面管理客户租用车位信息。
(7)系统运行稳定,具有强大的数据处理功能。
1.2功能分析
主要功能:
本系统是对停车场的模,它能清楚的显示操作人员所需的操作,使用方便,简洁。
基础数据管理:
模拟车站,模拟便道,还有一个临时的栈,分别通过进出车站函数控制。
进站管理:
用进入函数把车辆进入车站或便道。
出站管理:
用出栈函数把出栈的车辆出栈,然后如果便道有车进入车站。
2.逻辑结构设计
2.1实施方案
本文是关于了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力。
编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,要程序结构清晰。
数据的存储结构根据需要自行定义。
其中测试数据包括正确的输入及其输出结果和含有错误的输入及其输出结果。
分析算法的时间复杂度,要求算法的效率尽可能高。
用栈模拟停车场,栈结点是结构体,用队列模拟便道,队列结点也是结构体。
2.2设计思路
2.3流程图
进入
NO
YES
3.程序文件
3.1程序代码
#include
#include
#include
#defineN2
#defineprice0.1
//时间
structtime{
inthour;
intmin;
};
//车辆信息
structcarnode{
charnum[10];
timereach;
timeleave;
};
//模拟车站栈
structstackcar{
carnode*base;
carnode*top;
intstacksize;
};
structqueuenode{
carnode*data;
queuenode*next;
};
//模拟通道
structlinkqueue{
queuenode*frond;
queuenode*rear;
};
//便道空否
intqueueemty(linkqueueq)
{
if(q.frond==q.rear)
return1;
elsereturn0;}
//初始化栈
voidinitstack(stackcar*s)
{
s->base=newcarnode;
if(!
s->base)exit(0);//分配失败退出
s->top=s->base;
s->stacksize=N;
}
//进出栈
intpush(stackcar*s,carnode*e)
{
if(s->top-s->base==s->stacksize)
return0;
else
*s->top++=*e;
return1;
}
intpop(stackcar*s,carnode*e)
{
if(s->top==s->base)return0;/*=VS==?
!
小错就是大错*/
else*e=*--s->top;return1;
}
//栈判空函数
intstackempty(stackcars)
{
if(s.base==s.top)return1;
elsereturn0;
}
//初始化便道
intinitqueue(linkqueue*q)
{
q->frond=q->rear=newqueuenode;
if(!
q->rear)exit(0);
q->frond->next=NULL;
return1;
}
//进出便道
intenqueue(linkqueue*q,carnode*e)
{
queuenode*p;
p=newqueuenode;
if(!
p)exit(0);
p->data=e;
p->next=0;
q->rear->next=p;
q->rear=p;
return1;
}
intdequeue(linkqueue*q,carnode*e)
{
queuenode*p;
if(q->frond==q->rear)return0;
p=q->frond->next;
e=p->data;
q->frond->next=p->next;
if(q->rear==p)q->rear=q->frond;
delete(p);return1;
}
//车辆进入时处理
intarrive(stackcar*in,linkqueue*wait)
{
carnode*i;
i=newcarnode;
cerr<<"输入车号:
";
cin.ignore();//消除前面回车的影响
cin.getline(i->num,10);
if(in->top-in->base{
cerr<<"车到达的时间(00:
00):
小时为";
cin>>i->reach.hour;cout<<"\t\t分钟为";
cin>>i->reach.min;
push(in,i);cerr<<"a?
?
?
?
";
//system("cls");
cout<<"\t\t车辆已成功进入停车场"<cout<<"\t\t车号为"<num<<"的车进入\t";
cout<<"到达的时间:
"<reach.hour<<":
"<reach.min<return1;
}
else
{queuenode*w;
w=newqueuenode;
w->data=i;
w->next=NULL;
wait->rear->next=w;
wait->rear=w;
cout<<"\t\t抱歉车位已满请在便道等待"<return1;
}
return0;
}
//车辆离开时处理函数
intleave(stackcar*in,stackcar*temp,linkqueue*wait)
{
intflag=0,a1,a2,b1,b2;doublemoney;
carnode*p,*t;
queuenode*q;
p=newcarnode;
cout<<"请输入车牌号:
";
cin.ignore();
cin.getline(p->num,10);
while(!
stackempty(*in))
{t=newcarnode;
pop(in,t);
if(strcmp(p->num,t->num)==0)
{
cout<<"输入离开的时间(00:
00)";
cin>>p->leave.hour,cin>>p->leave.min;
cout<<"车牌号为"<num<<"的车离开"<a1=p->leave.hour;a2=t->reach.hour;
b1=p->leave.min;b2=t->reach.min;
if(b1>=b2)money=((a1-a2+24)%24*60+(b1-b2)%60)*price;
elsemoney=((a1-a2+23)%24*60+(b1-b2+60)*60)*price;
cout<<"车到达的时间:
"<reach.hour<<":
"<reach.min<cout<<"车离开的时间:
"<leave.hour<<":
"<leave.min<cout<<"费用为:
"<flag=1;delete(t);break;}elsepush(temp,t);
}
if(flag==0)
cout<<"没有此车"<while(!
stackempty(*temp))
{
pop(temp,p);
push(in,p);
}
delete(p);
if(flag&&wait->frond!
=wait->rear)
{
q=newqueuenode;
q=wait->frond->next;
t=q->data;
if(q)
{push(in,t);
cout<<"车号为"<num<<"的车进入时间是:
";
cin>>t->reach.hour;cout<<"\t\t分钟为";
cin>>t->reach.min;}
wait->frond->next=q->next;
wait->rear=wait->rear;
if(q==wait->rear)
wait->rear=wait->frond;
delete(q);
}
return1;
}
//输出打印信息
voidprint(stackcar*in,stackcar*temp,linkqueue*wait)
{
charc;intcount=1;
carnode*p,*t;
queuenode*q;
p=newcarnode;t=newcarnode;
q=newqueuenode;
cout<<"\t\t1:
打印便道的车辆数"<cout<<"\t\t2:
打印停车场的车辆数"<cout<<"\t\t3:
退出打印"<cout<<"\t\t请输入你的选择";
cin>>c;
if(c=='1')
{
q=wait->frond->next;
if(wait->frond!
=wait->rear)
while(q)
{
p=q->data;
cout<<"第"<num<q=q->next;
count++;
}
else
cout<<"便道是空的"<}
if(c=='2')
{
count=0;
while(!
stackempty(*in))
{
pop(in,t);
push(temp,t);}
while(!
stackempty(*temp))
{
pop(temp,t);
cout<<"第"<<++count<<"辆车的车牌是"<num<count++;
push(in,t);
}
if(count==0)
cout<<"车站里没有车"<}
}
voidmenu()
{cout<<"\t\t******************************"<cout<<"\t\t******************************"<cout<<"\t\t\t1:
车到达"<cout<<"\t\t\t2:
车离开"<cout<<"\t\t\t3:
打印信息"<cout<<"\t\t\t4:
退出"<cout<<"\t\t******************************"<cout<<"\t\t******************************"<cout<<"请选择:
";
}
voidmain()
{
charc;
stackcarin,t;
linkqueueroad;
initstack(&in);initstack(&t);
initqueue(&road);
cout<cout<<"\t\t\t模拟停车场系统"<while
(1)
{
menu();
cin>>c;
switch(c)
{
case'1':
arrive(&in,&road);break;
case'2':
leave(&in,&t,&road);break;
case'3':
print(&in,&t,&road);break;
default:
exit(0);
};
}
}
4.调试过程
程序开始的运行图。
第一辆车成功进入的图。
车离开的图。
5.设计结论
我遇到了一些困难,但都被我一一解决,其中比较主要的几点体会总结如下。
第一,车站系统不了解。
第二没编过综合的大程序。
第三,在软件中,对于编写结构体,制作表单和数据基本表有了更深的认识。
通过这次的大作业,而且更能够把知识应用于实际的设计中,使理论与实际相结合,希望通过本次小系统的设计之后,基于对设计思想的了解,希望以后能设计出更完全、更完善的系统。
6.参考文献
1、史荧中编著.C#可视化程序车技案例教程(第二版).北京:
机械工业出版社,2013年
2、曹衍龙编著.ASP.NET数据库开发实用工程案例精选.人民邮电出版社,2004年
3、明日科技编著.C#数据库系统开发案例精选.北京:
人民邮电出版社,2007年