基于ASP的公交查询系统的设计与实现

基于ASP的公交查询系统的设计与实现[java毕业论文下载]

基于ASP的公交查询系统的设计与实现

摘    要

随着经济的快速发展,城市规模的扩大和人口的增长,城市交通问题日益突出。与此同时,由于互联网的普及,网络给人们带来了很多便利,比如人们借助网络查询公交线路。在线查询公交信息,如今都被广大用户所接受。而我国目前的城市公交乘客信息系统发展却不够先进,广大乘客可以获得信息的途径不多,这给广大出行人士带来不便。针对这种现象,为加快发展城市公交信息化,设计一个城市公交查询系统具有一定的现实意义。

该公交查询系统基于ASP开发。在系统开发的过程中不仅考虑了公交运营的实际情况和不同公交乘客的实际要求,而且还分析了系统应该具有的功能。该基于ASP的公交查询系统主要包括查询模块(包括按特定站点查询,按起终点查询和按车次查询)和后台管理模块(包括公交站点管理和公交车次管理等)。

 

关键词:公交;查询;ASP;数据库

 

Design and Implementation of a City Bus Route Query System Based on ASP

Abstract

 With the development of economic, enlargement of city scale and explosion of population, traffic problem stands out in big city. Meanwhile, with the popularity of Internet, network has brought people much convenience. People can query city bus route through network. And querying city bus information online has been accepted by a lot of users nowadays. However, the passenger information system in our nation is still in a low level, which makes passengers obtain bus information in few ways and makes people out inconvenient. Facing this phenomenon, designing a bus route inquiry system is very important, and which will help to accelerate the development of city bus system.

The bus route inquiry system is based on ASP. The development of this system not only takes the present condition of bus running and the needs of passengers into consideration, but also analyzes functions the system should implement. The main modules of the system are query module and management module. Query module includes querying by certain stop, querying by between jumping-off stop and end stop and lines query. And management module includes bus stops management and lines management.

 

Key words: bus;query;ASP;database

 

目录

论文总页数:19页

 

1  引言 1

1.1  课题背景 1

1.1.1  国内外发展与现状 1

1.1.2  我国目前公交查询系统面临的问题 1

1.2  智能公交查询系统的功能及特点 1

1.3  本系统的设计思想及优势 1

2  相关技术介绍 1

2.1  ASP 2

2.2  SQL Server2000 2

2.3  Browser / Server模式 3

3  公交查询系统系统设计与实现 3

3.1 系统实现的主要功能 3

3.2 系统总体设计 3

3.3  数据库设计 4

3.4  主要功能模块的设计与实现 7

3.4.1  登录模块 7

3.4.2  查询功能模块 7

3.4.3  后台管理功能模块 13

4  系统关键功能点测试 15

4.1  用户登陆测试 15

4.2  查询功能测试 16

     17

参考文献 17

     18

     19

 

 

1 引言

1.1 课题背景

1.1.1 国内外发展与现状

交通问题一直是城市管理的难题之一,而交通问题直接影响到人民的工作和生活。随着时代的进步,信息化既是解决交通问题的重要手段,也是交通行业的发展方向。国外较发达的国家的公交查询信息系统发展地相对成熟,他们采用结合所有城市交通工具及其所经的路线、并且与每一站点周围的建筑和公共设施联系起来的方式进行信息查询,确实大大方便了市民的工作及生活。我国目前的公交查询系统也在不断完善,从无到有,从原始的人工查询发展到现在的网络信息查询,其变化之大,亦不可小觑。为了进一步实现公交系统信息化与广泛化,我国有些地方政府还与电讯公司签订智能交通信息化战略合作项目,足以见得交通信息化对社会发展的重要性。

1.1.2 我国目前公交查询系统面临的问题

随着改革开政策的实施,我国城市化进程日益加快,人民生活水平不断改善,对社会物质基础的要求也相对提高,公交信息系统已和人们的日常生活密不可分。但是由于我国的特殊国情,目前的公交查询系统尚未能发展到尽如人意的水平,并没有达到理上的要求。其中具体存在以下一些问题,诸如查询系统不够简洁明了,用户通常要辗转查询才能获得需要的信息;系统信息更新得较慢,这大大降低了用户得查询效率;信息的有效性和准确度有限,不能给出行人士提供最可靠的信息。这就要求设计出更加符合用户需求的系统。

1.2 智能公交查询系统的功能及特点 

