城市公交查询系统毕业论文
目录
1 绪 论 ………………………………………………………1
1.1 系统开发背景 ………………………………………………………3
2 开发环境 ………………………………………………………4
2.1 B/S模式的特点 ………………………………………………………4 2.2 JSP技术简介
………………………………………………………4
2.3 TOMCAT简介 ……………………………………………………………5 2.3 MYECLIPSE简介 ………………………………………………………6
3 可行性分析 ……………………………………………………8
3.1 系统可行性分析 ………………………………………………………8 3.1.1 技术可行性分析 3.1.2 操作可行性分析 3.1.3 经济可行性分析
………………………………………………8 ………………………………………………8 ………………………………………………9
…………………………………………9 …………………………………………9
3.1.4 社会环境可行性分析 3.2 系统需要解决的主要问题
3.3 系统应具备的基本功能 ………………………………………………9 3.4 系统功能模块划分
……………………………………………………10
3.4.1. 普通系统模块
……………………………………………………10 3.4.2 高级查询模块
……………………………………………………10
3.4.3. 后台管理模块 …………………………………………………10
1
河南工业职业技术学院毕业论文(设计)
4 系统设计 ………………………………………………………11
4.1 数据库设计 ……………………………………………………………11 4.1.1 概念设计 ………………………………………………………11 4.1.2 表设计 ……………………………………………………………14 4.2 系统部分模块设计 …………………………………………………16 4.2.1普通查询模块 …………………………………………………16 4.2.1 高级查询模块 …………………………………………………18 4.2.3后台管理模块 …………………………………………………22
5系统的实现 …………………………………………………23
5.1 普通查询模块 ………………………………………………………23 5.1.1 车次查询子模块 5.1.2 站点查询子模块 5.1.3 换乘查询子模块 5.2 高级查询模块
………………………………………………………333
5.2.1车次查询子模块 ……………………………………………344 5.2.2模糊站点查询子模块 5.2.3模糊线路查询子模块
………………………………………3636 ………………………………………377 ……………………………………………25 ……………………………………………27 ……………………………………………29
5.2.4模糊换乘查询 …………………………………………………388 5.3 后台管理模块
………………………………………………………3939
5.3.1 添加车次 ……………………………………………………4242 5.3.2 修改车次 ……………………………………………………45 5.3.3 删除车次 ……………………………………………………466
总 结 …………………………………………………………488
2
河南工业职业技术学院毕业论文(设计)
致 谢……………………………………………………………49 参考文献 ………………………………………………………50
3
河南工业职业技术学院毕业论文(设计)
1 绪论
1.1 系统开发背景
随着城市日新月异的发展,城市的规模不断扩大。为了满足发展的需要,城市公共交通运输的覆盖面越来越广,公交线路也日渐增多,成为绝大多数出行者的首选方式。这在给人们的出行带来了极大便利的同时,也因线路众多,给人们在选择出行乘车线路时带来了一定的困扰。因此,提供方便、快捷、经济、高效的公交出行线路方案,不仅能方便市民的出行和生活,也为城市减少不必要的交通堵塞,有利于提高城市交通运输效率。同时,展示了现代城市信息化的风貌,提升城市形象。
西方国家对这一点重视的较早,如美国、日本、加拿大、英国、法国等国家都投入了较大的人力和物力从事智能公共交通系统研究,并己取得了显著的成果,建立了一种在公交网络的基础上,运用计算机网络技术、数据库技术、通信技术、电子技术、智能卡技术等先进科学技术,形成集智能化调度、公交电子收费、信息服务、网络通信于一体的公共交通规划管理系统。其中的公共交通优化系统对公交线网布局、公交线路配置、站点布置、发车间隔确定、票价制定等进行设计和优化,从规划方面提高公交服务水平。
而我国城市公交乘客信息系统的发展处还于一个落后的水平,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。乘客可以获得的公交信息很少,而且获取方式以常规手段为主,一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式,获得线路、站点等基本信息。另外乘客出行过程中获得信息困难,除少数几个城市乘客可以通过分布于城市中的若干电子站牌获得些公交车辆的运营信急以外,在其它城市,“出行中”的乘客无法获得仟何信息。
所以从国内公交信息与规划的发展需求和国外发展趋来看,需要建立一个以高效的公交数据库为基础的、面向公交线路的在线公交车线路查询系统。
4
河南工业职业技术学院毕业论文(设计)
2 开发环境
2.1 B/S模式的特点
B/S(浏览器/服务器)是由浏览器、Web服务器、应用服务器和数据库服务器组成的多层结构体系。B/S模式具有以下特点:
(1) 用户界面简单易用。用户使用单一的浏览器软件,通过鼠标即可访问文本、图像、声音、电影及数据库等信息,特别适合非计算机人员使用。
(2) 易于维护与升级。由于客户端无需专用的软件,所以,系统的维护和升级工作简单。
(3) 具有良好的开放性。浏览器/服务器结构采用标准的TCP/IP、HTTP协议,能够与遵循这些标准协议的信息系统及其网络很好的结合,具有良好的开放性,保护了用户的投资。
(4) 信息共享度高。HTML是数据格式的一种开放标准,目前信息系统中大多数流行的软件均支持HTML。
(5) 扩展性好。TCP/IP、HTTP的标准性使得浏览器/服务器结构可直接接入Internet,具有良好的扩展性。
(6) 网络适应性强。无论是PSTN、DDN、帧中继、X.25、ISDN、还是CATV、ADSL,浏览器/服务器结构均能适应。
(7) 安全性好。防火墙技术保证了浏览器/服务器结构的安全性。
2.2 JSP技术简介
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操
5
河南工业职业技术学院毕业论文(设计)
作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
2.3 Tomcat简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
6
河南工业职业技术学院毕业论文(设计)
Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
2.3 MyEclipse简介
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
在结构上,MyEclipse的特征可以被分为7类: 1. J2EE模型 2. WEB开发工具 3. EJB开发工具
4. 应用程序服务器的连接器 5. J2EE项目部署服务
7
河南工业职业技术学院毕业论文(设计)
6. 数据库服务 7. MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。 2003年,Eclipse 3.0选择OSGi服务平台规范为运行时架构。 2007年6月,稳定版3.3发布。2008年6月发布代号为Ganymede的3.4版。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开发源码项目,它其实是 Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关
8
河南工业职业技术学院毕业论文(设计)
注。近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
3 可行性分析
3.1 系统可行性分析
需求分析工作是系统设计的出发点和依据。概括地说线路查询系统的需求分析就是要根据出行人员的具体需求情况,明确需要什么样的查询系统,需要什么样的功能和性能,为什么需要,以及各种需求的紧迫程度如何。只有需求明确了,按需求建立起来的线路查询系统才能达到预期的目标,取得预定的效果。 3.1.1 技术可行性分析
本系统采用的是Tomcat、JSP和数据库相结合的方法,将所有收集的数据信息按其属性分类存储到数据库中,再通过程序调用这些数据信息实现各种查询及管理,即所谓的\"程序设计数据化,数据管理程序化\"思想。
基于这种思想的查询系统的理论及技术已日趋成熟,加之这些软件的应用性和移植性都非常优秀而且其发展也到了较成熟的阶段,这就保障了日后的系统维护工作,并可不断更新。
所以本系统在技术上是绝对可行的。而且该系统对于操作环境的要求不高,现在普遍使用的计算机都可以运行该系统。 3.1.2 操作可行性分析
本系统界面美观明了,提供的信息语言通俗易懂,而且操作容易,用户只要懂得初步的计算机操作即可。
9
河南工业职业技术学院毕业论文(设计)
3.1.3 经济可行性分析
从成本上看来,开发及维护系统所需的计算机、网络等硬件设备,网络等通信费用,软件支持等基本上都是现有的。
从收益看来:本系统作为公交线路查询的具体应用,是带有实验性、贡献性的,在一定时期内无经济上收益。是注重以后的潜在发展,是在概念上、形象上的不断升值。
3.1.4 社会环境可行性分析
如今城市改造日益加快,公交线路也不断增多,使得交通的便捷性难上加难,给出行人员选择出行乘车线路造成一定的困难,特别是在旅游城市,游客在乘公交车时选择线路比较困难,它不仅可以给市民游客的乘车提供向导,同时可以对外展现城市的现代风貌,体现出一个城市公交信息数字化和信息化的发展水平。所以本系统拥有非常成熟的市场。
3.2 系统需要解决的主要问题
综合应用JSP等技术,从公交查询系统建立的必要性出发,使用软件系统设计的一般方法,根据业务需求,对其进行分析、归纳, 形成需求设计文档,根据需求分析进行系统的概要设计、详细设计及代码开发,从而完成整个设计。设计一个适用的公交车线路查询系统,主要实现以下功能:
1. 公交路线查询功能(包括按线路查询、按站点查询、按起点终点站查询,换乘查询,也支持模糊查询);
2. 公交路线信息的管理功能(包括对路线信息的添加、删除、修改)。
3.3 系统应具备的基本功能
基于B/S模式的应用系统的开发设计方法,开发出一个适用的公交查询系统软件,实现以下功能:
10
河南工业职业技术学院毕业论文(设计)
(1)特定线路的沿途到站情况; (2)通过特定站点的所有线路名称 ; (3)两个站点之间的直达公交车次; (4)给定起止站点,给出可达的换乘线路; (5)模糊查询;
(6)公交路线信息的管理,数据的维护;
新增:允许管理员级的用户对数据进行新增操作,保证数据库的真实
性与实时性;
更新:允许管理员级的用户对数据进行更新操作,保证数据库的真实
性与实时性;
删除:允许管理员级的用户对数据进行删除操作,保证数据库的真实
性与实时性。
3.4 系统功能模块划分
3.4.1. 普通系统模块
该模块实现公交查询功能。可实现按线路查询、站点查询和起点--终点查询查询三种查询方式。 3.4.2 高级查询模块
该模块实现高级查询,包括车次查询、模糊站点查询、模糊线路查询、模糊换乘查询。 3.4.3. 后台管理模块
该模块实现数据的新增、修改、删除功能 系统模块图如图所示:
11
河南工业职业技术学院毕业论文(设计)
按 线路 查询按站点查询普通查询 无锡公交查询系统 高级查询 后台管理
两站点间换乘查询添加 修改 删除 车次查询模糊站点查询模糊线路查询模糊换乘查询车次信息车次信息车次信息 4 系统设计
4.1 数据库设计
4.1.1 概念设计
概念设计的目标是产生反映城市公交查询系统需求的数据库概念结构,即概念模式。概念模式是于数据库逻辑结构,于支持数据库的DBMS,不依赖于计算机系统的。 1、E-R模型
E-R模型是对现实世界的一种抽象。它的主要成分是实体、联系和属性。使用这三种成分,我们可以建立许多应用环境的ER模型。 2、 E-R模型的操作
在利用E-R模型进行数据库概念设计的过程中,常常需要对ER图进行种种变换。这些变换又称为E-R模型的操作,包括实体类型、联系类型和属性的、合并和增删等等。
3、利用E-R方法的数据库概念设计
利用E-R方法进行数据库的概念设计,可以分成三步进行:首先设计局部
12
系统模块图
河南工业职业技术学院毕业论文(设计)
E-R模式,然后把各局部E-R模式综合成一个全局E-R模式,最后对全局E-R模式进行优化,得到最终的E-R模式,即概念模式。
通常,一个数据库系统都是为多个不同用户服务的。各个用户对数据的观点可能不一样,信息处理需求也可能不同。在设计数据库概念结构时,为了更好地模拟现实世界,一个有效的策略是“分而治之”,即先分别考虑各个用户的信息需求,形成局部概念结构,然后再综合成全局结构。在E-R方法中,局部概念结构又称为局部E-R模式,其图形表示称为E-R图。
具体实体属性的关系图如图所示:
夏季发车时间 4.联系定义
13
车辆序号
车次号
经过站点信息
车次信息
冬季发车时间
夏季结束时间 票价 冬季结束时间
管理员帐号 管理员密码 管理员信息 备注 管理员姓名 实体属性关系图
河南工业职业技术学院毕业论文(设计)
E-R模型的“联系”用于刻画实体之间的关联。一种完整的方式是对局部结构中任意两个实体类型,依据需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系。若有联系,进一步确定是1:N,M:N,还是1:1等。还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等。 5、设计全局E-R模式
所有局部E-R模式都设计好了后,接下来就是把它们综合成单一的全局概念结构。全局概念结构不仅要支持所有局部E-R模式,而且必须合理地表示一个完整、一致的数据库概念结构。 1)确定公共实体类型
为了给多个局部E-R模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型。在这一步中我们仅根据实体类型名和键枕认定公共实体类型。一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候选。 2)局部E-R模式的合并
合并的原则是:首先进行两两合并;先和合并那些现实世界中有联系的局部结构;合并从公共实体类型开始,最后再加入的局部结构。 3)消除冲突
冲突分为三类:属性冲突、结构冲突、命名冲突。
设计全局ER模式的目的不在于把若干局部E-R模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一的概念模型。
4)全局E-R模式的优化
在得到全局E-R模式后,为了提高数据库系统的效率,还应进一步依据处理需求对E-R模式进行优化。一个好的全局E-R模式,除能准确、全面地反映用户功能需求外,还应满足下列条件:实体类型的个数要尽可能的少;实体类型所含属性个数尽可能少;实体类型间联系无冗余。
本系统的E-R模型如图3.3.1-2所示
14
河南工业职业技术学院毕业论文(设计)
4.1.2 表设计
考虑系统的实际需要,系统需要公交信息表,管理员表。 1.公交信息表(Bus)
公交信息表存储公交线路的详细信息,字段说明如表3-1所示 Bus表的字段说明 编号 1 2 3 4 5 6 7 8 字段名称 BusID Detail A_STime W_STime A_ETime W_ETime T_Value Sort 字段类型 nvarchar ntext ntext ntext ntext ntext int int 字段说明 车次号 主键 车次经过站点 夏季发车时间 冬季发车时间 夏季结束时间 冬季结束时间 票价 车序号 时 间 1:1 车 次 1:1 票 价 图3.3.1-2 ER模型图
线 路 1:1 1:n 站 点 CREATE TABLE bus (
BusID nvarchar Primary key, Detail ntext Not Null,
15
河南工业职业技术学院毕业论文(设计)
A_STime ntext, W_STime ntext, A_ETime ntext, W_ETime ntext,
T_Value int Not Null, Sort int Not Null )
其中Detail存放车次的站点信息,其格式为××××->×××->×××。
2. 管理员表
管理员表存储管理员的详细信息,字段说明如表3-1所示 编号 1 2 3 4 字段名称 ManagerID TrueName Password Comment 字段类型 nvrchar nvrchar nvrchar nvrchar 字段说明 管理员编号 管理员姓名 密码 备注 CREATE TABLE manager (
ManagerID nvrchar Primary key, TrueName nvrchar Not Null, Password nvrchar Not Null,
16
河南工业职业技术学院毕业论文(设计)
Comment nvrchar )
4.2 系统部分模块设计
无锡公交线路查询系统总体上可分为普通查询模块(包括清晰站点查询、清晰线路查询、清晰换乘查询)、高级查询模块(包括模糊车次查询、模糊站点查询、模糊线路查询、模糊换乘查询),后台管理模块(包括删除线路、修改线路、添加线路等功能)。 4.2.1普通查询模块 1. 线路查询
首先用户准备查询公交线路,在下拉菜单中选择选择公交车次号,启动车次查询,系统从数据库中读取公交车次信息,在新窗口中显示车次经过的站点等详细信息。
启动车次查询 17
用户准备查询公交线路信息 用户准备查询公交站点信息
选择公交车次号 选择查询的站点 启动站点查询 从数据库中读取公交车次信息 从数据库中 读取站点信息 河南工业职业技术学院毕业论文(设计)
2. 站点查询
首先用户准备查询站点信息,在下拉菜单中选择选择要查询的站点,启动站点查询,系统从数据库中读取公交站点信息,在新窗口中显示经过该站点的公交线路的详细信息。
3. 换乘查询
首先用户准备查询换乘信息,在下拉菜单中选择选择起始站点和到达站点,启动换乘查询,系统首先判断是否有直达车,如果有直达车直接给出换乘信息,如没有直达车则在数据库中查找换乘线路和中转站,再给出换乘信息,在新窗口中显示显示换乘信息查询结果。
显示换乘信息查询结果 18 用户准备查询线路换乘信息 选择起始站点 选择到达站点 启动换乘查询 N 判断是否有 直达车 在数据库中查找 Y 生成换乘信息 换乘线路和中转站 换乘查询流程图
河南工业职业技术学院毕业论文(设计)
4.2.1 高级查询模块 1. 车次查询
首先用户准备查询公交车次,在文本框中输入公交车次号,系统判断输入车次号是否有效,如输入错误,系统提示错误信息,要求重新输入,若输入正确启动车次查询,系统从数据库中读取公交车次信息,在新窗口中显示车次经过的站点等详细信息
19
用户准备查询公交车次信息 输入查询的车次 提示错误信息 检验输入 是否有效 Y 启动车次查询 N 要求重新输入 从数据库中 读取车次信息 显示车次信息查询结果 模糊车次查询流程图
河南工业职业技术学院毕业论文(设计)
2. 模糊站点查询
首先用户准备查询公交站点,在文本框中输入查询的站点关键字,系统判断输入关键字是否有效,如输入错误,系统提示错误信息,要求重新输入,若输入正确启动模糊查询,系统从数据库中读取与站点关键字匹配的站点,在新窗口中显示所有与输入关键字匹配的所有站点。
输入查询的站点关键字 用户准备查询公交站点信息
20
提示错误信息 检验输入 是否有效 N 要求重新输入 Y 启动模糊查询 从数据库中读取与 站点关键字匹配的站点 显示站点信息查询结果 模糊站点查询流程图
河南工业职业技术学院毕业论文(设计)
3. 模糊线路查询
首先用户准备查询公交站点,在文本框中输入查询的站点关键字,系统判断输入关键字是否有效,如输入错误,系统提示错误信息,要求重新输入,若输入正确启动模糊查询,系统从从数据库中读取经过与站点关键字匹配的站点的线路
,在新窗口中显示所有与输入关键字匹配的所有线路,即与关键字相关的车次及详细信息。
用户准备查询公交线路信息 输入查询的站点关键字 提示错误信息 要求重新输入 检验输入 N 是否有效 Y 启动模糊查询 从数据库中读取经过与 站点关键字匹配的站点的线路 显示线路信息查询结果 模糊线路查询流程图
21
河南工业职业技术学院毕业论文(设计)
4. 模糊换乘查询
首先用户准备查询公交站点,在文本框中输入查询的站点关键字,系统判断输入关键字是否有效,如输入错误,系统提示错误信息,要求重新输入,若输入正确启动模糊查询,系统从数据库中读取与关键字匹配的站点,然后启动换乘查询,系统先判断是否有直达车,如果有直达车直接给出换乘信息,如没有直达车则在数据库中查找换乘线路和中转站,再给出换乘信息,在新窗口中显示显示换乘信息查询结果。
输入起始站点和
用户准备查询线路换乘信息
到达站点关键字 提示错误信息 要求重新输入 检验输入 是否有效 N Y 启动换乘查询 N 判断是否有 直达车 在数据库中查找 Y 生成换乘信息 换乘线路和中转站 显示线路信息查询结果 22
模糊换乘查询流程图
河南工业职业技术学院毕业论文(设计)
4.2.3后台管理模块
管理员维护整个系统,管理员输入用户名和密码后,登陆后台管理系统,在后台管理系统,管理员可以进行添加车次信息,修改车次信息,删除车次信息等操作。
退出后台 管理系统 输入用户名和密码登录后台管理系统 管理员要进行后台管理 添加车次信息 修改车次信息 删除车次信息 后台管理流程图
23
河南工业职业技术学院毕业论文(设计)
5系统的实现
5.1 普通查询模块
系统主页即是普通查询模块,是由homepage.jsp页面实现,它包括了站点查询子模块、线路查询子模块和换乘查询子模块。如图所示。
主页核心是把数据库中的车次和站点取出来,在下拉列表中显示。主要采用了ResultSet.getString()方法,首先设置两个数据库结果集(ResultSet)result1、 result2.和两个数组busid[]、all_station[],分别存放车次号和站点名,因为站点采用××××->×××->×××的方式存在数据库中所以采用StringTokenizer
24
河南工业职业技术学院毕业论文(设计)
str=new StringTokenizer(detail,\"->\");方法将站点取出来存入all_station[],然后遍历数组在下拉列表中显示。其核心代码如下:while(result1.next())
{ busid[i]=result1.getString(\"BusID\");
i++;
}
result1.close();//把车次查询的车次号存入busid[]中。
while(result2.next())
{ //把每一条记录放入临时变量detail中
detail=result2.getString(\"Detail\");
StringTokenizer str1=new
StringTokenizer(detail,\"->\");
//对每一条记录的每一个站点进行比较
while(str1.hasMoreTokens())
{ mark=0;//恢复mark的值,以便比较下一条记录
StringTokenizer str2=new
StringTokenizer(str1.nextToken(),\" \");
station2=str2.nextToken();
//注:count是随着程序的执行而不断的增加
for(int k=0;k if(station2.indexOf(all_station[k])!=-1||all_station[k].indexOf(s tation2)!=-1) { mark=1; flag=0; } else 25 河南工业职业技术学院毕业论文(设计) flag=1;//如果全都不相同时,用flag值来跟踪 } //把不重复的站点放入数组中,count加一, if(flag==1) { all_station[count]=station2; count++; } } } result2.close(); Arrays.sort(all_station, cmp); //遍历数据库,把所有站点不重复地放 入数组all_station[]数组中 5.1.1 车次查询子模块 用户进入系统后,可以从“请选择车次”下拉列表中得到数据库中的所有车次,选中要查询的车次号,然后点击查询,即可显示该车次经过的所有站点。例如查询756路车。结果如图所示。 26 河南工业职业技术学院毕业论文(设计) 用户点击“查询”,触发submit事件,将得到的数据“query1”传递 \"resultquery1.jsp”进行车次查询,\"resultquery1.jsp”主要是通过 String BusID= request.getParameter(\"query1\"); 得到所选中的线路,然后用 statement=\"select * from bus where BusID='\"+BusID+\"'\"; result=sql.executeQuery(statement); 27 河南工业职业技术学院毕业论文(设计) 从数据库中查出车次经过的所有站点。最后用 while(result.next()){ String busid=result.getString(\"BusID\"); String Detail=result.getString(\"Detail\"); a_startime=result.getString(\"A_STime\"); a_endtime=result.getString(\"A_ETime\"); w_startime=result.getString(\"W_STime\"); w_endtime=result.getString(\"W_ETime\"); t_value=result.getInt(\"T_Value\"); StringTokenizer str1=new StringTokenizer(Detail,\"->\"); while(str1.hasMoreTokens()) { stations[count]=str1.nextToken(); count++; } 在页面中显示该车次经过的所有站点。 5.1.2 站点查询子模块 用户可以从“请选择站点”下拉列表中得到数据库中的所有站点,选中要查询的站点,然后点击查询,即可显示所有经过要查询站点的车次号和经过的所有站点,其中要查询的站点在结果中高亮显示。例如,查询南禅寺(朝阳广场),结果如图所示。 28 河南工业职业技术学院毕业论文(设计) 用户点击“查询”,触发submit事件,将得到的数据“query2”传递 \"resultquery2.jsp”进行站点查询,\"resultquery2.jsp”主要是通过 String BusID = request.getParameter (\"query2\"); 得到所选中的站点,然后用 statement=\"select * from bus where Detail LIKE '%\"+Station+\"%' order by Sort ASC\" ; result=sql.executeQuery(statement); 从数据库中查出所有经过要查询站点的车次号和经过的所有站点。最后通过 while(result.next()) { String BusID=result.getString(\"BusID\"); String Detail=result.getString(\"Detail\"); 29 河南工业职业技术学院毕业论文(设计) StringTokenizer str1=new StringTokenizer(Detail,\"->\"); count=0; while(str1.hasMoreTokens()) { stations[count]=str1.nextToken(); count++; } 显示所有经过要查询站点的车次号和经过的所有站点 5.1.3 换乘查询子模块 用户可以从“请选择起始站”和“请选择到达站”下拉列表中得到数据库中的所有站点,选中要查询的起始站和到达站,然后点击查询,即可显示所有到达的途径,如果没有直达车,将为你建议若干中转站。例如南禅寺到国家软件园有直达车,结果如图所示。 例如国家软件园(菱湖大道)到蠡湖广场没有直达车,要进行换乘,结果如图所示。 用户点击“查询”,触发submit事件,将起始站点“S_query3”和到达站点 “E_query3”传递到到\"resultquery3.jsp”进行车次查询,\"resultquery3.jsp”得 30 河南工业职业技术学院毕业论文(设计) 到要查询的起始站和到达站后,首先判断是否有直达车,如果有直达车直接给出换乘信息,如没有直达车则在数据库中查找换乘线路和中转站,再给出换乘信息,在新窗口中显示显示换乘信息查询结果。当有直达车时,查询代码如下。 con=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/db_bus\",\"root\",\"root\"); sql1=con.createStatement();//从数据库中找出所有含有起始站和终止站的数据 String condition1=\"select * from bus where Detail LIKE '%\"+S_Station+\"%\"+E_Station+\"%' OR Detail LIKE '%\"+E_Station+\"%\"+S_Station+\"%' order by Sort ASC\"; result1=sql1.executeQuery(condition1); //把结果放在数组Result1[i]中 while(result1.next()) { Result1[i]=result1.getString(\"BusID\"); Detail[i]=result1.getString(\"Detail\"); i++; } result1.close(); 之后输出查询结果。 当没有直达车需要转车时,询代码如下。 //查询所有包含有起始站,而不包含终点站的车次信息 sql2=con.createStatement(); String condition2=\"select * from bus where Detail LIKE '%\"+S_Station+\"%' AND Detail NOT LIKE '%\"+E_Station+\"%'\"; result2=sql2.executeQuery(condition2); 31 河南工业职业技术学院毕业论文(设计) while(result2.next()) { S_BusID[j]=result2.getString(\"BusID\"); S_Detail[j]=result2.getString(\"Detail\"); j++; } result2.close();//关闭第二个结果集 //查询所有包含有终点站,不包含起始站的车次信息 sql3=con.createStatement(); String condition3=\"select * from bus where Detail LIKE '%\"+E_Station+\"%' AND Detail NOT LIKE '%\"+S_Station+\"%'\"; result3=sql3.executeQuery(condition3); while(result3.next()) { E_BusID[h]=result3.getString(\"BusID\"); E_Detail[h]=result3.getString(\"Detail\"); h++; } result3.close();//关系第三个结果集 //把要转车的信息放Result2系列的数组 for(k=0;k detail1=S_Detail[k]; //把detail1用'->'符号区分 StringTokenizer str1=new StringTokenizer(detail1,\"->\"); //对S_Detail[]中的每一个元素的每一个站点进行比较 32 河南工业职业技术学院毕业论文(设计) while(str1.hasMoreTokens()) { station1 = str1.nextToken();//初始临时变量 //取出E_Detail[]数组中的每一个元素 for(n=0;n StringTokenizer str2=new StringTokenizer(detail2,\"->\"); //取出E_Detail[]数组中的每一个元素的每一个站点 while(str2.hasMoreTokens()) { station2 = str2.nextToken(); //把结果存储到结果集中 if(station1.equals(station2)) { Result2_ID1[count]= S_BusID[k]; Result2_tan[count]= station1; Result2_ID2[count]= E_BusID[n]; count++; } } } } } 之后输出转乘车次1,转乘车次2,以及中转站信息。 33 河南工业职业技术学院毕业论文(设计) 5.2 高级查询模块 高级查询模块由advancequery.jsp页面实现,在主页上点击高级搜索即可进入高级查询模块,包括车次查询、模糊站点查询、模糊线路查询、模糊换乘查询),它与普通查询的区别是可以模糊查询,也就是不完全匹配,用户只需输入站点名称和部分字符信息,系统便会给出与此相关的所有站点信息。页面如图所示。 因为车次查询子模块、模糊站点查询子模块、模糊线路查询子模块之间都有联系,所以写在了一个文件中resultadvance1.jsp中,在resultadvance1.jsp通过 String keyword= request.getParameter(\"advance1\"); 得到“advance1”,然后通过if(method.equals(\"按站点查询\")){}, else 34 河南工业职业技术学院毕业论文(设计) if(method.equals(\"按路线查询\")){} ,else if(method.equals(\"按车次查询\")){} 来区分三种查询模块。 5.2.1 车次查询子模块 用户进入界面后,可以输入要查询的车次号,然后选择查询方式,选择“按车次查询”,点击查询,即可显示该车次经过的所有站点。例如查询9路车。结果如图所示。 35 河南工业职业技术学院毕业论文(设计) 在车次查询子模块中通过 statement=\"select * from bus where BusID='\"+BusID+\"'\"; result=sql.executeQuery(statement); 从数据库中查出车次经过的所有站点。遍历后显示出来。核心代码如下: int id=Integer.parseInt(keyword); Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CON 36 河南工业职业技术学院毕业论文(设计) CUR_READ_ONLY); statement=\"select * from bus where Sort=\"+id+\"\"; result=sql.executeQuery(statement); if(!result.next()) { response.sendRedirect(\"errorquery1.jsp\"); } else { result.previous(); //显示站点的详细信息 while(result.next()){ String Detail=result.getString(\"Detail\"); a_startime=result.getString(\"A_STime\"); a_endtime=result.getString(\"A_ETime\"); w_startime=result.getString(\"W_STime\"); w_endtime=result.getString(\"W_ETime\"); t_value=result.getInt(\"T_Value\"); StringTokenizer str1=new StringTokenizer(Detail,\"->\"); while(str1.hasMoreTokens()) { stations[count]=str1.nextToken(); count++; } } } 5.2.2模糊站点查询子模块 用户进入高级查询界面后,可以输入要查询站点的关键字,然后选择查询方 37 河南工业职业技术学院毕业论文(设计) 式,选择“按站点查询”,点击查询,即可显示包括该关键字的所有站点。例如输入关键字“软件园”。结果如图所示。 在站点模糊查询子模块首先用StringTokenizer方法得到所有站点存入 all_station[],然后用 for(int i=0;i { relation[countrelation]=all_station[i]; } result.close(); countrelation++; } 和all_station[]中的数据匹配,匹配成功的即为要查询的站点。 5.2.3模糊线路查询子模块 用户进入高级查询界面后,可以输入要查询站点的关键字,然后选择查询方式,选择“按路线查询”,点击查询,即可显示经过包括该关键字的站点的车次信息。例如输入关键字“菱湖”。结果如图所示。 38 河南工业职业技术学院毕业论文(设计) 在线路模糊查询子模块是在模糊站点查询的基础上,得到与关键字匹配的站点名,然后再进行一次站点查询,得到经过包括该关键字的站点的车次信息。 5.2.4模糊换乘查询 用户可以在“起点”和“目的”文本框中输入起始站点和目的站点的关键字,然后点击查询,即可显示所有到达的途径,如果没有直达车,将为你建议若干中转站。例如“起点”和“目的”文本框分别输入软件园、南禅寺,结果如图所示。 39 河南工业职业技术学院毕业论文(设计) 该模块是前几个模块综合起来的,首先通过模糊查询得到起始站点和目的站点,然后判断是否有直达车,如果有直达车直接给出换乘信息,如没有直达车则在数据库中查找换乘线路和中转站,再给出换乘信息,在新窗口中显示显示换乘信息查询结果。 5.3 后台管理模块 系统管理员通过管理员登录输入用户名和密码登入管理员界面,管理员直接可以数据进行操作,如删除线路、修改线路、添加线路。 管理员登录界面如图所示: 40 河南工业职业技术学院毕业论文(设计) 用户单击“登录”按钮触发事件submit,跳转到logincheck.jsp界面进行验证,该事件实现用户登录的验证过程。如果用户输入是正确的,用户可以登录到系统中,否则页面弹出密码错误对话框或用户角色所属错误对话框。 sql.executeQuery(condition)从数据库获取合法用户的 ID数据,返回结果 为对象.其的关键代码如下: String target; String Manager = request.getParameter(\"username\"); String pwd = request.getParameter(\"password\"); String usr = Manager; session.setAttribute(\"Manager\",Manager); Statement sql=null; Connection con=null; ResultSet re=null; try{ Class.forName(\"com.mysql.jdbc.Driver\"); 41 河南工业职业技术学院毕业论文(设计) } catch(ClassNotFoundException e){} try{ con=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/db_bus\",\"root\",\"root\"); sql=con.createStatement(); String condition=\"select * from Manager where ManagerID='\"+usr+\"' and Password='\"+pwd+\"'\"; re=sql.executeQuery(condition); if (re.next()){ response.sendRedirect(\"Update/updateSet.htm\"); } else{ %> 你输入的用户名或密码不正确!请 重新输入 <% } re.close(); } catch(Exception e) {} 登录成功后的界面如图所示: 42 河南工业职业技术学院毕业论文(设计) 5.3.1 添加车次 车次的属性比较多,如车辆序号、车次经过站点、夏季发车时间、夏季结束时间、冬季发车时间、冬季结束时间、票价、车序号等信息,所以添加车次的过程比较复杂。 添加车次功能由页面add.jsp页面实现,checkadd.Jsp文件为它的隐藏代码,对添加的信息进行验证。一条线路至少包含下面几个属性:车辆序号、车次经过站点、夏季发车时间、夏季结束时间、冬季发车时间、冬季结束时间、票价、车序号等。因此它的运行界面如图所示。 43 河南工业职业技术学院毕业论文(设计) 添加车次页面上有一个很大的输入框,用来输入车次经过站点,该输入框以多行的形式显示数据;站点的格式是“站点1->站点2->站点3”,添加站点页面使用Javascript控件规范用户输入信息的格式;车次号必须是小于10个字段,票价必须是不大于三位数的数字,排序号必须是不大于五位数的数字,站点之间请以\"->\"符号连接,时间格式为18:30,单击“添加”按钮可以添加该车次。 Javascript代码为: 5.3.2 修改车次 修改车次功能由modify.jsp页面实现,它的代码隐藏文件为checkmodify.jsp文件。通过 while(result.next()) } { busid[i]=result.getString(\"BusID\"); i++; 将所有车次列表显示,点击修改将跳转至“display.jsp”界面,“display.jsp”显示车次的详细信息,与添加车次界面类似。 通过 con=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/db_bus\); Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 46 河南工业职业技术学院毕业论文(设计) statement=\"select * from bus where BusID='\"+busid+\"'\"; result=sql.executeQuery(statement); if(result.next()) { detail=result.getString(\"Detail\"); //out.println(detail); a_startime=result.getString(\"A_STime\"); a_endtime=result.getString(\"A_ETime\"); w_startime=result.getString(\"W_STime\"); w_endtime=result.getString(\"W_ETime\"); value=result.getInt(\"Sort\"); t_value=result.getInt(\"T_Value\"); i++; } 读取车次的详细信息。 用户单击“修改”按钮触发事件submit实现车次的修改功能,跳转到checkmodify.jsp进行验证,该事件和添加车次事件有很多相同之处,单击“重置”按钮触发事件reset将改动的信息恢复原值。 5.3.3 删除车次 删除车次功能由delete.jsp页面实现,删除车次和车次修改实现有很多相同之处,如都是通过一个循环将所有车次列表显示,点击详情将显示车次的详细信息,车次的删除功能是由“删除”按钮实现,用户单击“确认删除”按钮触发事件,该事件删除选中的车次。事件的代码如下: con=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/db_bus\); Statement sql=con.createStatement(); statement=\"delete * from bus where BusID='\"+BusId+\"'\"; 47 河南工业职业技术学院毕业论文(设计) sql.executeUpdate(statement); 、 48 河南工业职业技术学院毕业论文(设计) 总 结 一个应用程序设计开发的好坏,与设计人员对开发工具的掌握程度息息相关。在本系统的开发设计过程中,由于本人对开发工具的掌握有限,可以说整个的开发过程是一边摸索一边实践出来的。但令人高兴的是,通过这样一个边学习边应用的过程,本人完成了公交查询系统的开发工作,并实现了该应用程序背景所要求的功能。但总的来说,程序仍然存在许多不足之处, 在整个开发过程中本人一直本着认真、虚心、刻苦、积极的态度,坚持自己完成设计,并基本达到了应用设计的功能要求。希望该系统在日后能够得到不断改进,发挥出它应有的作用。 49 河南工业职业技术学院毕业论文(设计) 致谢 这次毕业设计得到了很多老师和同学的帮助,其中我的指导老师胡红华老师对我的关心和支持尤为重要,在他的带领下我才完成了这次毕业设计。非常感谢胡老师、郭老师在我大学的最后学习阶段——毕业设计阶段给我的指导,从最初的定题,到资料收集,到论文、修改,到论文定稿,他给了我耐心的指导和无私的帮助。为了指导我们的毕业论文,他放弃了自己的休息时间,他的这种无私奉献的敬业精神令人钦佩,在此我向他表示我诚挚的谢意。同时,感谢所有任课老师和所有同学在这几年来给我的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,桃李满天下 另外,感谢校方给予我这样一次机会,能够地完成一个课题,并在这个过程当中,给予我们各种方便,使我们在即将离校的最后一段时间里,能够更多学习一些实践应用知识,增强了我们实践操作和动手应用能力,提高了思考的能力。再一次对我的母校表示感谢。 感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在大学生活即将结束的最后的日子里,我们再一次演绎了团结合作的童话,把一个庞大的,从来没有上手的课题,地完成了。正是因为有了你们的帮助,才让我不仅学到了本次课题所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。 最后,感谢所有在这次毕业设计中给予过我帮助的人。 对上述老师同学们,再一次真诚地表示感谢! 50 河南工业职业技术学院毕业论文(设计) 参考文献 [1]郭静. 基于JSP的通用信息发布管理系统[J]重庆工学院学报 , 2005,(11) . [2]任艳, 李九龄. 应用JSP进行数据库信息发布[J]. 计算机工程与应用 , 2002,(07) [3]王国辉. Java Web开发技术方案宝典[M]人民邮电出版社 , 2008.2 [4]梁玉环, 李村合, 索红光. 基于JSP的网站访问统计系统的设计与实现[J]. 计算机应用研究 , 2004,(04) [5]钟雁. 管理信息系统开发案例分析[M]清华大学出版社 , 2006 . [6]李尊朝.JAVA语言程序设计[M].中国铁道出版社. 2004.9. [7] 孙卫琴,李洪成. Tomcat与Java Web开发技术详解 [M]电子工业出版社 , 2004.4. [8]连洪武. Eclipse Web开发从入门到精通[M].清华大学出版社. 2007.6. [9]高河福. 一个基于J2EE架构的MIS设计与实现[D]暨南大学 , 2003 . 51
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务