(新疆电子研究所股份有限公司乌鲁木齐830013)
摘要:乌鲁木齐市的发展日新月异,许多新建的标志性建筑、小区大量出现。公交线路、车次也在日渐增多。再加上乌市的市民绝大多数每天都坐公交车上下班,公交线路的增加虽然给人们的出行带来了极大的方便。但是由于城市规模的不断发展,给人们选择出行乘车线路也造成了一定的困难。特别是在上、下班高峰期,乘客在乘公交车时由于人比较多,造成市内几条主要线路的公交车在上、下班高峰期的同一时间段里每一辆车内乘客爆满。虽然大家已经习惯了挤公交车,可是都不希望在乘车上浪费大量的时间,都希望早点到达目的地。线路过多、选择线路困难,基于此开发一个城市公交线路查询系统是非常必要的。它不仅可以给市民、游客的乘车提供向导,同时可以对外展现城市的现代风貌,体现出一个城市公交信息化和数字化的发展水平。在本文中将以开发一个简单的公交线路查询系统为例,说明开发过程和所涉及到的问题及解决方法。
关键词:公交;线路查询;系统设计
1开发公交线路查询系统的必要性
乌鲁木齐虽然是一个中型城市,可占地面积却很大,所以作为首府的主要交通工具公交的数量、公交的车次也多的惊人,还不包括其它的如:TAXI等其它的交通工具。由于车次多、线路复杂,构成的整个公交线路网也很庞大、复杂,开发一个这样的公交线路查询系统对市民和外来游客的出行将会带来很大的方便。
将此系统安装在客流量较大、人多的公共场所,如:商场、超市、及每个区的交通要道、主要站台,供市民、游客随时查询。既方便了市民的出行又方便了外来游客。
虽然现在网络已进入千家万户,可是依据现在乌鲁木齐市民的生活水平,并不是家家都能上得起网。而公交车作为首府市民的主要交通工具,却是天天都坐的。为了符合、适应广大市民的生活水平,先设计一个单机版的公交线路查询系统是可行的。即使家中没有计算机也可以到站台的查询系统上查询,主要是不收取任何费用。而作为外地来乌游客,当手中没有地图的情况下,只要在机场、火车站、汽车站的查询系统上选择想去的地点,点击查询,方便快捷。
2乌鲁木齐公交线路的现状
来自乌鲁木齐便民信息港的资料,乌鲁木齐现有公交车次接近100路,大小车站那就更加繁多了,而且存在一个站台有多个名字的情况[10]。比如说:2路车的电子报站器到西北路时,是报西北路的。而17路车的报站器到西北路时,是报西虹路,当然本市市民都清楚这两个叫法都是同一个地点,可是对于外来游客,他们清楚吗?从这一点可以看出,对于站台的站名应该是一对一的,而不会出现一地多名的情况(如果有公共场所,可以报完站名再加上公共场所名)。还有同名字的站台却是不同的地点,这些都说明了乌鲁木齐公交线路站台命名的不规范。这都是很明显的问题,可是解决起来又非常困难,更确切的说是非常麻烦、非常烦琐。主要是线路太多,站台太多。在有些没有标志性建筑的站台,只能起一些与站台附近路段、路型相关的站名。比如:丁字路口、桥头、招呼站之类的称呼。这些名字在许多公交线路上的很多地方都使用,可是却对应着不同的地方!当然我们不能只是抱怨,应该想出合理的对策来解决这一复杂情况,来规范首府的公交线路。
3开发公交线路查询系统的方法
3.1编程环境的选择
Sybase公司开发的PowerBuilder8.0是C/S和B/S应用软件的开发高手,有非常高的开发效率。图形化的开发环境不但提供方便快捷的操作,并且可以定制创建适合开发人员的工作环境。它提供功能非常强大的数据窗口控件,可以轻松、方便地和数据库打交道。快捷地实现录入、插入、删除、更新、查询等操作,更可以开发出人性化的可交互式界面满足用户的需求。故而,实现本系统PB是一个相对较好的选择。
3.2关系型数据库的实现
通常数据库都有自己相应的管理工具,并且也应该由专人负责管理,以确保数据库系统的安全性。PB程序员一般不负责这些数据库的维护工作。由于开发的公交线路查询系统所需的数据库不是字段很多、数据庞大、内容复杂的数据库,但是为了数据记录的安全和在出错后可以很好的恢复数据还是使用了目前使用比较多的MicrosoftSQLServer2000数据库。
3.3连接数据库
考虑到所开发的公交线路查询系统最后要生成可执行文件,所以采用动态连接数据库的方式与数据库进行连接。在Application的Open事件中添加如下代码:
SQLCA.DBMS=ProfileString("bus1.ini","Database","DBMS","")
SQLCA.database=ProfileString("bus1.ini","Database","database","")
SQLCA.userid=ProfileString("bus1.ini","Database","userid","")
SQLCA.LogId=ProfileString("bus1.ini","Database","LogId","")
SQLCA.LogPass=ProfileString("bus1.ini","Database","LogPassWord"")
SQLCA.ServerName=ProfileString("bus1.ini","Database","ServerName",)
SQLCA.AutoCommit=false
SQLCA.DBParm=""
connect;
4系统设计
4.1目标设计
使用计算机实现公交线路模糊、精确查询和数据库的维护功能于一体的公交线路查询系统,以代替功能并不完善的公交车电子报站器。可以提高市民坐车的效率,减少市民坐错车的尴尬。该系统适用于家庭、车站、商场、超市等公共场所。
4.2开发设计理念
(1)尽量采用现有的软硬件环境,已知的公交车次的数据及合适的系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
(2)系统应符合公共交通部门的有关规定,满足市民日常乘车查询的需要,并达到操作过程中的直观、方便、界面友好、实用等要求。
(3)系统采用C/S结构。
(4)系统应具备数据库维护功能,及时根据公交车增线、改线以及市民的需求进行数据的添加、删除、修改等操作。
4.3开发运行环境
以PowerBuilder8.0进行前台开发,并使用MicrosoftSQLServer2000建立后台数据库,系统可运行于Windows98/Me/2000/XP等操作系统上。
4.4功能分析与模块设计
系统具有公交线路模糊查询、精确查询、其它相关查询、数据库维护与管理等功能。其功能结构如图4-1所示:
图4-1功能结构图
5数据库设计
5.1概念设计
实体E-R结构图如图5-1所示:
图5-1实体E-R结构图
其中,站台基本表中的站台名与站台车次表中的车次编号是M:N的关系。
5.2逻辑设计
根据概念结构设计结果,进行系统逻辑设计,结果如下:
(1)站台基本信息(站台编号[PK],站台名)
(2)站台信息(记录数[PK],站台编号[FK],车次编号)
(3)车次基本信息(车次编号[PK],起始站,中间站1、2...38,终点站)
(4)用户信息(用户编号[PK],用户姓名,用户口令)。
5.3物理设计
5.3.1建立数据库
首先必须在计算机上安装SQLServer2000数据库,然后使用SQLServer2000的企业管理器来创建数据库bus1。
5.3.2创建数据库中的内容
(1)根据前面的逻辑结构设计,建立四张表。后面为了查询的需要,还建立了几张临时表,为实现精确查询使用。
(2)建立表:在数据库画板中,选中欲建表的数据库对象bus1,右击弹出“新建”菜单项,选择该菜单项中的”表”,在数据库的表画板工作区下中按上述表结构依次完成数据表的定义(包括字段、表名、主键、外键)。如果要想往表中加入记录,必须先建立主键。
(3)设置数据库的其它选项,以便于在出错后及时恢复、备份数据记录。
6系统实现中遇到的问题及部分问题解决方法
在实现公交线路查询系统的设计中,难点就在于数据库中各个表的创建。与其它的关系型数据库不同,一般的关系型数据库是一对一的关系,而将要创建的表是多对多的关系。即一个车站对应多个车次,而每一路车次又对应多则30几个,少则十几个的车站,这让我在建表时产生了困难。不知道该怎么把两个没有任何关系的表关联起来,让两个表中的数据在一个数据窗口中显示。经过好几天的研究,用了一个很麻烦的办法。就是先建了一个车站基本情况表(包括站台号[PK]和站台名),又建了一个车站经过的车次表(包括站台号、车次号和记录数[PK])。数据录入是一件很麻烦的事情,要找出每个站,还要找出每个站经过哪些车次,然后再录入数据,乌鲁木齐有将近100路公交车,车站的数量,可想而知很多、很杂。由于时间的关系,我只添加了220个乌市主要公交车站及每个车站经过的车次的记录。在精确查询模块的设计中,如何实现当用户选择起始站和终点站后,系统自动用messagebox来显示乘坐车次信息,这在我还没有接触游标前,还是个难题。我看了一个用VC++实现公交线路查询的代码后,虽然可以看懂其中部分代码,其中用到了著名的Dijkstra(最短路径算法),也称之为“标号法”或“贪心算法”。算法思想是怎么在一个图中寻找从图的一个顶点到图的另外一个顶点的最短路径,而本系统所研究的公交线路也是有最短路径的。根据乌市公交车站的具体情况来说,大概站与站之间的距离是1KM,在查询过程中,怎样找到这条乘车路线是最短乘车路线,是实现的关键。由于本系统中建的表是以车站为主体的,只有站内经过车次的信息,而没有每一路公交车从起点站到终点站这个图的信息。即使可以得到每一路车次经过的车站记录,也只是分离的站名,站与站之间没有必然的联系。不知道该怎么实现最短路径的代码。虽然PowerBuilder8.0中的游标相当于C语言中的指针,可是由于时间仓促再加上本人的能力有限,只实现了直达和转车一次的情况。对于最短路径和最佳路径的情况,虽然可以想到,可是实现起来还是有一定的难度,希望在以后的学习和研究中可以解决这些问题。
7结论
经过三个多月的设计和开发,乌鲁木齐市公交线路查询系统基本开发完毕。其功能基本符合用户需求,能够完成简单的公交线路和站与站之间车次的查询。并提供部分系统维护功能,使系统管理员能够方便地进行数据的添加、修改、删除操作。但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如没有实现乘客乘车的最短路径、相同站名不同的车站应该怎么区分、以及没有考虑到外国人来乌查询界面的国际化,这都是很遗憾的。我相信在以后的工作和学习中,能够得以实现。
参考文献
[1]高铁杠.智能公交信息查询系统[J].城市公共交通,2003,(003):31-32.
[2]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1999,(7):105-108.
[3]韦宏利,付蓉.公交线路智能查询系统的设计[J].现代电子技术,2003,(12):16-18.
[4]陈萧枫,蔡秀云,唐德强.最短路径算法分析及其在公交查询的应用[J].工程图学学报,2001,(3):20-24.
[5]陆振波,黄卫.城市公交问路系统—GIS在城市公交管理中的应用[J].公路交通科技,2001,(5):68-70.
[6]陆忠,钱翔东等.基于最短路径查询的城市公交网络拓扑建模研究[J].遥感信息,2002,(12):73-74.
[7]张瑜,张翼翔.ToolBook开发工具在多媒体公交线路查询系统中的应用[J].微型电脑应用,1999,(6):43-44.
[8]徐绪松.数据结构与算法[M].高等教育出版社,2004,(7):171-175.
[9]AhoAE,HopcroftJE,Uman,JD.DataStructuresandAlgorithms.Addi-son-wesleypublishingCompany,1983,26:163-165.
[10]http://www.ucatv.com.cn