智能公交查询系统,目前世界交通运输领域的前沿研究课题,主要是为了给用户在出行及交通方面带来一定的方便。系统能够根据用户给出的出发站和目的站自动搜索合适的乘车方案,支持上下行线路,特定站点等特殊线路的智能查询。给出的乘车方案包括直达车和需要转车一次的具体换乘方案,能够在短时间内给出有效的乘车方案供用户参考具有高效、准确等特点。

1.3 本系统的设计思想及优势

本系统是专门用于用户对城市公交信息的查询以及管理员信息的录入,修改,删除的ASP应用程序。它应该具有开放性,方便性和灵活性。管理员可以轻松的对系统信息进行更新与维护,用户也可以根据自己的需求选取查询的方式。使用B/S模式开发本系统比较合适,服务器端采用SQL数据库系统和ASP组件可构成查询的应用服务系统;客户端采用浏览器来完成查询过程,同时可进行远程维护和管理。

2相关技术介绍

基于系统的设计思想和功能的实现,本系统采用ASP和SQL2000进行相关的开发和设计。

2.1 ASP 

ASP,Active Server Pages,活动服务页,是微软的一种用以取代CGI(Common Gateway Interface)通用网关接口的动态网站服务器端脚本技术,可以与数据库和其他应用程序进行交互。ASP本身并不是一种脚本语言,它只提供了一种使镶嵌在HTML页面中的脚本程序得以运行的环境。我们可以通过ASP结合HTML语言、ASP指令和ActiveX元件以及数据库等方面知识,使用自己的Web服务器创建并运行动态的交互式Web站点。用户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active Server Pages所使用的脚本语言(VBScript或Jscript),均在Web服务器端执行,用户端的浏览器无需执行这些脚本语言。浏览器浏览ASP网页时,Web服务器就会根据请求生成相应的HTML代码,然后返回给浏览器,这样浏览器端看到的就时动态生成的网页。ASP是基于Web的一种变成技术,它可以完成以往CGI程序的所有功能,如计数器、留言簿、公告板、聊天室等等。它能从HTML表单中收集用户资料,能与数据库连接,甚至能用来接收和发送电子邮件。ASP可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示出不同的页面内容,而浏览者一点都不会觉察出来,就像专门为其制作的页面一样。

目前,ASP(Active Server Pages)技术已经相当普及,在Internet上几乎处处可以看到它的身影。应用ASP技术,无须复杂的编程,就可以开发出专业的动态Web站点。ASP的出现,给以静态内容为主的Web带来了全新的动态效果,使站点具有更加灵活和方便的交互性,在Internet中实现信息的传递和检索越来越容易。

2.2 SQL Server2000 

随着信息技术的发展,计算机处理数据的方式也发生着变化。Microsoft SQL Server2000是一个分布式的关系型数据库管理系统,具有客户机/服务器体系结构,采用了Transact-sql的sql语言在客户机与服务器间传递客户机的请求与服务器的处理结果;是一种应用广泛的数据库管理系统,具有许多显著的优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等适用于大型或超大型数据库服务器端。SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的一个版本,该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能具有使用方便可伸缩性好与相关软件集成程度高等优点可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。SQL Server 2000是一项全面完整的数据库与分析产品。从借助浏览器实现的数据库查询功能到内容丰富的扩展标记语言(XML)支持特性均可有力地证明,SQL Server 2000无谓为全面支持Web功能的数据库解决方案。与此同时,SQL Server 2000还在可伸缩性与可靠性方面保持着多项基准测试纪录,而这两方面特性又都是企业数据库系统在激烈市场竞争中克敌致胜的关键所在。无论以应用程序开发速度还是以事务处理运行速度来衡量,SQL Server 2000都堪称最为快捷的数据库系统,而这恰恰是该产品成为灵活企业首选解决方案的原因所在。

2.3 Browser / Server模式

B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。总体说来,B/S模式的具有以下3个特征:维护和升级方式简单;成本降低,选择更多;应用服务器运行数据负荷较重。但是,B/S模式也有它自己的缺点:对企业外网环境依赖性太强,由于各种原因引起企业外网中断都会造成系统瘫痪。

3 公交查询系统系统设计与实现

3.1系统实现的主要功能

实现的主要功能有:按车次查询所经路线、按起终点站查询可选择的车次、针对某一已知站点,查找到该站点的最佳乘车方案,即路程最短。

3.2系统总体设计

基于ASP的公交信息查询系统主要包括两大功能模块:提供给普通用户的查询功能和提供给系统管理员的后台管理功能,其中,提供给普通用户的查询功能又包括公交查询(查询最短路径和乘车线路)、按车次查询(查询该车次的基本运行信息)和按站点查询(查询经过某以站点的所有公交车次);提供给系统管理员的后台管理功能又包括站点名称管理、站点基本信息管理、站点顺序管理、用户管理和站点间距管理等功能。具体如图3-1所示。

