公交线路查询系统综合实验论文.docx
- 文档编号:4615047
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:19
- 大小:789.73KB
公交线路查询系统综合实验论文.docx
《公交线路查询系统综合实验论文.docx》由会员分享,可在线阅读,更多相关《公交线路查询系统综合实验论文.docx(19页珍藏版)》请在冰豆网上搜索。
公交线路查询系统综合实验论文
安徽建筑工业学院
AnhuiUniversityofArchitecture
综合实验论文
论文题目:
公交线路乘车方案查询系统设计与实现
姓名:
张传忠、敖丽平、祝美东、姜涛
学号:
07205020214(张传忠)
专业班级:
07计算机2班
院系:
电子与信息工程学院
指导教师:
孙全玲、李莹莹
2010年6月
公交线路乘车方案查询系统设计与实现
姓名:
张传忠学号:
07205020214
一、摘要
公交线路查询系统是收集了一个地区的所有公交车的路线信息的软件。
用户可以根据数据库中的数据对这个地区的公交线路有个基本了解,并找到自己要到达目的地所需要的车次。
同时,数据库的管理人员可以根据实际的路线的调整而改变原有的信息,以保证用户可以得到更精确的路线。
本系统采用了Delphi7.0+SQLServer2000作为设计工具,并用ADO作为访问数据库的方式。
本文针对查询者的不同需求,为公交查询系统提供了最佳线路查询的模型与算法。
对直通的任意两站点,可设计出较简单的最佳直通线路查询算法(直通算法)。
故对需要查询的两站点,算法先由线路、站点的原始数据判断此两站点是否直通,若是,便可通过直通算法进行查询。
不论是否存在直通线路,算法都考虑对换乘的情形进行查询。
考虑到城市公交系统中的站点基数较大,可行的换乘方案数也将较大,故查询算法根据所有可行的一、二换乘点必与起、止站点直通的原则,对可能成为给定两站点的换乘点的站点进行了筛选,得到相关站点集,较大的缩小了查询的范围。
本系统中采用的算法查询效率不是很高,在最后我提出了比之较好的查询算法,但由于时间关系并未予以实现,仅在此进行说明。
关键字:
公交线路;查询系统;路线信息;最佳线路;换乘
二、本系统实现的功能说明
1、公交线路的查询:
自动,快速,灵活的查询功能;
2、乘车方案查询:
起始站点线路查询,设定中转站点查询,最短路径查询功能;
3、数据维护功能:
公交线路的录入,修改,编辑功能;
4、用户管理功能:
用户的密码修改,用户添加和删除功能;
5、对本系统的一些说明。
三、系统设计
1、数据库结构设计;
由于公交线路查询系统中所涉及的信息较多,它们之间的性质并不完全相同或者类似,势必造成信息冗余,但是为了系统提高查询速度和便利,可以牺牲存储空间,加快查询速度的方法。
字段中文名
字段英文名
字段类型
字段长度
容许空
路线编号
line_id
int
4
路线名称
line_name
varchar
50
√
始发车
fristbus
varchar
50
√
末班车
lastbus
varchar
50
√
站点1
station1
varchar
50
√
站点2
station2
varchar
50
√
站点3
station3
varchar
50
√
……
……
varchar
50
√
站点45
station45
varchar
50
√
表1公交线路表(line)
字段中文名
英文字段名
字段类型
长度
容许空
站点编号
stop_id
int
4
站点名称
stop_name
varchar
50
√
表2站点表(stop)
字段中文名
英文字段名
字段类型
长度
容许空
路线编号
line_id
int
4
√
站点编号
stop_id
int
4
√
标记
ord
int
4
√
表3路线站点表(linestops)
2、数据结构设计;
1)通过程序将line表中的所有数据(站点)信息存放入一个一维数组中;
2)编写程序再将该数组中所有相同的数据删除,这样就有了站点(stop)表;
3)将line表中的每条线路的站点一个一个记录下来存放入一个三列的二维数组中,如(1,火车站,1)表示:
(线路编号:
1;站名:
火车站;线路所经站号:
1);
4)对二维数组的第二列值进行修改,参照stop表,将其字符全部换为stop_id。
3、算法设计
1)起始站点查询算法
第一步:
查询经过这两个站点的所有公交线路,找出含有相同的线路编号的线路信息。
第二步:
判断以上查询中是否有满足要求的记录,若有,则记录两站点在线路中的位置,判断是否满足行驶方向的要求,通过定义一个数组,将线路信息中的线路名称,起始和目的站点名称以及两站点之间的站点个数存入数组并输出。
若没有满足的记录,证明查询的站点之间不能直达,线路需要转乘。
第三步:
查询出两站点之间所有线路的站点交集(中转站点),将这些站点存放入一个一维数组中,查询从起始站点到达中转站点的所有公交线路,将线路信息中的线路名称,起始和中转站点名称以及两站点之间的站点个数存入一个二维数组;再查询从中转站点到达目的站点的所有公交线路,将线路信息中的线路名称,中转站点和目的站点名称以及两站点之间的站点个数存入另一个二维数组。
第四步:
判断两组路线之间是否有相同的站点,相同的站点即为中转站,将转乘信息输出。
2)最短路线查询算法
最短路线查询算法的思想是在起始点查询的算法的基础上,是对站点之间的个数加入了一段比较着站点个数代码,通过三个临时变量,用于记录所有线路中的最短路径和两站点信息在数组中的位置,最后通过临时变量记录下来的信息,输出数组中相应位置的信息。
4、开发平台选用
本系统基于集成软件开发平台(Delphi7.0)及数据库管理系统软件(SQLServer2000)实现。
四、系统的实现
1、Delphi7.0和SQLServer2000的安装。
2、把合肥的公交线路信息(本系统实现合肥的公交线路查询功能)导入SQLServer2000。
3、本系统主界面的设计与功能实现如下:
主界面
1)公交线路查询:
procedureTmainform.Button1Click(Sender:
TObject);
begin
gjxlcx.show;
end;
2)乘车方案查询:
procedureTmainform.Button2Click(Sender:
TObject);
begin
ccfacx.show;
end;
3)数据维护:
procedureTmainform.Button3Click(Sender:
TObject);
begin
login.show;//登录界面
end;
4)用户管理:
procedureTmainform.Button4Click(Sender:
TObject);
begin
login2.show;//登录界面
end;
5)READERME:
procedureTmainform.Button5Click(Sender:
TObject);
begin
readme.show;
end;
6)退出系统:
procedureTmainform.Button6Click(Sender:
TObject);
begin
ifmessagedlg(‘确定要退出系统吗?
’,mtconfirmation,[mbyes,mbno],0)==mryesthen
begin
mainform.close;
end
else
mainform.show;
end;
4、各具体部分功能的实现如下:
1)公交线路查询功能
a.线路查询(附核心代码)
sql.add('select*fromlinewhereline_namelike'''+combobox1.text+'路'+'%'+'''');//查询所有线路
withadoquery1do
begin
close;
sql.clear;
sql.add('select*fromlineorderbyline_id');//查询指定线路
open;
end;
b.时间查询(附核心代码)
withadoquery2do
begin
close;
sql.clear;
sql.add('selectline_name,firstbus,lastbusfromlinewhereline_namelike'''+combobox2.text+'路'+'%'+'''');
open;
first;
end;
c.站点查询(附核心代码)
withadoquery3do
begin
close;
sql.clear;
sql.add('select*fromlinewhereline_idin(selectline_idfromlinestopswherestop_idin(selectstop_idfromstopwherestop_name='+''''+edit1.text+'''))');
open;
first;
end;
2)乘车方案查询功能
a.起始站点查询算法实现
第一步:
通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),以站点编号为条件,查询线路站点关联(linestops)表中对应的记录,并记录下它们的线路编号(line_id),对经过这两个站点的所以公交线路进行比较,记录下相同的线路编号;
第二步:
判断以上查询中是否有满足要求的记录,若recordcount<>0,则记录两站点在线路中的位置,判断是否满足行驶方向的要求,通过定义一个数组,将线路信息中的线路名称,起始和目的站点名称以及两站点之间的站点个数存入数组并输出。
若recordcount=0,证明查询的站点之间不能直达,需要转乘;
第三步:
查询出两站点之间所有线路的站点交集(中转站点),通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),这里定义为id1,id2;以它们为条件,搜寻线路站点关联(linestops)表中两个站点通过直达方式各自能够到达的站点集合,最后他们的交集就是我们所需要的换乘站点,将这些站点存放入一个一维数组中;
第四步:
重复第一、二步的操作,查询从起始站点到达中转站点的所有公交线路,将线路信息中的线路名称,起始和中转站点名称以及两站点之间的站点个数存入一个二维数组;
第五步:
再重复第一、二步的操作,查询从中转站点到达目的站点的所有公交线路,将线路信息中的线路名称,中转站点和目的站点名称以及两站点之间的站点个数存入另一个二维数组。
第六步:
判断两组路线之间是否有相同的站点,相同的站点即为中转站,将转乘信息输出。
b.最短路径查询算法实现
最短路线查询算法的实现与起始站点查询算法的实现相似,只是在记录站点之间的个数加入一段代码,通过临时变量,记录所有线路中的最短路径和两站点信息在数组中的位置,最后通过临时变量记录下来的信息,输出数组中相应位置的信息。
k:
=100;
fori:
=1toP-1do
forj:
=1toL-1do
begin
ifMyArray[i,4]=YyArray[j,1]then
ifMyArray[i,1]<>MyArray[i,4]then
ifYyArray[j,1]<>YyArray[j,4]then
end
c.乘车是的三种情况
d.查询结果及核心代码如下:
第一步:
查询两站点之间在直达情况下的所有线路。
select*fromlinewhereline_idin(selectA.line_idfrom
(selectline_idfromlinestopswherestop_idin(selectstop_idasid1fromstopwherestop_name='edit1.text'))A,
(selectline_idfromlinestopswherestop_idin(selectstop_idasid2fromstopwherestop_name='edit2.text'))B
whereA.line_id=B.line_id);
第二步:
输出线路名称,起始和目的站点名称以及两站点之间的站点个数。
ifrecordcount<>0then
MyArray[P,3]:
=inttostr(y-x);
MyArray[P,1]:
=edit1.Text;
MyArray[P,2]:
=FieldValues['line_name'];
MyArray[P,4]:
=edit2.Text;
P:
=P+1;
fori:
=1toP-1do
begin
memo1.Lines.add(MyArray[i,1]+'>>'+MyArray[i,2]+'('+MyArray[i,3]+'站'+')'+'>>'+MyArray[i,4]);
end;
第三步:
查询两站点之间不能直达的情况下,可选择的中转站点。
selectstop_namefromstopwherestop_idin(
selectA.stop_idfrom
(selectdistinctstop_idfromlinestopswhereline_idin
(selectline_idfromlinestopswherestop_idin
(selectstop_idasid1fromstopwherestop_name='edit1.text')))A,
(selectdistinctstop_idfromlinestopswhereline_idin
(selectline_idfromlinestopswherestop_idin
(selectstop_idasid2fromstopwherestop_name='edit2.text')))B
whereA.stop_id=B.stop_id);/*得到中转站点名称*/
第四步:
重复第一二步操作,查询起点到中转站点的线路信息;
第五步:
重复第一二步操作,查询中转站到目的站点的线路信息;
第六步:
判断两组路线间是否有相同的中转站,将转乘信息输出。
3)数据维护功能及实现(简要介绍)
a.线路录入功能
b.线路删除功能
c.线路修改功能
4)用户管理功能及实现(简要介绍)
a.密码修改功能
b.用户添加功能
c.用户删除功能
5)READERME(只读,不能修改)
关于此系统的一些信息
6)登录功能实现
begin
username:
=Edit1.text;
password:
=Edit2.text;
withADOQuery1do
begin
close;
sql.clear;
sql.add('select*from用户表whereusername=');
sql.add(''''+username+''''+'andpassword='+''''+password+'''');
open;
first;
ifrecordcount=1then
begin
login.Hide;
sjwh.Show;
end
else
messagebox(login.handle,'请输入正确的密码','警告',mb_ok+mb_iconwarning);
end;
end;
7)退出功能实现
begin
ifmessagedlg('确定要退出系统吗?
',mtconfirmation,[mbyes,mbno],0)=mryesthen
begin
mainform.close;
end
else
mainform.show;
end;
五、系统的改进
1筛选算法设计
1)算法功能描述:
给定两站定
,筛选出可能作为
中的一次、二次换乘点的候选站点集H。
2)算法步骤
初始化候选集H为空。
对起始站点
(终到站点
):
a.由经过每一站点的线路集S(系统预存)确定出经过
(
)的线路集合L。
b.对L中的每一条线路,若该线路为来回线或环行线,则将该线路上的所有站点加入到候选集H中;若该线路为双行线,则将该线路中在
后面(
前面)的所有站点加入到候选集H中。
c.对候选集H遍历,删掉重复的站点。
d.对候选集H再进行二次筛选:
若对H中的每一站点,经过该站点的线路只有一条且该线路不为双行线,责任将该点淘汰掉。
2分支定界算法设计(二次中转):
1)算法功能描述:
已得出所有的可以作为二次换乘点的站点对
,对每一站点对
对应的二次换乘方案通过分支定界进行筛选,得出包含方案个数较少的最佳二次换乘方案候选集。
二次换乘的分支定界的示意图如图4所示:
2)算法步骤:
初始化候选方案集LH为空。
对第一对站点
,由直通算法确定
、
、
三对站点的最佳线路,并得到在此二次换乘方案下的总乘车时间和总乘车费用。
再将此方案加入到LH中。
初始化分支定界的界限:
将上一步得到的总乘车时间设为time,得到的总乘车费用设为cost。
对以后的每一站点对
:
a.由直通算法确定站点对
之间的最佳线路,并得到这两个站点的直达时间t1和直达费用c1。
若该方案的最小总乘车时间t1+16不大于当前的最优总时间time,或者该方案的最小总乘车费用c1+2不大于当前的最优总费用cost,转b,否则,转
。
b.由直通算法确定站点对
之间的最佳线路,并得到这两个站点的直达时间t2和直达费用c2。
若该方案的最小总乘车时间t1+t2+13不大于当前的最优总时间time,或该方案的最小总乘车费用c1+c2+1不大于当前的最优总费用cost,转c,否则,转
。
c.由直通算法确定站点对
之间的最佳线路,并得到这两个站点的直达时间t3和直达费用c3。
若该方案的最小总乘车时间t1+t2+t3+10不大于当前的最优总时间time,或者该方案的最小总乘车费用c1+c2+c3不大于当前的最优总费用cost,将该方案加入到候选方案集LH中。
六、个人总结
1、本系统设计过程中最大的困难并不是算法或程序的描述,而是如何使Delphi与SQLServer连接以实现预想的功能。
在设计过程中一不小心就可能使几个模块公用一个Datasourse而使查询时出现混乱,如:
本应出现在本模块的结果却出现在了另一个模块中。
2、在系统设计过程中要经常进行备份。
由于对Delphi的出错机制及错误处理并不了解,所以有很多错误不知道如何解决,如果没备份而且错误又无法解决的时候,那么就只有从头来过了,这样既费时有费力。
3、通过这次的综合实验,我学到了不少东西,如:
Delphi的基本用法,软件的基本设计流程,团队合作意识等。
4、学会了化难为易,化繁为简的思考方法,学会了处理整体与部分功能分而化之的能力。
5、看到自己设计出来的系统感觉很有成就感。
七、参考文献
[1]曹桂发,傅俏梅.城市交通信息系统的设计研制[J].系统工程理论与实践,1997,
(1),105-109.
[2]刘光明,蔡先华.一种城市公交查询的算法及其应用[J].交通运输工程与信息学报,2005,3
(2),87-91
[3]李慧哲.最短路径及其变形问题的算法[J].农机化研究,2005,2(15),64-81
[4]王炜.城市交通管理规划方案设计技术[J].交通运输工程报,2003,
(2),5-17
[5]王珊,萨师煊.数据库系统概论(第四版).高等教育出版社,2006.5
[6]刘浩.Delphi+SQLServer数据库应用系统开发与实践.人民邮电出版社,2005.9
[7]张志强.Delphi实例全解教程.南方出版社,2004.1
[8]陈世洪,王晓海,廖建华.SQLServer2000管理、开发及应用实例详解.人民邮电出版社,2006.6
[9]夏帮贵,郭胜.Delphi数据库开发入门与范例解析.机械工业出版社,2004.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公交线路 查询 系统 综合 实验 论文