毕业设计(论文)-智能车位引导系统管理平台.docx_第1页
毕业设计(论文)-智能车位引导系统管理平台.docx_第2页
毕业设计(论文)-智能车位引导系统管理平台.docx_第3页
毕业设计(论文)-智能车位引导系统管理平台.docx_第4页
毕业设计(论文)-智能车位引导系统管理平台.docx_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全套设计加扣 3012250582 2015 届毕业设计(论文)题 目:智能车位引导系统管理平台专 业:通信工程班 级:通信1102班姓 名:指导老师:起讫日期:2015-03-022015-06-182015年 06 月智能车位引导管理平台摘 要现如今,人民的生活水平提高,科技得到快速发展,汽车价格呈现出不断降低的趋势,私家车逐渐走进了老百姓家里,但是随之而来的大量的私家车和有限的停车场泊车位的矛盾变得越来越突出明显;大型停车场的出现,寻找空闲停车位也变得越来越困难。针对这个问题,本文提出了通过互联网,计算机,数据库进行车位管理的思路。通过ASP.NET语言搭建起网站,显示相关的停车位的信息,并且利用SQLServer数据库,将车位状态信息存储到数据库里,通过数据查询,在网页上显示出泊位状态,以及停车场车的停车车流量分析图。运用Dijkstra(迪杰斯特拉算法)单源最短路径算法,为司机找出最佳的停车位置。本文详细地提出了管理平台的解决方案,包括平台的服务器端和前台的设计思路,使用了MVC网站编程规范,搭建网站,通过网页显示最佳路线和停车场的车流量柱状分析图。最终方便用户查看停车场公司信息以及查询实时车位状态;方便管理员进行按需车流量分析,调整停车场运营方案。关键词:车位引导管理 车流量分析 最佳路线 网页绘图 最短路径算法Intelligent parking guidance management platformAbstractAt present, the modern technology has gained more and more popularity; the living standers have been improved a lot. With the price of car getting lower, many families possess of private cars; and here is the problem that the quantities of private cars and the limited parking location has raised some contradictions which has led to the attention from the public. At the same time, as the giant parking system coming into our view, we are facing a more serious issue that it is difficult to find a right place to park.To deal with this issue, a systematic study in this paper, and idea of using the Internet, computer and database to manage the parking system is introduced. A website is established with the help of computer program language ASP.NET and some car location will be shown on the web page. SQLServer is convinced software to save data so we use it to save the related data so that we can refer to the real-time state of car location at any place if we have equipment with access to the Internet. In addition, in purpose of getting the closest car parking location from the entrance, Dijkstra arithmetic is used.In this article, I put forward a detailed systematic and detailed architecture and the solution of a parking system server side and client side, and build the parking system website in the rule of MVC (Model, View, Controller). In the end, I introduce how to show the best car parking location and which is the best road and how to achieve the function of analyze the traffic in the web.Keyword: car parking system, traffic analyze, best route, web drawing, Dijkstra arithmetic目录摘 要IAbstractII目录III第一章 绪论11.1 研究背景和现状11.2 研究意义31.3 论文组织结构3第二章 开发语言与相关技术42.1 MVC编程42.2 ASP.NET语言、Visual Studio52.3 SQLServer数据库52.4 Dijkstra最短路径算法5第三章 系统的总体需求分析73.1 功能需求分析73.2 系统的解决方案83.2.1 串口程序设计83.2.2 网站设计93.2.3 车位状态和最短路线93.2.4 数据分析10第四章 系统的设计与实现114.1 串口通信助手的设计114.1.1 串口程序的编写114.1.2 通信协议的设计144.2 ASP.NET网站搭建144.2.1 数据存储164.2.2 数据连接174.2.3 网页界面设计194.3 车位状态和最佳路径204.3.1 Dijkstra最短路径算法204.3.2 一般处理程序234.4 数据分析26第五章 系统功能实现285.1 串口通信助手界面285.2 网站的搭建295.3 最佳车位和路线的显示305.4 车流量分析30第六章 总结和展望336.1 总结336.2 展望34参考文献35致谢36V南京工业大学本科生毕业设计(论文)第一章 绪论1.1 研究背景和现状进入21世纪之后,我国机车产业发展十分迅速,人民拥有的私家车的数量越来越多。但是随之而来的是机动车庞大的数量和停车场的有限的停车位之间的矛盾越来越突出。为了解决如今停车难的问题,各种不同类型的大型停车场也随之出现,但是停车场的巨大,导致司机找空泊位更加麻烦;而且,传统的通过人工疏导停车的方式效率低下,造成人力财力的浪费,这种疏导方式也存在一个巨大的缺点:在车流量高峰期的时候,人员不够用,但是雇佣较多的人员又不能快速雇佣到,而且,人员数量是动态的,无法确定具体数目,再一次造成资源的浪费,无法做到最优化。这种现象的不断涌现已经不仅仅局限于城市的规模的大小,它已经成为社会普遍存在的问题,制约社会的不断发展1。如何在最大程度上满足司机对停车场车辆车位停放的要求,降低停车场的运营的成本,促进社会的有序地发展,现已经成为当前的一大热点。建设合理,科学的智能车位引导系统管理平台势在必行。而且如今Internet迅速发展,为本课题通过Web网站和服务器管理停车场提供了很大的便利2。u 国外发展状况就目前而言,智能车位引导系统管理平台方面的发展比较缓慢,并且大大落后于智能动态交通的发展。在很多的学术研究中,很少关注静态交通的研究。静态交通的发展相对落后,停车场的车位信息没有得到充分的共享3。智能车位引导管理平台最早起步于一九七一年的德国。德国的智能车位管理系统利用光电装置进行车位显示,以方便车位的诱导。但是由于当时思想的限制,该项技术并没有得到相应的重视,而且技术上的实现也只是进行车位的显示,并不能给予驾驶员以具体车位的指引。由于当时技术的限制,数据封闭,无法实现共享。本课题针对以上的问题对硬件进行了改进,降低了成本,网页显示车位增加了共享性,实时性,给用户带来极大的便利。日本在1973年,也逐步建立起相应的智能车位引导管理系统。当时,位于东京中心区域首先引进并建立起商业化区域化的系统。在日本最先使用的引导系统主要是通过在商务区的重要的大道设置显示器(显示的内容是三种状态:空闲,满,关闭)来向大众提供各种状态信息;该引导系统也会通过“文字信息显示记录板”来显示最近的停车场名称。但是,由于时代限制,互联网的发展才刚刚起步,其应用和普及很受限制4。在本课题中,采用了网络数据库实现数据的存储,网页页面来显示车位状况,最终能够将封闭空间内的车位数据充分共享到互联网上,大大方便对停车场的车位进行智能化的管理。u 国内发展状况在二十世纪末,相关的智能车位导航和引导的概念和技术才开始逐渐引入国内的相关研究领域。由于国内当时的关注点才刚刚开始转到智能车位方面,较之先进国家来说,关键技术上还是有所欠缺的。但是,随着我国的经济复苏,政府的大力辅助,经过国内专家学者的努力,我国在车位导航领域已经取得了一定的成就,这些为以后的发展进步留下了宝贵的经验和科技基础。国内智能车位导航发展的第一个热点城市是北京。一九九九年,建立起“停车泊位管理信息系统”。该系统主要是通过计算机技术记录北京所有停车场信息,进而实现了停车场管理的网络化。目前,大多数的管理系统都是单纯的基于硬件手段,对车位的数目进行实时的跟踪显示,体系封闭,无法实现数据共享和网络化的商业管理,资源利用率不算太高,造成了不必要的浪费,仍然不具备智能快速泊车引导功能。对于车辆的统计采用人工记录的方法,耗费人力物力财力,总体的车流量的统计更是很不方便。而且,大多的停车场都没有最短路径提示的功能,无法让来到停车场的司机在第一时间内找到最佳的停车路径,这样就会导致在庞大的停车场内,司机无法快速定位最佳空闲泊位,白白耗费时间精力,给城市交通带来不少的压力。因此,目前智能停车系统管理平台作为智能交通系统(ITS ,Intelligent Transport System)中的一个重要成员,具有很大的发展前景5。目前车位引导系统只是部分的智能化6,本课题注重硬件终端的数据采集,通过现代化的数字通信技术,将数据存储到服务器的数据库上,利用普及度比较广的互联网实现车位信息的共享,使得用户可以利用可联网终端,登陆已经建立起来的网站,进行车位信息查询。在停车场最佳车位显示方面也有相关的最短路径算法,但是使用的是遗传算法,该算法原理上比较复杂,实现相对困难,本课题准备采用单源最短路径(Dijkstra)算法来寻找最短的停车路径,相比遗传算法更好理解,代码量更少。由于课题建立起了网站,可以在网站上添加相关的停车场信息,提供更多的商业服务。1.2 研究意义智能车位引导系统管理平台作为停车场这个大系统的最核心、最重要的组成部分,其利用电子电路控制技术,现代数字通信技术,计算机信息技术等高新技术对停车场的停车方式进行管理,深入改造7。该平台最大的,最直接的功效在于该系统能够在合适的时间内,以最直接的方式向驾驶员提供准确的停车场空泊位位置和最佳停放路线,最大程度大的减少驾驶员寻找空闲泊位的时间,从而会很大的缓解城市道路的拥堵。同时减少乱停车的现象。在市场竞争越来越激烈的21世纪,系统的人性化更能受到人们的喜欢,所以,智能车位引导系统管理平台在未来的市场竞争中有很大的竞争潜力。1.3 论文组织结构第一章,绪论,介绍智能车位引导系统管理平台的研究背景以及本文的主要内容。第二章,开发语言和相关技术,介绍智能车位引导系统管理平台的核心编程技术。第三章,系统的总体需求分析,提出在ASP.NET(C#)语言环境下网站搭建,算法实现,数据分析的过程和设计方案。第四章,系统的设计与实现,对智能车位引导系统管理平台进行设计和实现的介绍,对系统的运行流程进行描述,并列出部分关键代码。第五章,系统功能实现,对智能车位引导系统管理平台实现最佳车位的显示,路线提示,数据分析、单片机联调测试和功能展示。第六章,总结,阐述智能车位引导系统管理平台的主要的研究内容和研究成果,分析目前尚未解决的问题,并对今后该系统的发展前景进行展望。第二章 开发语言与相关技术2.1 MVC编程MVC指的是Model View Controller,这是一种编程规范,是模型(model),视图(view)和控制器(controller)的缩写,用一种将业务逻辑、数据、界面显示完全(事实上,在实际的编写过程中无法做到完全的分离)分离的代码组织方法。该规范将业务逻辑层进行模块化的划分,在个性化设计、定义用户界面和进行用户界面交互设计的时候,就不需要对业务逻辑层进行重新编写。MVC规范被发展起来并可以通过一个逻辑性的图形化用户界面的结构映射传统意义上的输入、输出和处理功能。具有重用性高,耦合性低,有利于软件的工程化管理,可维护性高,部署快的优点8。u Model(模型)Model(模型层)是一般的应用程序的核心部分,比如数据库存储的记录列表,这是应用程序在运行的过程中处理程序数据逻辑部分的环节。通常模型的对象在程序中的职责是从数据库中取数据,向数据库中存储数据。在本课题中,新闻的题目,类别,修改等,以及本课题想要实现的主要的功能:车位的显示,车流量的统计,这些功能的实现都离不开Model层。u View(视图)View(视图层)是网页专门用来显示数据的一个层,这些数据指的是各类数据库的数据,视图层的创建通常要根据模型数据创建。在本课题中,车位的显示方法便属于视图层的职责。u Controller(控制)Controller(控制器)是专门用来处理输入功能的,即向数据库写入数据,其功能相当于视图层和模型层的中间桥梁,负责二者之间的联系,控制器的一般执行过程就是负责从视图中去读取用户数据,控制客户端的用户输入,并同时向模型层发送数据。2.2 ASP.NET语言、Visual StudioASP.NET(C#)是属于微软的一项技术,是.NET Framework重要的组成部分,是一种服务器端的脚本技术,该脚本技术是一种可以使得嵌入网页的脚本可由Internet服务器执行,它可以在进行HTTP请求文档的时候再在WEB服务器上进行动态的创建。ASP实质上是指Active Server Page(动态服务器页面),运行于IIS(Internet Information Server)之中的程序。由于ASP.NET是一种基于通用语言的编译运行的程序,其功能的实现完全的依赖于相应的虚拟机,所以它拥有很好的跨平台性,由ASP.NET语言构建出的应用程序可以运行在近乎所有的平台上。进行ASP.NET语言编写的一般集成编程工具便是Visual Studio,功能强大,而且方便进行代码的调试纠错,对于网站搭建十分方便。2.3 SQLServer数据库在此处所说的SQLServer是指由Microsoft公司开发的可在多平台上运行的数据库管理系统。其具有使用便捷,集成度高,伸缩性好等优点,安全性高,可跨平台运行。该系统是一种不是真正的去关心客户机程序所正在运行的位置的系统。事实上,就SQLServer而言,即使在同一台电脑上既运行应用程序,又运行数据库,其运行模式仍旧是C/S模型。在使用的时候,一般不需要进行数据库服务的设置,也就是说,不需要直接在数据库里面进行编程,所需要做的是利用数据库的连接字符串,配合相应的编程语言,引入适当的动态链接库就可以进行数据的存储和访问9。2.4 Dijkstra最短路径算法Dijkstra算法是单源最短路径算法,该算法主要用来计算从图上的某一个顶点开始向其余各个点的最短路径的算法,最开始该算法的主要目的是为了解决有向图中的最短路径的问题10。该算法的最大特点是以起始点为中心由内向外一层一层的拓展,直到拓展至终点为止。从本质上看,这个算法就是一种“贪心”算法,计算好每个状态下的路径长度,然后找到这些状态下的最小的值,最终确定在该最小值的情况下,所使用的最短的路径。当然还有其他的最短路径算法,A*算法,SPFA算法,Bellman-Ford算法,以及Floyd-Warshall等,这些算法应用的情况更加的一般,而且算法编写上也相对复杂,但是本课题的Dijkstra算法编写上相对方便,而且针对本课题,其余的算法使用起来相对复杂,因此Dijkstra算法更加合适本课题的研究。第三章 系统的总体需求分析当今社会的私家车的数量增加,生活节奏加快,建设一种能够快速为司机进行空闲泊位导航的停车场成了当今的热点。现在的停车场规模正变得越来越大,司机在停车场内寻找空闲的泊位并不容易。现在的系统需求是一方面能够通过现代的计算机技术,数字通信技术实现停车场的智能化管理,给司机带来的是更加友好的服务。在机车进入停车场的时候能够通过屏幕显示出最佳的停车位和最佳的路线并且能够给司机提示。能够让司机以最直观的,最有效率的方式得到最近的路线,节省司机寻找车位的时间。另外一个方面,对于停车场的运营商来说,需要能够了解到停车场的车位状况,能够根据车位状况适当的调节停车场的运营。这就需要软件能够根据硬件发送过来的数据进行统计,将相关的数据存入数据库,加以处理,分析,做成相应的柱状图,方便管理者的数据化分析。3.1 功能需求分析u 软硬件数据通信该部分负责硬件部分数据和数据库的连接,可以通过编写串口程序和约定好的通信协议实现数据通信传输,数据存储。u 停车场信息显示通过建立起一个商业化网站,显示停车场信息,可以推广停车场业务,向外界展示该停车场的车位规划,运营概况,向用户提供车位信息。用户可以通过登录停车场网站自行查询停车场的泊位概况,方便自己的停车场的选择。u 显示最佳车位,提供最佳路线该项功能要求汽车进入停车场的时候停车场屏幕能够给司机显示最佳的停车车位,并且自动画出最佳的进入路线。这需要对Dijkstra算法进行研究,同时与本课题研究的实际目的相结合,适当对原算法进行优化。本课题中,由于停车位排列规则,而Dijkstra算法的本质是一种“贪心”算法的体现,需要对每个点进行查询,在此,通过限定范围,降低查询的次数,提高算法的效率。u 数据分析进行数据的分析,要统计每天的车流量。为了方便数据分析,本课题将每天的统计分为十二个时段,对每个时段的数据进行统计,这样可以把握每天的车流量走势,然后统计每个月的车流量,以此类推,就很容易得出年度车流量统计。最后,可以计算出每天是星期几,存入数据库,使之与相应的日期对应。最终,系统就可以实现数据在时间上的纵向对比和横向对比。3.2 系统的解决方案在本课题中系统可以分为数据接收,数据处理和数据显示三部分。通信过程通过软件串口编程实现硬件和数据库的数据通信存储。网站通过Dijkstra算法计算出最佳路线显示车位状态,并且进行车流量的柱状图分析。下图的数据传输中的数据是指硬件传送过来的车位数据。系统的总体设计方案如图3-1所示:车位状态表表路线距离表车流量分析表通信协议车位信息数据数据库数据传输数据传输数据处理串口程序当前车位状态总览图按需车流量柱状图分析最佳路线指示图Dijkstra算法网站显示图3-1 系统的总体设计方案3.2.1 串口程序设计在进行软硬件数据通信助手编写的时候,本课题使用的是C# Winform编程,使用Winform中自带的串口类,大大方便了编写工作,通过设置串口的端口号,数据位,停止位,校验位等参数,使用委托事件,将数据的接收和主线程绑定,实现实时接收和数据处理。数据通信方案如图3-2所示:硬件接口通信协议解析判断车位状态判断统计记录是否存在更新车流量分析表更新车位状态表图3-2软硬件数据通信设计方案3.2.2 网站设计在进行网站搭建的时候使用的是MVC的编程规范,将视图层,模型层,控制层完全分离开来,编程成为模块化的工作,提高系统开发效率,为后期的检错,修改,优化提供不少便利。网站搭建的总体设计方案如图3-3所示:人机交互用户获得反馈控制器视图模型数据库起点用户进行下一步操作图3-3 网站搭建的总体设计方案3.2.3 车位状态和最短路线该环节的重点是数据的提取方法,好的提取算法可以大大减少网页车位提取的工作量,和路线提取的工作量。本课题先通过数据库车位状态表提取出数据,画出车位状态图,然后通过Dijkstra算法计算出最佳的路线,实现车位路线导航。车位状态显示和最佳停车路线的显示如图3-4所示:车位状态表数据提取分析Dijkstra绘制车位状态绘制最佳路线图路线距离表图3-4 车位显示最佳路线显示设计方案3.2.4 数据分析进行数据分析的时候要通过自己书写柱状图控件,做成一般处理程序,然后绑定数据后就可以方便的进行程序调用,实现数据分析。数据分析的设计方案如图3-5所示:车流量分析表按照年份求车流量和按照年份月份不同求和按照年月日的不同求和按照月份求平均按照星期求平均柱状图类数据绑定用户需求网页加载显示图3-5数据分析设计方案第四章 系统的设计与实现智能车位引导系统管理平台网站搭建采用MVC编程规范,在进行车位状态显示的时候使用微软自带的画图函数库,以及使用便捷的一般处理程序,最终通过Dijkstra算法找到最短路径,显示到网页上。数据分析同样使用画图函数库,只是在进行数据库取出数据的时候要进行不同的计算以实现数据绑定显示。最后的通信助手主要使用串口编程技术,以及事件的委托。4.1 串口通信助手的设计4.1.1 串口程序的编写串口通信助手在本课题中负责的是硬件部分和数据库的连接,负责分析接收到的数据,更新数据库的泊位状态信息,更新车流量等任务。在进行该部分的编写的时候利用了C#的一个强大的功能:编写Winform应用程序。当然,在编写该窗体应用程序的时候还是要进行命名空间的引用System.IO,System.IO.Ports, System.Runtime.InteropServices。为了通信助手的使用方便,将其串口设置写入到配置文件config.INI中,系统在第一次打开的时候会自动检测根文件夹下面是否存在配置文件,如果不存在将自动根据程序内部默认值初始化,然后将初始化的值写入到配置文件中,然后当完成串口通信程序的配置后,点击保存按钮,程序便会自动保存配置文件到根文件夹下面。本课题使用了网上写好的dll动态链接库文件,然后添加到解决方案中,编写程序的时候导入DllImport(kernel32),直接调用其写入文件函数和获得字符的函数:WritePrivateProfileString和GetPrivateProfileString,这两个函数的参数分别是字符串类型的section,关键字,定义,大小,以及最终的配置文件的相对或者绝对路径。以上的这两个文件程序是已经包含在函数库内的,但是有个写入函数要自行编写public string GetContentValue(string contentSection, string contentKey)函数,来保存设置好的数据。但是,在程序的窗体载入的时候,程序会自动启动编写好的端口扫描函数Seri_Port.SetPortNameValues(cbBoxDKH),这个函数会扫描电脑,得到可用的端口,将相应的字符串型的端口号转换成相应的端口号类型,添加到窗体的端口号下拉列表中供用户选择。这是设置端口号函数:SetPortNameValues(ComboBox obj)。课题中使用的是combox控件,但是为最终适应不同的控件的需求,需要使用obj类型参数传递,然后通过obj.Items.Clear()清空控件的内容,以防出错,接着使用foreach (string str in SerialPort.GetPortNames()和obj.Items.Add(str)来遍历电脑可用的端口号,实现combox添加端口号的功能。本课题设计了停止位,校验位,波特率,数据位的枚举类的设计,将其封装在PortHelper.cs类中。初始化该类后便可以使用电脑上已经存在的端口号。因为函数库里面并没有封装停止位和波特率的枚举类,下面进行自己的设计编写public enum SerialPortDatabits : intBits5 = 5,后面的关于枚举类数据位的设置就很容易类推出,分别是:Bits6 = 6, Bits7 = 7, Bits8 = 8,分别代表数据位6、7、8。波特率的枚举类public enum SerialPortBaudRates : int 和数据位的类似。但在数据通信的时候,从硬件端接收到的数据是十六进制的,需要将十六进制的数据转换成byte类型的,这样才能正确的进行数据处理。首先进行空格的移除操作,以防止数据解析的时候有错误的数据解析出来,同时也是为了精确的确定每一位数据。Rec_msg = Rec_msg.Replace( , )串口数据发过来的时候,总是以一个数据位加一个空格位的格式发过来的,当空格去除之后byte comBuffer = new byteRec_msg.Length / 2,在数据对应的时候,要做的便是对数组的index索引值除以二,同时将对应的数据转换类型:comBufferi / 2 = (byte)Convert.ToByte(Rec_msg.Substring(i, 2), 16),然后存到新的数组中,并返回该数组的第一位的指针,便得到最终的想要的数据。在这里需要注意的是for循环的时候自增为2:for (int i = 0; i Rec_msg.Length; i += 2)。在本课题中,进行数据接收的时候,需要进行实时的检测,因此有个线程一定要时时刻刻的运行着,同窗体线程一并运行。这里可以采用两种方法,第一种是使用timer计时器来实现监视功能,定义好timertick的循环周期,然后在循环周期内编写自己的数据处理函数,但是这样带来一个问题,这样的方法中,周期是一个确定的数值,并且在确定数值的周期间隔之间有很多的不可确定时间,在这之间可能会导致数据的丢失,影响数据的采集。所以在这里采用一种程序编写代码量比较多,但是稳定性,安全性相对前者都很高的方法,以保证数据的正常接收。下面简单介绍委托:数据类型参数化本质是指该方法接受某个类型的参数且这个参数的类型是确定的,方法本质上是把某一个类型参数化;因此,委托就是把方法作为一个确定类型的参数添加到一个委托事件里面,实现方法的参数化。单从语法上看,定义委托事件的形式和定义方法的形式很相似,只是相对于方法多了delegate关键字。下面是声明委托的语句:public delegate void ReceivedDataEventHandler(ReceivedDataEventArgs e);首先要构造一个数据处理的代理,和一个数据处理的事件参数类,只要将要执行的函数写在如下代码的函数体内:public class ReceivedDataEventArgs : EventArgs。下面的代码中,函数体内是要执行的专门用来接收字符串的函数:public ReceivedDataEventArgs(string m_DataReceived)this.ReceivedData = m_ReceivedData;下面的函数是当以十六进制接收的时候,必须要用该函数,将相应的数据正确接收,可以实现byte类型到字符串的转换,实质上,这个函数是对上述的函数的一个重构,以实现对不同数据类型的接收,可以是使用同一个函数对不同的数据类型进行接收而不需要太过关注函数的参数类型是什么:public DataReceivedEventArgs(byte m_DataRecv)this.DataRecv = m_DataRecv;写好数据处理的代理之后,写出相应的数据处理函数,将在处理函数里面添加数据处理函数,但是,真正放在主函数体里的是要注册的委托,如下:conn.DataReceived += conn_DataReceived;4.1.2 通信协议的设计本课题由于通信的数据量相对较少,所以使用的通信协议也比较简单。下面阐述串口数据通信格式,如图4-1所示:AA99长度X坐标Y坐标区域内ID车位状态校验位图4-1 数据协议格式数据格式中,其头是固定的AA 99这两个均为十六进制的数据,每次数据发送过来的时候都要检测数据头的格式是否符合事先规定好的格式。另外,使用两个数据头对准确度有保证。接下来是长度,这里指的是后面的区域横坐标,区域纵坐标,区域内ID,的数据位的长度。也就是说,这里只要明确了数据位的长度就可以确定发来的是几个车位的车位数据。比如AA 99 04 00 00 00 01 37就表示在00区域的0号车位的车位状态是有车的。如果是AA 99 08 00 00 00 01 01 00 00 01 37表示的是00区域的0号车位有车,10区域0号车位有车。这样的方式定义使得数据的长度更加灵活。最后的一位是数据的校验位,主要是为了数据的检错。4.2 ASP.NET网站搭建在进行网站搭建的时候使用的是MVC的编程规范,将视图层,模型层,控制层完全分离开来,编程成为模块化的工作,提高系统开发效率,为后期的检错,修改,优化提供不少的便利。而且,由于本课题中网页比较多,在有些的内容上是有重复的部分的。软件部分采用先编写一个母板页的方法,在以后编写类似的网页都继承自这个母板页,后期要做的只要更改新建网页的主体部分。减少了编写网页和网站开发的繁琐度。网页编程模式关系和作用如图4-2所示:模型封装应用程序状态相应状态查询通知视图改变控制器定义应用程序行为用户动作映射成模型更新选择相应视图视图解释模型模型更新请求发送用户输入给控制器允许控制器选择视图状态查询状态改变通知改变视图选择用户请求事件方法调用图4-2 网页编程模式关系和作用图下图4-3是课题项目的基本组成:图4-3网站的工程组成结构这是本课题中的项目组成,采用的就是网站开发的一般架构,三层开发。其三层结构分别为:1、表示层(USL, user show layer);2、业务逻辑层(BLL, business logic layer);3、数据访问层(DAL, data access layer)。在本课题中由于工程相对小,所以三层开发模式和MVC开发的代码规范完全重合,可以认为是统一思路的开发模式。如图4-4显示的是BLL层中封装的各种方法:图4-4 BLL层中封装的部分方法在工程的业务逻辑层(BLL)里,存放了对数据的存储等的具体的处理函数类,这些类主要用于对具体问题的操作。比如从数据里面取出停车场的各种介绍类型的信息,把网页页面的用户请求转达到数据库端。该层是课题在进行网页设计搭建的时候的核心部分,可以说是最为关键的部分,起着承上启下的作用。数据访问层主要是对原始数据(文本文件中的数据或者数据库中等存放的数据的形式而非其本身)的操作层,而不是指原始数据本身,强调的是数据形式,也就是说,是对数据的“样子”的操作,而不是对数据库的操作,该层为BLL层或USL层提供数据服务。数据访问层是DAL层,这里主要是进行数据库的访问,在这里编写ASP.NET网页的时候,需要引入一些命名空间,如图4-5所示:图4-5 工程引用的命名空间4.2.1 数据存储在数据存储方面,使用的是微软公司的SQLServer 2008,用来存储停车场的相关介绍信息,停车场的车位位置,车位状态,车流量等信息。表4-1 数据库停车场信息表(dbo.content)字段类型描述Idint停车场信息类别ContenttitleVarchar(100)信息名称Contenttext信息内容表4-2 数据库车位信息状态表(dbo.carLoc)字段类型描述carLoc_Xint车位区域的X轴坐标carLoc_Yint车位的区域Y轴坐标carLoc_Idint车位区域内IdcarLoc_Stateint车位状态:有,无,故障carLoc_Distanceint车位之间的距离表4-3 数据库车流量表(dbo.Traffic)字段类型描述numYearint字段年numMonthint字段月numWeekint字段星期numDayint字段日numHourint字段时间段numTrafficint车流量4.2.2 数据连接由于要使用数据库,所以要将Visual Studio的System.Data的命名空间和System.Data.SqlClient的命名空间分别添加进工程中,工程代码只有这样才可以使用数据库的连接,并进行数据库数据的存取。下面,将对数据访问层的核心代码的设计进行阐述,下面的代码写是一个public DataTable SelectAll()的函数的主要内容:通过DataTable dtable = new DataTable()来新建一张新的数据表格,而使用的数据库操作的字符串是select语句,从category中选择数据字段,最后使用ExecuteQuery(sql, CommandType.Text),得到一张数据表格。在这个函数段中,主要从数据库进行停车场的信息的提取,把所有的停车场的信息取出来。其中DataTable就是属于System.Data.SqlClient的命名空间里的数据类型。在这个函数中,可以看到一个ExecuteQuery 函数,这个函数是自行书写的一个函数,主要是根据传过来的参数,实现相应的增删改的SQL语句或者存储过程的函数。在下面对这部分函数的核心成分进行阐述。这部分代码是工程的public int ExecuteNonQuery(string cmdtext, SqlParameter paras, CommandType ct) 函数的主体部分,返回的是一个执行过后修改的数据库的字段的条数值。using (cmd = new SqlCommand(mycmdtext, GetmySQLConn()函数段,是在网页编写的时候,不经常使用的一条语句,但是在需要使用一个对象,这个对象需要占用很多的资源的时候,使用完成后马上释放相应的资源,使用这个using语句是被建议的。这样写是为了避免资源使用之后,释放不够及时导致的未知冲突或者其他性能问题。当然这样书写最终还是为了保证IDisposable对象的语法方便。最后分别加入CommandType命令,传入到cmd中,执行ExecuteNonQuery()。.NET Framework数据提供程序和DataSet的关系的简单介绍:.NetFramework数据提供程序:1、Connection对象2、Command对象3、DataReader对象4、DataAdapter对象数据库服务引擎DataSet:DataTableConllectionDataRelationCollection图4-6.NET Framework数据提供程序和DataSet的关系图在本课题中,为了方便进行网页的部署,而不需要对数据库的用户名和账号密码固化在服务器代码中,将数据的连接字符串写到web.config文件中,这样,当要把服务器网页部署到不同的服务器上的时候,只需要修改web.config中的数据库的帐号密码。下面是网页在数据链接层写的读取web.config文件数据库帐号密码的代码段:string Str = myConfigurationManager.ConnectionStringsmyconnSQLStr.ConnectionString;相应的在web.config中只需要在configuration的标签之间加入如下的代码: 4.2.3 网页界面设计网页设计的时候,采用的是通用的网页前端设计模式CSS+DIV。也就是说通过CSS的样式设计,控制每个DIV的样式,也可以在DIV的内部通过自定义控件或者样式的Id或者class类来实现CSS的样式的控制。在本课题中,使用CSS进行网页眉头背景的设置,模块的边界分别通过margin属性中的上下左右的距离进行设置,在一些图片显示的地方,利用borderstyle进行外边框的显示和隐藏的控制。还有,网页中的文字的显示设置,包括文字的字体,大小,粗细,均通过网页中的CSS样式表控制。通过CSS样式表的这个功能,在此将网页设计的外观和内容组合分离开来。在内容组合上,用的是html的代码。在进行html设计网页内容的时候,分别通过标签,标签,标签限制了内容的等级。其中最为关键的是:当前位置:首页 数据分析,在此处的代码中,定义了一个标签,里面显示的当前的网页位置导航,每个标签是一个超链接,连接到网页。网页上的文字超链接一般使用来标记。其中在网页之间传递的时候,有时需要传递一些参数,那么就用到lx.aspx?contentid=20&caid=8这一类代码参数传递的写法。在本课题中的参数传递均使用此法,传递的参数是contentid=20和caid=8。当然虽然给出了这些参数,但是后台的网页代码中还是要进行如下的绑定:首先判断if (!Page.IsPostBack),接下来提取caid,string caid = Request.QueryStringcaid。Page.IsPostBack主要是用来检测网页是否是第一次加载的语句,如果说是第一次加载,则返回true。而Request.QueryStringcaid就是专门用来获得lx.aspx?caid=8中caid的值的语句。通常的情况下,也会在该函数体内进行数据库对网页数据源控件的数据绑定。4.3 车位状态和最佳路径4.3.1 Dijkstra最短路径算法Dijkstra算法通常被称作单源最短路径算法,该算法主要用来计算从图上的某一个顶点开始向其余各个点的最短路径的算法,最开始该算法的主要目的是为了解决有向图中的最短路径的问题。该算法主要特点是以起始点为中心逐渐由内向外一层一层的拓展,直到拓展至终点为止。当然还有其他的最短路径算法,A*算法,Bellman-Ford算法,SPFA算法,以及Floyd-Warshall等,但是其他的算法应用的情况更加的一般,而且算法编写上也相对复杂,但是本课题的Dijkstra算法编写上相对方便,而且具体情况下,使用其余的算法复杂度较高,因此,本课题使用的Dijkstra算法更加合适本课题的研究。单就算法的本身来说,它并不是按照惯常的思维习惯先求出从最初的原点到定义的第一个点的最短的路径,接着再找到一条路径到达第二个点,使之又是最短的,以此类推,最终求出到最后一个点的最短路径,而是通过求解从原点出发的各个有向的路径的一个按照从小到大的顺序排列,虽然有些麻烦,但是,该算法最终还是能够通过排序,找到从原点到达途中各个节点的最短的路径,从本质上看,该算法是排序算法的一个副产品。Dijkstra算法设计过程(算法流程图如图4-7所示):(1)该算法要包含两个重要的数据集合,分别为、,首先要将已经计算出的最短路径的节点存储于中,那么,便是还未找到最短路径的节点集合。(2)算法最开始时将定义的起始点放入中,同时要把各个点到起始点的最短路径初始化;如果路径连通,节点之间的距离就设置为当前连接路径的长度,否则,设置为无穷大。(3)该算法在执行的过程中,不断的寻找集合里面的最短的路径,将内的路径逐个转移到中,当为空集的时候,算法结束。(4)在从集合中找到了最短路径节点和最短路径之后,就要对集合进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论