图3-1  系统主要功能模块图

3.3 数据库设计

本系统数据库包括五个表:

  • 用户信息数据表(表User):存储系统用户的用户名、密码等数据。
  • 公交车信息数据表(表Bus):存储各路公交车基本信息。包括各路公交车线路号及其收发车时间。
  • 公交车站点信息数据表(表Busdetail):存储各路公交车所经过的站点及经过站点的顺序。
  • 站点信息数据表(表BusSite):存储所有站点的名称信息,从而方便修改。
  • 站点间距数据信息表(表PPright):存储相邻两个站点间的距离。

本系统中创建了一个数据库,取名为BusInquiries,其中包含的数据表及其相应功能如表3-1所示。

表3-1 BusInquiries的数据库包含的数据表及其功能

数  据  表

功    能

User

用户信息表

Bus

公交车信息表

Busdetail

公交站点信息表

BusSite

站点信息表

PPright

站点间距表

1.用户信息表User

用户信息表用于存放用户信息,包括用户编号(UserID)、用户标志(UserSigh)、用户名(UserName)、用户密码(UserPwd)和用户类型(UserType)等字段。其中UserID作为该表的主键。

用户在进行登陆时,就时通过让用户输入各自的用户名和密码,并与User表中的数据相比较来实现的。如果该用户名和密码能同时在表中找到相对应的数据,当即认为该用户是合法用户。用户信息表结构如表3-2所示。

表3-2  用户信息表User

字段名

数据类型及长度

说    明

备    注

UserID

bigint(8)

用户编号

主关键字

UserSigh

Varchar(50)

用户标志

允许为空

UserName

Varchar(50)

用户姓名

允许为空

UserPwd

Varchar(50)

用户密码

允许为空

UserType

bit

用户类型

允许为空

2.公交车信息表Bus

公交车信息表用于存放公交车基本信息。包括编号(BusID)、线路号(BusNum)、首发时间(BusStarttime)和收班时间(BusEndtime)等字段。其中BusID为主键。

这张表主要用于系统的车次查询。用户输入需要查询的车次,系统查询数据库数据,若该车次存在,则返回用户查询结果,包括该车次的运行时间及其经过的站点所有。若该车次不存在,系统则返回错误信息。公交车信息表结构如表3-3所示。

表3-3  公交车信息Bus

BusSite

BusSite

BusSite

BusSite

BusID

bigint(8)

公交编号

主关键字

BusNum

Varchar(50)

公交车线路号

允许为空

BusStarttime

Varchar(20)

首发时间

允许为空

BusEndtime

Varchar(20)

收班时间

允许为空

3.公交站点信息表Busdetail

公交站点信息表用于存放各路公交车所经过的站点及经过每一站点的顺序。包括站点编号(BsdID)、站点名(BsName)、线路号(BusNum)和经过顺序(Ordernum)等字段。其中BsdID为主键。

公交站点信息表提供对站点的查询。用户若需要查询经过某一特定站点的所有车次,通过查询该表的数据,即可得出结果。该表结构如表3-4所示。

表3-4  公交站点信息Busdetail

字段名

数据类型及长度

说    明

备    注

BsdID

bigint(8)

站点编号

主关键字

BsName

Varchar(50)

站 点 名

允许为空

BusNum

Varchar(50)

公交车线路号

允许为空

Ordernum

int

经过顺序

允许为空

4.站点信息表BusSite

站点信息表用于存放所有站点的名称信息。包括站点编号(BsdID)和站点名(BsName)。其中BsdID为主键。

站点信息表主要方便管理员在后台的对站点信息的管理。表结构如表3-5所示。

表3-5  站点信息BusSite

字段名

数据类型及长度

说    明

备    注

BsdID

bigint(8)

站点编号

主关键字

BsName

Varchar(50)

站 点 名

允许为空

5.站点间距表PPright

站点间距表用于存放邻两个站点间的距离。包括间距编号(ID)、首站点名(BsStart)、末站点名(BsEnd)和间距(BsPPright)。其中ID为主键。

这是比较重要的一张表,涉及到用户对乘车方案的查询。根据表内所提供的站点间距,再结合对表Busdetail和表BusSite的查询结果,便可得到提供给用户的建议乘车方案。站点间距表结构如表3-6所示。

表3-6  站点间距表PPright

字段名

数据类型及长度

说    明

备    注

ID

bigint(8)

间距编号

主关键字

BsStart

Varchar(50)

首站点名

允许为空

BsEnd

