📄 停车场仿真程序说明.txt
字号:
变量命民规则:本程序变量命名采用了java驼峰式和C++成员说明式。列如入场卡号的请求队列m_queIncomeCars. 其中m_表示类的成员,que表示本变量类型是队列queue,IncomeCars表示请求入场车辆。
方法命名规则:方法名命名在遵循java的方法命名的基础上有自己的特点,除了用java的muter和accesser,还用了C++自己的isXX().
仿真流程:首先程序启动时显示一个对话框,提示用户输入程序仿真参数E,N.当用户完成输入点确定以后,程序会用用户输入的数据开始仿真。如果用户点取消,则认为用户放弃输入仿真参数,则放弃本次仿真。开始仿真以后显示程序界面。
本仿真采用事件驱动方式,即用多个定时器产生事件驱动仿真。现介绍驱动事件如下:
WM_ELAPSE 处理停车场务事件,该事件每秒产生一次,即每秒处理一次场务。
WM_IN 产生入场请求卡号事件,该事件每隔WM_IN_INTERVAL/1000秒发生一次。
WM_OUT 产生出场请求事件,该事件每WM_OUT_INTERVAL/1000秒发生一次。
WM_DEFENCE1_UP 开启入场杆事件,该事件在发出开入场杆请求两秒后完成开启入场杆。
WM_DEFENCE1_DOWN 关闭入场杆事件,该事件在发出关入场杆请求两秒后完成开启入场杆
WM_DEFENCE2_UP 开启出场杆事件,该事件在发出开出场杆请求两秒后完成开启出场杆。
WM_DEFENCE2_DOWN 关闭出场杆事件,该事件在发出关出场杆请求两秒后完成开启出场杆。
WM_ROLL_IN 从过道进入车位事件,在发出车辆请求有过道进入车位两秒后完成进入车位。
WM_ROLL_OUT 从车位上进入过道,在发出离开车位请求两秒后完成从车位到过道过程。
仿真原理:首先有两个定时器自动的随机产生请求入场的卡号和请求出场的卡号,然后剩余的事件都由处理场务事件来处理了。处理场务事件相当于一个车场总指挥。当他发现有卡号请求入场时他会决定该卡是否符合入场条件,如果不符合,直接丢掉该卡号,准备处理下一个卡号。否则看车库是否已满和车库过道是否空闲,如果车位没有满且过道是空的,则允许该车入场,并在此时将车场的最左面的空车位分给他使用。剩下的事就是让车通过过道和进入车位,并及时关闭车场入口。如果过道是空的而且又没有入场请求,则处理出场请求,首先是将车辆从车位上移到过道上,并向出口行驶,然后在出口出判断卡是否符合出场条件,如果符合则发出抬出场杆命令,允许其出场。否则让该车返回车位。程序运行时会写运行日志,在阅读本文后,相信能理解运行日志的内容。
存在问题:主要是界面上的问题,当输入的单排车位数较大时,靠右的车位和请求出场的车辆数显示不出来。但程序不会出错,照常运行。只是显示效果受影响。
*注意:位图car.bmp必须和生成的exe放在同一个目录下。为了便于观察和调试,我特意将求入场和请求出场的时间设的比较小,请求入场的间隔由宏WM_IN_INTERVAL决定,当前设置的是10000毫秒;请求出场的间隔由宏WM_OUT_INTERVAL决定,当前设置的是10020毫秒。如有需要可以调整这两个数值。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -