新闻

公司动态 行业资讯

一、实验内容

  设有一个可以停放n(n=5)辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制模拟该停车场的管理的程序。

  停车场应用栈的数据结构来实现,停车场未满时,每进来一辆车就应该给车记录进来时间

  当有车需要出停车场时应该,将前面的车都存放在另一个栈中,待该车出去之后,则应根据其记录的进停车场时间与当前时间计算停车费。再把另一个栈中的车辆依次放入停车场栈中,此时,若便道上有车,则应让便道队列头的车入停车场的栈。

  包括车辆进出管理与系统管理等功能模块,可根据车辆停放时间及收费标准自动收费。用户需要事先办理停车卡并充值,停车卡分优惠卡和普通卡两类。

  信息查询:某时间段的出入场信息,当前在场信息,车辆历史停车记录及收费信息

  管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息、停车卡充值,查询计费标准。

  1、查看空位  2、停车 3、系统计费 3、管理员查看停车记录 4、查找车辆信息

  前段时间因为课程要求,所以做了一个停车场管理系统,主要为mfc+oracle+opencv,简单来说,也就是可视化界面+数据库连接+车牌识别。

  在继续阅读下去的同时,我先声明,这里我的车牌识别由于时间的问题,是调用了别人的接口,所以想研究车牌识别的同学可以跳转下这边详细的车牌识别.好了废话不多说,进入教程。

  本项目采用C++编程实现停车场管理系统,其主要功能包括:车辆入库、出库、车辆计费、信息查询、权限管理、摄像头调用与拍照等。课题可分为三个个模块:界面显示、车牌识别、数据库操作。界面使用MFC编程绘制,通过账号密码登录,可显示管理员-游客等不同权限的功能界面,其中管理员可对车辆信息处理,选择车辆入库时,程序调用摄像头拍照进行车牌识别,自动记录车牌信息与入库时间;当对车辆信息查询时,程序连接Oracle数据库并进行数据读取,返回信息至List控件中显示;摄像头的调用与拍照通过opencv视觉库实现,车牌识别系统基于EasyPR工程实现,通过形态学操作、梯度计算、阈值分割等实现车牌定位,使用NN训练实现字符识别等,数据库的访问与信息存储通过微软提供的ADO接口对oracle进行数据操作。

  查询显示的车辆数据存于oracle中的,车辆入库与出库时的车牌号码是通过车牌识别得来的。

  oracle用来建表存储数据,sql developer以可视化的界面查看数据库内的数据。

  代码中的xe是数据库的SID,system是用户名,123456是密码,请记得修改。

  MFC中的对话框分为了模态对话框与非模态对话框,具体区别可以百度搜搜看,下面讲解一个子界面的创建至显示过程。

  如果需要创建非模态对话框,则需调用Create函数与ShowWindow函数

  原本想自己写一个车牌识别的,但由于时间的问题,最后只能去调用EasyPR的接口,MFC工程是使用VS2012写的,但EasyPR只支持VS2013且需要配置opencv一些的库,于是下了个2013绿色版,下载了EasyPR懒人版(无须配置opencv,可在EasyPR github中下载到,具体链接)。由于界面与识别代码因版本的原因只能作为两个程序,于是采用文件的方式进行数据传递。车牌识别代码每次识别完后将结果存入某个文件,姑且称为’cardInfo.txt’,每次车辆入库或出库子窗口初始化时就去读取’cardInfo.txt’,并将车牌号显示于编辑框中。

  只是我的工程还是有问题,程序跑不起来,所以我还是采用手动的方式让车牌识别程序运行。有点无奈啊~~。

  2、跑前请确保已安装OPENCV库,并在VS内配置好依赖库,具体opencv配置可参考如下:

  3、满足以上条件基本上可以将工程跑起来,运行过程中可能会涉及连接数据库出错,请检查数据库服务是否开启,可尝试用sql developer连接测试。