Varchar(50)

末站点名

允许为空

BsPPright

bigint(8)

间  距

允许为空

以上五张表除了在用户登陆和查询时需要用到,同时也是管理员对系统信息进行更新时所必需的。

3.4主要功能模块的设计与实现  

3.4.1 登录模块

系统用户分类两类:普通用户和系统管理员。系统管理员区别于普通用户的标志在于管理员能进入系统的后台管理模块,对系统信息进行更新维护。管理员的用户名为admin,密码为admin;普通用户用户名为general,密码为general。用户登陆系统,系统就会判断该用户的权限。系统若该发现该用户为非法用户,则出现错误提示;只有系统确认用户享有对系统的访问权限了,用户才能进入系统。实现登陆功能的主要代码如下:

if(Request.QueryString("username")="") then

   else

       if userlogin(Request.QueryString("username"),Request.QueryString("userpwd")) then

         Session("username")=Request.QueryString("username")

         Session("userpwd")=Request.QueryString("userpwd")

         Response.Redirect "main.asp"  

       else

         Response.Write "<script>alert('用户名或密码不正确!')</script>"  

       end if

end if

3.4.2查询功能模块

登陆成功后,用户便可进行查询。用户查询信息时,系统会查询数据库数据,查询成功,则返回相应的信息;查询失败,弹出错误提示。用户可修改查询条件再进行查询。下图为系统查询功能的流程图。

图3-2  查询流程图

对于普通用户,他们可使用到的功能如下:

1. 公交查询:提供最短路径查询,包括公交线路、换乘站点及换乘线路、经过站点等。其中,查询站点间最短路径,得出建议乘车路线是本系统的核心功能之一。此查询过程涉及到实现本系统功能的一个重要算法:数据结构中图的遍历所涉及的深度搜索算法。

算法思想:以每个顶点作为深度优先搜索的起始结点,如果一次深度优先搜索即可访问到图中所有结点,则该结点即为根。如此每个结点作为起点执行一次深度优先搜索即可找出所有的根。深度搜索与广度搜索的控制结构和产生系统很相似,唯一的区别在于对扩展节点选取上。由于其保留了所有的前继节点,所以在产生后继节点时可以去掉一部分重复的节点,从而提高了搜索效率。这两种算法每次都扩展一个节点的所有子节点,而不同的是,深度搜索下一次扩展的是本次扩展出来的子节点中的一个,而广度搜索扩展的则是本次扩展的节点的兄弟节点。下面来阐述一下该算法在本系统中的应用。

图3-3给出了一张无向图,地图中每个顶点代表一个站点,两个站点间的连线代表道路,连线上的数值代表道路长度,求从A站到E站的最短路径。根据所有到达某个目的地的站点来做递归求解,从而得出到达某个站点,最好的转车方法。

图3-3  无向图G

【分析】本题利用深度搜索法求解,伪代码如下:

var

 s:未访问的站点集合;   

dist[i,j]:存储任意两个站点间的距离数组; {0表示不连通}

function search(site):integer;  {求站点site到站点E的最短距离}

 begin

if site=E then search←0;   {如果site为E则递归停止}

else begin  {否则执行以下代码}

min:=maxint;    {给min赋值为一个非常大的数}

for i取遍所有站点 do  {遍历s中所有点}

 if dist[site,i]>0 and (i∈s) {如果stie到i连通}

 then begin

 s←s-[i];  {把i从s中剔除}

  j←dist[site,i]+search(i);  {递归调用搜索过程}

 s←s+[i]; {把s还原}

if j<min then min←j   {如果j小于已经得到的最小值min,则把j的值赋给min}

end;

search←min; {返回最小值}

end

begin

s←除E外所有站点;

dist[A,E]←search(A);

end.

以下为该算法在本系统中的实现:

第一步:定义ppDistance(i,j)函数,求出站点i到站点j的距离。通过对以下语句的调用,实现递归过程。主要代码如下:

