停车场仿真系统

1. 停车场仿真系统

Project:用面向对象方法和面向对象程序设计语言,设计并实现停车场仿真程序。

Platform:基于QT5.9.1开发,程序语言C++

desc: 西电课程大作业

coder:eisenhao

Time: 2019-01-23

完整源码详见:我的Git仓库

1.1. 设计说明

某企业欲为其内部停车场建设一套信息系统,已经调查到的需求如下:

  • 企业为每位员工均发放一张感应式IC卡,卡上记录员工号。该卡由专门的卡管理系统 M 制作和维护,本系统需通过 M 来验证卡的有效性。
  • 在停车场的入口和出口处分别安装一个自动栏杆、一台感应式IC卡读卡器和一个车辆通过传感器。
  • 入口处安装一个显示屏,显示当前空闲车位数量。若停车场当前没有空闲车位,则不允许汽车入场,只许场内的汽车出场。
  • 当一辆入场汽车到达入口时,用读卡器读出驾驶员的卡上信息,系统根据读出内容检查该卡的合法性:若该卡有效(需问M)&& 未被记录于当前场内卡号集合(即其车在场内的员工集合)中,即为合法卡。若为合法卡,系统命令栏杆抬起;汽车通过入口后,入口传感器通知系统发出命令,栏杆放下,系统遂将该卡卡号记录于当前场内卡号集合中;若为非法卡,则系统不发出栏杆抬起的命令,并发出告警信号。
  • 当一辆出场汽车到达出口时,用读入器读出驾驶员的卡上信息,系统根据读出内容检查该卡是否已经被记录在当前场内卡号集合中。若已被记录,系统命令栏杆抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆放下,系统遂将该卡从当前场内卡号集合中删除;若未被记录,系统不发出栏杆抬起的命令而发出告警信号,交由出口值班人员处理。

1.2. 设计要求

  • 程序开始时,停车场车位全空。此后随机产生要进场的汽车,并按上述描述进行入场仿真。
  • 汽车在停车场中的停留时间随机产生(为仿真的方便,可限定在5分钟之内,并在入场后立即设置)。到达停车时间后汽车即按上述描述进行出场仿真。
  • 定时报告(为方便,每分钟报告一次),应至少包括:当前时刻(包括时、分、秒)、当前场内车数、到目前为止的本次仿真“累计入场车数”、本次仿真“累计出场车数”、“本次仿真汽车的平均停车时间”。
  • 应将上条报告的每条信息均写入指定的运行记录文件。文件名格式为“仿真日期-仿真起始时间.TXT”。 其中<仿真日期>为yyyyMMdd格式,<仿真起始时间>为hhmmss格式。
  • 先按E=2N进行上述仿真。达到预期目标后,再分别按E < 2*N和E > 2N进行仿真。因此,要求E和N从命令行、或配置文件、或从界面上读入,不能写死在程序中。
  • 为检验系统的控制功能,应随机产生以下三类事件,并将这些事件的细节记录到上述的运行记录文件。a)前文的两类争道冲突;b)非本单位员工汽车要求入场的情况;c)需按限定条件(8)处理的情况。

1.3. 限定条件

  • 该企业的员工总人数为E人,员工号为1~E。

  • 该停车场可容纳2*N辆汽车;入口到出口的距离=N+2个车位的宽度。

  • 汽车入场、出场时的读卡均需1秒钟,栏杆抬起、放下均需2秒钟,汽车的长度为2个车位宽度,汽车的行驶速度为每秒1个车位宽度。

  • 入场的汽车尾端通过入口传感器后,该传感器通知系统放下入口栏杆。出场的汽车尾端通过出口传感器后,该传感器通知系统放下出口栏杆。

  • 汽车进入停车场后,总是选择离入口最近的一个车位停车。

  • 汽车入场到达停车位后,需再用2秒从行车道停到车位上。汽车出场时先用2秒从车位到达行车道,然后向出口行进。

  • 行车道上不允许汽车并行。a)若有进场车与出场车争道冲突,让出场车先行;b)若有出场车争道冲突,让离出口较远者先行;若与出口距离相同,随机决定让其中一辆车先行。

  • 出口值班人员处理不允许出场的汽车时,令该车返回原车位。若原车位已被占用,返回离出口最近的一个空车位。

在整个仿真过程中不考虑驾驶员走入或走出停车场。

1.4. 设计模型说明

1.4.1. 类图

parkingSimulationSystemUMLClassDiagram

主要有:停车场类、汽车类、后台管理M系统类、IC读卡器类、栏杆类、传感器类。与栏杆类、传感器类是整体与部分关系。

1.4.2. 用例图

parkingSimulationSystemUMLUseCaseDiagram

主要描述了汽车与系统与后台管理系统M、读卡器、传感器、栏杆等参与者的关系。

1.5. 仿真流程(运行流程)简介

操作简单。涉及用户的人机交互操作仅有:设定员工人数、设定总车位数(/2)、“开始仿真”、“结束仿真”、“生成汽车”按钮。

1.5.1. 设定员工人数、设定总车位数(/2)参数

设定员工人数、设定总车位数(/2) 或维持默认(10, 5)。

1.5.2. 点击“开始仿真”

点击“开始仿真”按钮。

1.5.3. 点击“生成汽车”

点击“生成汽车”按钮,此时在相对坐标(0,0)处生成汽车,添加该实例到MainWindow类的生成汽车容器中(QVector<carClass*> creatCarList),并进行各种行为控制。

1.5.4. 系统内部每1s中断响应函数

执行:获取时间并更新界面左侧显示窗口信息,仿真控制所有生成车的运动的函数,检测下1秒有无争道并处理(让弱势方延时1秒),自动关前门,自动关后门

1.5.5. 点击“结束仿真”

点击“结束仿真”按钮,关闭右侧动画框,保存系统日志文件。