sql="select count(*) as count from PPright where  BsStart='"&i&"' and BsEnd='"&j&"'"//创建统计出站点i到站点j的站数的SQL语句

    Set rs=Server.CreateObject("ADODB.Recordset") //创建Recordset对象

    rs.Open sql,Conn,0,3

    if(rs("count")=0) then//如果站点数为0则执行下面

        sql="select count(*) as count from PPright where  BsStart='"&j&"' and BsEnd='"&i&"'" //创建统计出站点j到站点i的站数的SQL语句

    '    Set rs=Server.CreateObject("ADODB.Recordset") //创建Recordset对象

        rs.close

        rs.Open sql,Conn,0,3

        if(rs("count")=0) then//如果站点数为0则执行下面

        else//如果站点数不为0则执行下面

            sql="select BsPPright from PPright where BsStart='"&j&"' and BsEnd='"&i&"'" //创建查询出站点j到站点i的站点间最短距离的SQL语句

       '     Set rs=Server.CreateObject("ADODB.Recordset") '创建Recordset对象

            rs.close

            rs.Open sql,Conn,0,3

            ppDistance=rs("BsPPright")//求出站点j到站点i的距离

            rs.close

            exit function

        end if

    else

        sql="select BsPPright from PPright where BsStart='"&i&"' and BsEnd='"&j&"'" //创建查询出站点i到站点j的站点间最短距离的SQL语句

    '    Set rs=Server.CreateObject("ADODB.Recordset") '创建Recordset对象

        rs.close

        rs.Open sql,Conn,0,3

        ppDistance=rs("BsPPright")//求出站点i到站点j的距离

第二步:定义getallsite()函数,返回值为用来存放站点的数组。主要代码如下:

sql="select count(*) as count from BusSite" //创建统计站点数的SQL语句

    Set rs=Server.CreateObject("ADODB.Recordset") //创建Recordset对象

    rs.Open sql,Conn,0,3

    dim count//定义一个count变量

    count=rs("count")//把站点数赋值给count变量

    dim ret()//定义一个数组ret()

    redim ret(count)//把count放到数组ret()中

    sql="select BsName from BusSite" //创建查询所有站点名的SQL语句

    Set rs=Server.CreateObject("ADODB.Recordset") '创建Recordset对象

    rs.Open sql,Conn,0,3

    dim i//定义一个数i

    i=0

    do while not rs.eof//当记录指针不是指向最后一条记录之后

    ret(i)=rs("BsName")//把站点放到ret()数组中

    i=i+1//i增加1

    rs.movenext//记录指针指向下一条记录

第三步:定义getothersite(ret,value)函数,作用是剔除ret数组中value,返回值也是数组。主要代码如下:

dim retlength//定义一个变量retlength

    retlength=UBound(ret)//把ret数组的最大下标赋值给retlength

    dim returnArray()//定义一个数组returnArray()

    redim returnArray(retlength-1)//把retlength-1放到数组returnArray()中

    dim i,j

    j=0

    for i=0 to retlength-1//从0到retlength-1

        if(ret(i)=value) then//剔除ret数组中value

        else

        returnArray(j)=ret(i)//否则returnArray(j)=ret(i)

        j=j+1

        end if

    next

    getothersite=returnArray//返回数组returnArray

第四步:定义pppath(startsite,endsite,num)函数,求出站点间的最短路径并显示出距离。主要代码如下:

public function pppath(startsite,endsite)

    dim cityarray

    cityarray=getallsite()

    midarray=search(startsite,startsite,getothersite(cityarray,startsite),endsite)

//此处省略部分代码

function search(startsite,site,yarray,endsite)   //求site到endsite的最短距离

  dim path    //记录路径

    if site=endsite then

        path=""    'CStr(site)+"-"//赋值给路径

        search=Array(0,path)

//此处省略部分代码

            dim j

            j=ppDistance(yarray(i),site)

            if CDbl(j)>0 then//判断两个站点之间是否可以相邻直达

                dim cityarray1

                midarray=search(startsite,yarray(i),getothersite(yarray,yarray(i)),endsite)

                cityarray1=midarray(0)

                path=midarray(1)

                'if(site=startsite) then

                'Response.Write startsite+"-"+CStr(j)+"-"+yarray(i)+path+CStr(CDbl(j)+CDbl(cityarray1))+"<br />"

                'end if

公交查询的实现如图3-4所示。

 

图3-4  公交查询窗口

2. 按车次查询:可查询各路公交车的车次及其所经过的站点,首、末班车时间。首先通过函数checkbusexist(id)确认该车次是否存在,再查询通过对表Bustail的查询来得到查询结果,若车次不存在,则不能进行查询。此功能主要通过以下代码实现:

if (checkbusexist(Request.QueryString("bus"))) then

   rs1=GetBusdetail(Request.QueryString("bus"))

   'Set rs=GetBuspassingsite(Request.QueryString("bus"))

   sql="select * from Busdetail where BusNum='"&Request.QueryString("bus")&"' order by Ordernum asc"

本功能的实现如图3-5所示。

 

图3-5  车次查询窗口

基于ASP的公交查询系统的设计与实现[点击下载]

如需要全部源码,联系QQ:2812491287如需要全部源码,联系QQ:2812491287

评论