ssm公交系统毕业论文

无敌的宇宙
无敌的宇宙
擅长邻域:Java,HTML,JavaScript,MySQL,支付,退款,图片上传

分类: Java ssm MySQL 专栏: java ssm Mysql 标签: ssm公交系统毕业论文

2023-01-26 20:10:44 1102浏览

ssm公交系统毕业论文

 

毕业设计题目:基于Java的公交车查询系统的设计与实现

 

学生承诺

本人郑重承诺在进行毕业设计过程中遵守河北科技大学有关规定,恪守学术规范,所呈交的毕业设计内容除特别注明和引用外,均为本人观点,不存在剽窃、抄袭他人的学术观点、思想和成果,不存在伪造、篡改实验数据。如有违规行为发生我愿承担一切责任,接受学校的处理,并承担相应的法律责任。本人完全意识到本承诺的法律结果由本人承担。

学生(签名):

年 月 日

毕 业 设 计 中 文 摘 要

随着中国经济的快速发展,我国交通运输业也在不断的优化发展。公交车的站点和线路的增多也给人们的出行带来了极大的不便,特别是针对一些旅客在不了解当地的路线车次信息的情况下,那么就需要设计与实现一个公交车查询系统,方便乘客提前查看线路信息以及所有的出行方案。本系统是为了方便乘客在出行前提前查看公交车的线路信息以及站点信息,以便居民和旅客能够合理的安排时间,提高出行体验和生活效率。本项目采用了B/S架构,前端使用jsp+js技术实现,后端采用了java语言,开发环境使用的是jdk1.8+tomcat,使用MySQL数据库来存储本系统的相关数据,开发工具采用的是目前主流的IDEA。

通过对身边的人的调查以及网上查阅人们的出行方式的相关背景调研,以及公交车查询的应用前景进行了分析。对本系统前端设计的主要功能为:用户注册登录、站点查询、车次查询以及推荐的出行方案;管理员后台具有:用户信息管理、站点信息管理、公交车次管理、新闻公告管理、用户留言管理等主要模块。主要模块运行有效稳定。本系统具有良好的应用前景。

关键词 公交查询 MySQL Java SSM JSP

毕 业 设 计 外 文 摘 要

Title Design and implementation of bus query system based on Java

Abstract

With the rapid development of China's economy, China's transportation industry is also constantly optimizing development.The increase of bus stations and routes has also brought great inconvenience to people's travel, especially for some passengers who do not know the local route and number of information, then it is necessary to design and implement a bus inquiry system, convenient for passengers to view the line information and all the travel plans in advance.This system is to facilitate passengers to check the bus line information and station information before travel, so that residents and passengers can reasonably arrange their time, improve travel experience and life efficiency.This project adopts the B/S structure, the front end uses JSP + JS technology, the back end uses Java language, the development environment uses JDK1.8 + Tomcat, uses the MySQL database to store the relevant data of the system, the development tool uses the current mainstream IDEA.

Through the investigation of people around and online access to people's travel mode related background research, the determination of the research direction, as well as the application prospect of bus inquiry were analyzed.The main functions of the front-end design of this system are: user registration and login, site query, train number query and recommended travel plan;The administrator background has: user information management, site information management, bus management, news announcement management, user message management and other main modules.The main modules run effectively and stably.This system has a good application prospect.

Key Words Public transport inquiry MySQL Java SSM JSP

目 录

TOC \o "1-3" \h \u 1 绪论 1

1.1 研究背景和研究意义 1

1.1.1 研究背景 1

1.1.2 研究意义 1

1.2 研究内容、研究目标和研究方法 2

1.2.1 研究内容 2

1.2.2 研究目标 2

1.2.3 研究方法 2

1.3 研究现状 2

1.4 论文结构 3

2 技术基础 4

2.1 B/S结构介绍 4

2.1.1 B/S介绍 4

2.1.2 B/S体系结构特点和优点 4

2.2 SSM框架 4

2.1.1 Spring简介 5

2.1.2 Spring MVC简介 5

2.1.3 MyBatis简介 5

2.1.4 整合分析 5

2.3 JSP概念 6

2.4 MySQL数据库 6

2.5本章小结 7

3 需求分 8

3.1 需求描述 8

3.2 可行性分析 8

3.2.1 已具备条件 8

3.2.2 可行性分析 8

3.3功能需求分析 9

3.3.1站点信息 9

3.3.2公交车次 9

3.3.3出行方案 9

3.3.4 用户模块 9

3.3.5 新闻公告 10

3.3.6 管理员模块 10

3.4 本章小结 12

4 系统设计 13

4.1系统结构图 13

4.2系统模块流程图 13

4.2.1查询模块流程图 13

4.2.2用户模块流程图 14

4.2.3管理员模块 16

4.3数据库设计 16

4.3.1 设计 17

4.3.2 所有线路表 19

4.4 本章小结 22

5 系统实现 23

5.1系统功能简介 23

5.2 功能模块实现 23

5.2.2公交站点查询 28

5.2.3公交车次查询 29

5.2.4公交起点终点查询 30

5.2.5出行方案查询 33

5.3 本章小结 38

结 论 39

参 考 文 献 40

致 谢 41

1 绪论

1.1研究背景和研究意义

1.1.1研究背景

随着科学技术的快速发展,城镇化进程也在不断加快,城市的道路建设也越来越好,但是随着道路建设的不断优化,公交车的线路也将会变得越来越复杂。在当今社会我们在每个大大小小的城市都可以看到公共汽车的身影,并且随着公交车的数量、线路和站点数目的增多,以及复杂的交通网络给大多数人在选择公共交通出行的基础上也带来了诸多问题,而此时居民或者旅客在出行前,需要提前了解公交车的线路信息以及该车次的途径的站点信息,那么对于这些问题,乘客们选择什么样的的线路出行,就成为了居民和旅客日益关注的话题。我们现在已经生活在一个被互联网包围的信息化时代,互联网也已经被千家万户所接收,那么通过网络将会帮助人们通过网上查询的方式来进行方便快捷的查询公交信息,那么在出行前提前查询公交车的站点线路信息,这一问题就会得到了有效的解决。

1.1.2研究意义

随着城镇化人口的不断加剧,城市的发展愈演愈烈,公交车的数量,站点也逐渐增多。虽然公交车的发车次数适当的增加,减少了乘客等车的时间,但是站点、线路和公交车的数量的增加,就会使人们感觉线路混乱难以记住。所以为了居民或者游客方便快捷精准的查询到公交车的站点信息以及公交车的途径站点信息,以及推荐的所有出行方案,设计与实现了基于Java的公交车查询系统,这样就大大提高了用户出行体验感,公交车查询系统是信息时代居民或者旅客出行前获取站点,车次以及路线查询的重要组成部分。该系统的建设为人们及时、准确地提供了所需的公共交通信息,对优化城市交通压力和保护环境起到了一定的作用。然而,对于公交车的数量、线路和站点数目的增多,给人们的出行带来了不便,并且大多数人选择公共交通出行的基础上也带来了诸多问题,例如旅客在出行前需要提前了解当地城市公交车的站点信息以及对线路信息进行查询,以便可以合理安排时间极大提高了出行体验感,减少了不必要的时间浪费,在这种情况下,公交车查询系统显的非常方便和高效,所以在这个背景下很有必要设计一个专门针对公交车的查询系统,方便乘客在出行前提前查看公交车的线路信息以便合理安排时间,这样极大的提高了乘客出行体验以及生活效率的改善。

1.2研究内容、研究目标和研究方法

1.2.1 研究内容

基于这种背景下所提出的公交车查询系统,将会对居民和旅客出行起到了极大的帮助与便捷,使得选择公交出行的用户更清楚的了解车次站点以及线路的相关信息,极大程度的减少了时间消耗,也能够提高出行体验感。本系统中的设计模式主要是应用了B/S架构中的MVC的设计模式,采用了SSM开源框架实现了具体的技术。MVC设计模式[6]是一种比较典型的设计模式,M(Model模型)主要负责数据与模型、V(View视图)主要负责显示、C(Controller控制)主要负责交互业务,MVC设计模式将一个应用的操作进行有效的分离,视图层也是依赖于模型的。视图层可以理解为我们的界面,该界面将会清晰的展现给用户关于公交车站点线路以及车次的查询,这就是本次研究的主要内容。

1.2.2 研究目标

通过对身边的人的调查以及网上查阅人们的出行方式的相关背景调研,以及公交车查询的应用前景进行了分析,进行了研究方向的确定。对公交车查询系统的前端设计主要实现的功能要有:用户注册登录、站点查询、车次查询、推荐的出行方案[2]以及其他功能;管理员后台具有:对用户信息管理、站点信息管理、公交车次管理、新闻公告管理、用户留言管理等主要模块。该系统管理员要针对实际线路的修改和删除,必须及时的在本系统中进行更新,使用户可以及时的获得更新的线路信息,让更多的用户可以体会到本系统的优越性。本系统的界面要求简洁,操作性强。查询站点、车次以及出行方案比较直观,方便广大用户理解直接上手使用,这样使得系统维护和运行的效率得到极大的提升。

1.2.3 研究方法

本系统采用与本专业相关的专业性知识(B/S结构,前端主要使用JSP+js技术;后端使用JAVA语言以及SSM框架作为主要的开发技术,使用MySQL数据库进行数据的存储)。将课上的理论知识和自学的相关技术与具体的实践相结合,并通过逐步实现各个模块的方式设计与实现公交车查询系统。

1.3研究现状

与其他国家相比,我们国家对公共交通系统的研发开始稍晚。但是随着信息时代的飞速发展,相继建设了公交车查询系统,使乘客在出行前可以提前查看公交车线路信息,提高了人们的出行效率。

张紫嫣[1]在公交查询系统中采用网页开发、JSP技术、JAVA编程技、J2EE框架技术、Web技术和MySQL数据库、采用MyEclipse作为开发工具。系统采用B/S (浏览器/服务器)结构中的MVC模式,系统有用户角色即普通用户和管理员角色,主要的功能是公交线路、站点以及换乘方案查询。苏楠[2]在公共交通查询系统的设计与实现中采取了MYSQL数据库、JSP和Java编程技术,她的功能模块主要为用户登录模块、公交系统查询模块、留言版模块、车次信息管理模块等模块。胡晓纯[3]采用了广度优先算法和几种最短路径,她的系统所使用的B/S架构和ASP.NET MVC框架,采用了Microsoft Visual Studio 2010进行Web应用程序开发以及SQL Server 2008数据库研究并设计了相应的最优路径算法实现生成换乘路线的解决方案。

综合比较下来。张紫嫣的系统如果大量数据库操作出现在极短时间之内,往往会导致许多非法操作出现,在异常处理等方面依然不够完善,还有就是没有游客。但是功能较为全面。胡晓纯的。采用ASP.NET MVC作为开发框架进行开发,MVC是成熟的开发模式,容易开发和调试并且提供模糊查询,能够自动搜索用户可能需要的内容进行查询。

1.4论文结构

本论文的主要结构如下:

绪论,介绍了研究本系统的背景意义,以及研究方法等。

技术基础,介绍了设计与实现本系统所使用到的一些相关技术。包括SSM概念、JSP概念以及MySQL数据库的简单介绍。

需求分析,介绍了本系统的需求描述,可行性分析以及对各个功能的需求分析,最后对本章节做了总结。

系统设计,主要先对系统进行了概要的叙述并绘制该系统总体的系统结构图,然后划分了三个模块,并对各个模块绘制了具体的流程图和E-R图,之后对数据库进行了概要设计。

系统实现,先对本系统进行了简单介绍,之后对本系统各个功能模块进行了详细设计描述,进行了相关功能的测试和核心代码并以界面截图的形式展示。

2 技术基础

2.1 B/S结构介绍

2.1.1 B/S介绍

B/S (Browser /Server,浏览器/服务器)模式,又称B/S结构[3,8]。

在这个信息化的时代,人人一部手机似乎已经见怪不怪,我们每天几乎都会上网,比如你想要通过浏览器去搜索你想得到的相关新闻事件和热点消息,比如百度,我们怎么可以准确定位百度这个页面呢,当然我们可以在地址栏输入百度的访问链接www.baidu.com点击回车就可以进入百度的搜索页面。那么当你输入这个链接地址他又是怎么对你的请求做出相应并跳转到指定的页面,他是怎么做到的呢,也就是我们所说的B/S(浏览器/服务器)中的S(服务器)。

当你在浏览器页面(客户端)开始请求服务(GET/POST)也就是进行相关的操作,当你提交的时候就会向服务器发送http请求以及URL给服务器,然后等待S(服务器)响应。服务器端就会接受请求,解析URL,定位模板文件。之后根据URL中的参数和模板生成HTML文件,最后服务器回向浏览器发送此HTML文件,给浏览器一个http响应,那么到此服务器就完成了一次操作。当服务器做出http响应时客户端就会接受HTML文档,解析,整理相关的资源文件最后向用户呈现出请求的页面。那么这就是B/S结构。

2.1.2 B/S体系结构特点和优点

1.选择B/S结构就是因为他最大的优势是它可以在任何有网的地方进行操作,也正因为如此,极大的方便了客户端。而C/S(客户端/服务器)结构需要安装特定的软件,假若重装系统那么原来的安装的软件可能就不能使用,系统维护员就需要去重新安装软件。不仅如此,如果服务器升级那么每一个客户端都需要重装,维护成本显著提高,工作量也是相当庞大的。显而易见与C/S结构相比,这样大大减少了成本开销,也展现出B/S结构的优势。

2. 界面统一全部为浏览器方式,操作相对简单,可维护性强。

3. 可以有n多个用户同时访问服务器,当用户较多时可以增添服务器。Web采用了“瘦客户端”,“胖服务器端”,系统对将要访问系统的用户数量的限制放松了许多。

2.2 SSM框架

本系统使用了Java语言以及SSM框架进行开发。java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。SSM全称Spring+SpringMVC+MyBatis,SSM是半自动的持久框架,web后端开发采用SSM框架[9]。下面进行详细的叙述:

2.1.1 Spring简介

Spring的核心容器提供了基本的组成部分,其中也是spring中两大最核心的其中之一IoC控制反转,spring中的管理对象称为bean,spring中的beans模块其实就是一个工厂一个大杂烩。Spring提供了优秀的表达式语言。SpringIOC其实就是消减程序的耦合性,控制反转的意思就是原来创建对象实例都是我们手动new一个对象创建的,现在有了IOC控制反转就不需要我们来手动创建对象的实例,会由spring容器负责,spring会负责控制你与对象的实例的关系,这样控制权发生了反转,由调用者转到spring容器。SpringAOP面向切片,所谓AOP,个人理解为AOP的应用即代码是横切进去的,在日志记录、事务处理等被广泛应用。

2.1.2 Spring MVC简介

SpringMVC含有多种视图技术,在该系统中使用的视图为jsp也可以使用其他的视图,springMVC是不会关心你使用的是什么视图技术。SpringMVC在使用时需要在web.xml中配置DispatcherServlet,并且一般也会配置启动级别load-on-startup标签级别为1,表示在项目启动时就会马上启动servlet。SpringMVC中的视图解析器也是非常重要的,需要配置他的前缀和后缀如果配置错误少点或者斜杠那么controller返回的视图名之后,通过视图解析器自动解析合成前缀和后缀就会报错访问不到对应的页面。

2.1.3 MyBatis简介

Mybatis是一个持久层框架,既可以长期存储在数据库中,有持久化的原因是内存具有断电易失性。我们需要mybatis,说白了就是为了后端开发人员将数据存储到数据库中。Mybatis几乎避免了所有的JDBC代码和手动设置单数以及获取结果集的过程,mybatis可以使用注解或者以xml文件的形式进行配置和原始映射,所有的事情,不用Mybatis依旧可以做到,只是用了它,所有实现会更加简单!使用Mybatis时对于现在的认知范围中认为最重要的就是构建会话工厂SqlSessionFactory和创建会话对象SqlSession。

2.1.4 整合分析

其实spring、springMVC、mybatis的整合只涉及到spring和mybatis的整合以及springMVC与mybatis的整合,因为springMVC他是属于spring,可以说spring和springMVC是无缝衔接的,springMVC属于spring的子模块。一个完整的项目首先就是要搭建数据库,因为ssm是一个框架那么第一步他们整合就会需要相应的jar包-->在WebContent目录下创建index.jsp页面-->在src目录下创建命为com.jf3q的包并创建utils、po、mapper、service、controller并在包下创建对应的类和接口以及xml文件-->在WEB-INF目录下创建web.xml文件配置实例化容器、servelt以及过滤器-->最后bus发布到Tomcat服务器就可以在本地通过地址进行访问。

2.3 JSP概念

JSP全称Java Server Pages (Java服务器页面),其根本是一个Servlet设计,JSP是以文件的形式存在,通常JSP包括三部分:HTML代码,Java代码和JSP tag。HTML也就是我们的页面美工布局,但是我们一般不在JSP页面中糅杂这个java代码 ,最后这个JSTL其实就是JSP这个标准标签库的一个缩写,通常来讲JSTL他包含五部分:首先一个是核心标签,第二个是格式化标签,第三个SQL标签,第四个XML标签,最后一个JSTL的一些拓展函数,标签其实就为了解决特定的一些问题而产生的一种模板引擎。正是由于JSP的横空出世致使当时的网页从静态走向了动态这样一个非常大的跨越。

2.4 MySQL数据库

MySQL数据库是一个关系型数据库具有参照完整性和一致性[5],通过Mysql数据库可以有效的过滤出复杂海量的数据,从而得到有用和针对性的信息。在安装好Mysql后,要对其进行配置,然后在DOS窗口连接数据库。数据库顾名思义是数据的仓库。数据库在安装成功后会自带对象信息、服务器性能参数和用户权限信息。在Mysql中,我们用SQL语言实现对数据信息的增删改查。在Mysql数据库中,事务是最小的单元,包含了一组数据库操作命令,他们同时完成或者同时消失。在实际工作中,不同身份的用户对数据库内的信息关注不同,或者在使用时重复使用某些数据,这时候便可以使用视图。视图通常来自一个或者多个表的子集。在详细设计阶段,需要将数据库的设计规范化,需要遵循第一范式,即数据的不可分割性,第二范式,需要有主键约束,每列都依赖于主键,第三范式,如果与主键间接相关,则需要拆分数据表。Mysql中使用索引最主要的就是加快查询提高查询效率,当数据过多时如果一条一条找显然影响了查询效率,索引在MySQL中也叫做键,当表中的数据量逐渐增大时,引用索引对性能的优化显著提高了,对于本公交车查询系统当站点数目逐渐增多时显然利用索引可以提高我们系统的新能。

2.5本章小结

本章主要介绍了开发本系统使用的相关技术以及框架。使用了B/S架构、SSM框架以及JSP和MySQL的简单介绍。

3 需求分析

3.1 需求描述

在我国的一线城市中,公交网络错综复杂,我国城市化的进程不断优化,完善科学合理的公共交通查询系统可以给公众出行带来极大的便利,城区不断延伸,公交线路也在不断升级的过程中。然而,公交车的数量、线路和站点数目的增多,虽然乘坐时间可能变短,但是对于出行选择合适的出行方案也成为了人们的困扰,在这种情况下,公交车查询系统显的非常方便和高效,所以在这个需求西下很有必要设计一个专门针对公交车的查询系统,方便乘客在出行前提前查看公交车的线路信息以便合理安排时间,这样极大的提高了乘客出行体验以及生活效率的改善。

公交车查询系统主要需求是通过站点、车次以及起点到终点的查询,并且根据用户的查询得出相应的查询结果,并在页面上显示对应的信息。

3.2 可行性分析

3.2.1 已具备条件

综合所需要的开发环境,以及现阶段本人所具备的理论知识以及网上查询相关的资料、观看技术视频和图书馆资源等条件。

3.2.2 可行性分析

(1)技术可行性:基于Java的公交车查询系统的设计与实现用户可以使用电脑、手机等平台通过有线网络或者使无线网络连接访问该系统。前端主要采用了JSP,Html+css,后端主要使用了Java语言以及SSM框架(Spring + SpringMVC+Mybatis)作为本系统后端开发的主要框架,Mybatis提供了各种常用的数据库应用程序。采用MySQL数据库,通过较少的代码编写,就能够实现对底层数据库的访问。服务器采用Tomact 8.5.31。在指导老师的指导下,以及朋友的帮助和学习指导下,并且阅读参考大量的参考文献,基本可以解决在开发过程中遇到的技术性困难。所以这项技术是可行的。

(2)经济可行性:公交车查询系统作为本科毕业设计,本系统的设计与实现只需一台电脑,在电脑上安装idea开发工具以及浏览器,对于开发与设计公交车查询系统相对而言不需要任何花费开销,在经济上是完全可行的可以接受。本系统实施后可以为用户提供方便快捷的公交车查询方式,因此在经济方面完全没为题是可行的。

(3)操作可行性:界面简单明了,对用户来说可以直接上手使用。公交车查询系统由于采用B/S架构只要用户在浏览器输入本系统的网址链接就可以进行查询。

3.3功能需求分析

3.3.1站点信息

可以选择站点进行查询,首先选择要查询的站点-->点击查询,就可以查询到经过该站点的车次,也可以看到站点在地图上的信息。

3.3.2公交车次

(1)线路名称:该功能可以根据线路名称,也就是几路车进行模糊查询(比如查询3路那么主要该车次带有3那么就会被查询到)。

(2)起点查询:选择某一个车次的起点站,就可以查询到以该起点站为起点的车次的相关信息。还可以查看到该车次途径那些站点,并且该路线会在地图上显示。

(3)终点查询:选择某一个车次的终点站,就可以查询到以该终点站为起点的车次的相关信息(同上)。

(4)起点到终点的查询:同时输入起点和终点就可以查询到以该起点为起点,以该终点为终点的相关车次的相关信息(同上)。

3.3.3出行方案

出行方案的查询,只有同时选择出发地站点和目的地站点才可以进行查询。当同时选择出发地站点和目的地站点时,就会查询到对应的直达方案或换乘方案列表,并会提示在哪一个站点进行中转以及会看到相关的车次信息,如果只输入出发地站点或者目的地站点,则不会查询到任何车次信息,并且提示暂无方案或者换乘太多车次。

3.3.4 用户模块

(1)用户注册:主要是注册用户名和登陆时的密码,还包括其他相关的个人信息。

(2)用户登录:在用户注册之后可以根据注册时的用户名和密码登录该系统。

(3)留言信息:可以提出任何您觉得有关公交站点,车次路线不合理或者使令你不满意的地方,并留下您的建议和邮箱点击提交,会提示您已经提交留言,以便后台管理员可以看到您留下的宝贵建议,使用邮箱给您反馈您所提出的的建议。当然其他相关建议也可以提出不仅限于此。

用户具体用例图如图3-1:

图3-1 普通用户用例图

3.3.5 新闻公告

可以根据标题和发布日期查询到发布的相关新闻公告信息。

3.3.6 管理员模块

(1)用户信息管理

可以通过用户名、姓名、手机号等查询用户注册时的相关个人信息以及注册时间,并且可以删除其中某一个用户。

站点信息管理

添加站点信息:根据经度和纬度添加具体站点信息。

站点信息管理:对站点进行查询、修改和删除。

公交车次管理

添加公交车次:根据站点和规划好的路线添加站点和相关车次的信息。

公交车次管理:对线路进行查询,修改和删除、

新闻公告管理

添加新闻公告:添加要发布的新闻公告信息。

新闻公告管理:可以查询,修改和删除新闻公告

用户留言管理:查询和删除留言信息。

系统管理:对管理员密码进行修改。

管理员具体用例图如图3-1

图3-2 管理员用例图

3.4 本章小结

在本章节中对本系统的描述了为什么要设计与实现公交车查询系统。然后进行了可行性分析,运用了基于Java语言和SSM框架以及前端的相关技术基本完全可以设计与实现公交车查询系统。最后,在相关技术的支持下,对公交车查询系统进行了需求分析,进一步展开了具体的功能模块比如查询站点、车次和路线以及用户和管理员模块可以进行的相关操作。

4 系统设计

4.1 系统结构图

如图4-1,公交车查询系统的设计包括查询、用户以及管理员三个模块,各个模块之间具有明确的分工,并且职责明确。

(1)查询模块:主要是方便用户进行查询,主要有线路站点、根据起点和终点的查询还有换乘方案的呈现。管理员也可以在后台进行查询修改和删除。

(2)用户模块:主要包括用户的注册、登录和用户的建议,以便针对用户提出的建议和意见是否合理对本系统进行相应的调整和改进。

(3)管理员模块:涵盖了对查询和删除用户、对站点和线路信息进行增删改查、发布新闻公告、查看用户提出的建议以及修改密码。

图4-1 系统结构图

4.2 系统模块流程图

4.2.1查询模块流程图

该模块主要接收用户输入的信息并反馈给用户查询结果,如图4-2;

图4-2 查询流程图

在用户选择好站点时,本系统就会根据该站点的id查询所有经过该站点的车次相关信息,并且可以查看车次的途径站点。

在用户输入线路名称时,该系统会进行模糊查询,显示出所有的与之匹配的车次的相关信息,并且可以查看车次的途径站点。

在用户输入出发地和目的地时,该系统会根据两点之间线路查询出所有的换乘方案或者直达方案。

4.2.2用户模块流程图

(1)用户登录注册

图4-3 登录注册流程图

用户留言信息

游客不能对该系统留言反馈,只有注册登录之后的用户在可以留言反馈提出建议。

图4-4 用户反馈流程图

4.2.3管理员模块

(1)管理员管理站点车次:管理员登录之后可以根据实际需求添加站点车次和线路信息,并且对站点车次共和线路进行增删改查;具体来说就是:假若有新的站点车次和线路要添加到系统,那么管理员可以根据实际需求进行添加,添加完之后用户和游客就可以查看相关信息;假若某一俩车次站点和线路需要变更,那么管理员就可以删除或者修改相应的车次站点和线路,那么用户就查询不到管理员删除之后的相关车次站点和线路的相关信息;假若有车次站点和线路需要变更,那么管理员更新为最新修改的数据之后,用户和游客也可以查询相关车次站点和线路的相关信息。

图4-5 管理站点车次流程图

4.3数据库设计

4.3.1 概要设计

本系统进行数据库概念设计采用的是E-R关系图,依据具体的需求抽象出数据模型,并进行逻辑结构设计将E-R图转化为对应的表,进而确定了数据库的字段定义和具体的表。如图4-5、4-6、4-7、4-8、4-9所示,主要有所有公交车次实体、站点实体、留言实体、普通用户实体、系统用户实体、留言实体以及新闻公告实体模型。

公交车次实体包含公交编号、公交名称、首班车时间、末班车时间,所属公司以及票价;站点实体包含站点编号和站点名称;公交线路实体包含起点站和终点站;系统用户实体包含了用户名和密码;普通用户实体包含了手机号、用户名、密码、身份证等;留言实体包含了留言编号、留言内容、电子邮件以及用户;新闻公告实体包含了新闻编号、新闻标题、新闻内容以及发布时间。

图4-5 公交车次模型

图4-6 详细路线模型

图4-7 系统用户和普通用户模型

图4-8 留言模型

图4-9 新闻公告模型

4.3.2 所有线路表

本系统使用MySQL5.5,在MySQL5.5中创建的数据库名为bus_db,并且根据需求在bus_db中创建了7张数据库表分别为:admin(管理员)、t_busline(公交车次),t_busstation(公交站点)、t_guestbook(留言信息)、t_newsinfo(新闻公告)、t_station_line(关联站点和车次)、t_ueerinfo(用户信息)。具体数据库表如下:

管理员表admin,如表4-1所示:

字段名

数据类型

长度

允许空

username

varcher

50

NOT NULL

password

varcher

50

NOT NULL

Username:管理员名

Password:密码

公交车次表t_busline,如表4-2所示:

字段名

数据类型

长度

允许空

lineId

int

4

NOT NULL

Name

varcher

50

NOT NULL

StartTime

Datetime

8

NOT NULL

EndTime

Datetime

8

NOT NULL

Company

Datetime

8

NOT NULL

Ticket

int

4

NOT NULL

lineId:车次编号

Name:名称

StartTime:发车时间

EndTime:结束时间

Company:所属公司

Ticket:票价

公交站点表t_busstation,如表4-3所示:

字段名

数据类型

长度

允许空

StationId

int

4

NOT NULL

StationName

varcher

50

NOT NULL

StationId:站点编号

StationName:站点名称

留言表t_guestbook,如表4-4所示:

字段名

数据类型

长度

允许空

guestBookId

int

4

NOT NULL

userName

varcher

50

NOT NULL

content

varcher

50

NOT NULL

email

varcher

50

NOT NULL

addTime

datetime

8

NOT NULL

guestBookId:留言编号

userName:用户名

Content:内容

Email:电子邮件

addTime:发布时间

新闻公告表t_newsinfo,如表4-5所示:

字段名

数据类型

长度

允许空

newsId

int

4

NOT NULL

newsTitle

varcher

50

NOT NULL

newsContent

varcher

50

NOT NULL

newsTime

datetime

8

NOT NULL

newsId:新闻编号

newsTitle:新闻标题

newsContent:新闻内容

newsTime:发布时间

公交线路表t_station_line,如表4-6所示:

字段名

数据类型

长度

允许空

Sl_id

int

4

NOT NULL

Sl_station_id

varcher

50

NOT NULL

Sl_lineid

varcher

50

NOT NULL

Sl_id:线路编号

Sl_station_id:站点编号

Sl_lineid:车次编号

公交线路表t_userinfo,如表4-7所示:

字段名

数据类型

长度

允许空

User_name

varcher

50

NOT NULL

password

varcher

50

NOT NULL

realName

varcher

50

NOT NULL

cardNumber

varcher

50

NOT NULL

phone

int

4

NOT NULL

Creat_time

datetime

8

NOT NULL

login_time

datetime

8

NOT NULL

User_name:用户名

Password;密码

realName:真实姓名

cardNumber:身份证号

Phone:手机号码

Creat_time:注册时间

login_time:最近登陆时间

4.4 本章小结

本章主要介绍了该系统的主要功能。并且进行了概要设计和详细设计说明并画出E-R实体图。除此之外,还针对数据库的设计工作做出了详细说明列出了具体的7张表,由此也为该系统的下一步研发设计以实现的工作奠定了数据以及技术方面的支持。

5 系统实现

此部分系统实现是整个软件项目的重要部分,在系统实现过程中页面布局要合理美观、简介并且对用户来说操作友好。

5.1系统功能简介

公交车查询系统从功能上大体分为:查询模块,管理员模块和用户模块

站点车次和线路查询:用户或者游客可以根据站点名称、车次、起点和终点进行线路的查询,并且可以根据站点查询了解到哪辆车经过该站点。该系统还提供了换乘方案,乘客可以根据自己的意愿选择合适的乘车方案,使乘客能够合理的乘坐公交车,提高乘客的出行体验感。

管理员系统登陆界面:管理员输入正确的用户名和密码才会登录跳转到后台管理界面,否则会提示用户名或密码错误,如果数据库中不存在该管理员则会提示,用户不存在。

管理员后台操作:管理员在登录成功之后可以对用户信息管理,站点信息管理,公交车次管理,新闻公告管理,用户留言管理以及系统管理。此部分前面已详细赘述,在此不在介绍。

新闻公告模块:管理员可以编写相关的新闻标题以及新闻内容,提交之后,普通用户可以在前端页面进行查看发布的公告,并且可以根据标题快速找到具体的新闻公告信息。

用户信息模块:主要为用户的注册,个人信息的修改。用户在注册时需要提交登录所需的用户名和密码,此外还需提交其他个人信息,如果注册时该用户名已经存在那么当你输入相同的用户名时就会提示该用户名已经存在,就不必在填写其他信息,这样设计合理极大方便用户注册。用户留言模块主要是用户在登录之后对本系统以及其他相关的建议,方便管理员知道本系统或者其他不合理的地方,并作出及时的措施与改进。

5.2 功能模块实现

5.2.1 管理员登陆实现

本系统设有管理员角色是非常有必要的,如果说某一个站点或者线路已经变更,假若没有管理员去更新此系统的变更信息,那么就会极大的浪费用户的时间以及用户的出行体验感,不仅如此本系统也将很少会有人去使用,那么设计和实现本系统就没有什么意义。管理员登录后台需要输入登录账号和登陆密码,并且当鼠标放在登陆账号的输入框时会提示请输入管理员账号,当鼠标放在登陆密码的输入框时会提示请输入管理员密码,只有当都用户名和密码都输入正确之后点击登录,管理员才可以进入后台管理界面,对用户、站点、车次和线路进行操作。

管理员登录界面

核心代码:

@Service
public class AdminService {
@Resource AdminMapper adminMapper;
private String errMessage;
public String getErrMessage() { return this.errMessage; }
/*验证用户登录*/
public boolean checkLogin(Admin admin) throws Exception {
Admin db_admin = (Admin) adminMapper.findAdminByUserName(admin.getUsername());
if(db_admin == null) {
this.errMessage = " 账号不存在 ";
System.out.print(this.errMessage);
return false;
} else if( !db_admin.getPassword().equals(admin.getPassword())) {
this.errMessage = " 密码不正确! ";
System.out.print(this.errMessage);
return false;
}
return true;
}

管理员登陆界面展示,如图5-1所示。

图5-1 管理员登录

(2)管理员登录之后主要界面,如图5-2:

图5-2 后台管理界面

后台用户信息管理界面,如图5-3所示:

图5-3 后台用户信息管理

后台站点信息管理中的添加站点信息界面,如图5-4所示:

图5-4 后台添加站点信息

后台站点信息管理中的添加站点信息界面,如图5-5所示:

图5-5 后台站点信息管理界面

后台公交车次管理中的添加公交车次界面,如图5-6所示:

图5-6 后台添加公交车次界面

后台公交车次管理中的公交车次管理界面,如图5-7所示:

图5-7 后台公交车次管理界面

后台新闻公告管理中的添加新闻信息界面,如图5-8所示:

图5-8 后台添加新闻信息界面

后台新闻公告管理中的新闻公告管理界面,如图5-9所示:

图5-9 后台新闻公告管理界面

后台用户留言管理中的用户留言管理界面,如图5-10所示:

图5-6 后台用户留言管理界面

后台系统管理中的修改密码界面,如图5-10所示:

图5-11 后台修改面膜界面

5.2.2公交站点查询

根据公交站点查询,首先需要选择站点,以河北科技大学(西门)为例:

当选择站点之后点击查询,站点查询根据t_busstation表中的字段stationName进行查询,查询出所有经过该站点的所有线路车次信息,

核心代码:

/*前台查询BusStation信息*/

@RequestMapping(value="/{stationId}/frontshow",method=RequestMethod.GET)
public String frontshow(@PathVariable Integer stationId,Model model,HttpServletRequest request) throws Exception {

/*根据主键stationId获取BusStation对象*/

BusStation busStation = busStationService.getBusStation(stationId);

request.setAttribute("busStation", busStation);

return "BusStation/busStation_frontshow";}

界面展示,如图5-12 所示:

图5-12 站点查询

5.2.3公交车次查询

根据公交车次查询用户可以输入线路名称也就是几路车,但是由于线路名称可能会有重复的数字,列如查询9路车。车次查询根据t_busline表中的name字段进行模糊查询,那么就会模糊查询出与输入的线路名称相同的所有线路信息。根据查出来的线路信息,用户就可以再进行精确查询根据自己的实际需求。

核心代码:

/*前台按照查询条件分页查询公交车次信息*/

@RequestMapping(value = { "/frontlist" }, method = {RequestMethod.GET,RequestMethod.POST})

public String frontlist(String name,@ModelAttribute("startStation") BusStation startStation,@ModelAttribute("endStation") BusStation endStation,String company,Integer currentPage, Model model, HttpServletRequest request) throws Exception {

if (currentPage==null || currentPage == 0) currentPage = 1;

if (name == null) name = "";

if (company == null) company = "";

List<BusLine> busLineList = busLineService.queryBusLine(name, startStation, endStation, company, currentPage);

/*计算总的页数和总的记录数*/

busLineService.queryTotalPageAndRecordNumber(name, startStation, endStation, company);

int totalPage = busLineService.getTotalPage();

int recordNumber = busLineService.getRecordNumber();

request.setAttribute("busLineList", busLineList);

request.setAttribute("totalPage", totalPage);

request.setAttribute("recordNumber", recordNumber);

request.setAttribute("currentPage", currentPage);

request.setAttribute("name", name);

request.setAttribute("startStation", startStation);

request.setAttribute("endStation", endStation);

request.setAttribute("company", company);

List<BusStation> busStationList = busStationService.queryAllBusStation();

request.setAttribute("busStationList", busStationList);

return "BusLine/busLine_frontquery_result"; }

公交车次查询界面展示,如图5-13所示 :当用户输入线路名称9时,就会模糊查询出本系统中所有线路名称带有9的车次信息。

图5-13 线路名称查询

5.2.4公交起点终点查询

(1)起点到终点的查询,用户既可以根据某一车次的起点进行查询,也可以根据终点进行查询,最后还可以根据起点到终点进行查询,但是需要注意当同时输入起点和终点时,该起点和终点必须是某一车次的起点和终点,不能是中途的站点否则将查不出任何结果。如图5-14、5-15所示:

核心代码:

/*按照查询条件分页查询公交车次记录*/

public ArrayList<BusLine> queryBusLine(String name,BusStation startStation,BusStation endStation,String company,int currentPage) throws Exception {

String where = "where 1=1";

if(!name.equals("")) where = where + " and t_busLine.name like '%" + name + "%'";

if(null != startStation && startStation.getStationId()!= null && startStation.getStationId()!= 0) where += " and t_busLine.startStation=" + startStation.getStationId();

if(null != endStation && endStation.getStationId()!= null && endStation.getStationId()!= 0) where += " and t_busLine.endStation=" + endStation.getStationId();

if(!company.equals("")) where = where + " and t_busLine.company like '%" + company + "%'";

int startIndex = (currentPage-1) * this.rows;
return busLineMapper.queryBusLine(where, startIndex, this.rows);}

大众驾校为3路车的起点,解放广场为终点,河北科技大学(西门)为3路车的中途站,那么也就是说只有选择起点是大众驾校,终点是解放广场才可以查出该车次的线路名称。界面展示如图5-14所示:

图5-14 起点到终点查询

再比如:当起点为大众驾校而终点是该线路的某一个中途站点,则就不会查询出具体的车次的信息。界面展示如图5-15所示:

图5-15 起点到中途查询

用户还可以根据所属公司模糊查询(概念在5.2.3 公交车次查询 已经详细说明,在此不再赘述)具体的车次信息如图5-16、5-17所示:

当所属公司输入石家庄时,就会查询到所有带有石家庄字样的车次信息,界面展示,如图5-6所示:

图5-16 所属公司模糊查询

当所属公司输入全称石家庄市公交四公司时,就会查询到所有属于石家庄市公交四公司的车次信息,界面展示如图5-17所示:

图5-17 所属公司查询

5.2.5出行方案查询

出行方案的查询在本系统的设计与实现中属于重难点。出行方案也可以理解为换乘方案和直达方案。

思路:

直达的最简单,出发站的车次和到达站的车次正好相等的,那么该车次就是直达方案,可能是多个车次,所以是一个list。如图5-18:

图5-18 直达方案

一次换乘的方案,主要是先找交点,也就是中转站。中转站也是有可能是多个的,也是个list。找到交点后,用求直达方案的方式得到车次信息(查两次,起点到中转站和中转站到终点站)。如图5-19所示,红色交点属于中转站,图示有几个交点就有几种一次换乘方案。

图5-19 一次换乘方案

主要代码分析:假设三个表:

站点表t_busstation

路线表t_busline

路线站点表t_station_line。

(1)直达线路

首先根据两个站点名获取两个站点各自的id,这里定义为startStationId,endStationId。然后查询:

select A.sl_line_id from

(select sl_line_id from t_station_line where sl_station_id = #{startStationId}) A,//查出所有经过开始站点的id

(select sl_line_id from t_station_line where sl_station_id = #{endStationId}) B//查出所有经过目的站点的id

//经过开始站点的线路id=经过目的地站点的线路id,说明他是一条直线

where A.sl_line_id = B.sl_line_id

(2)一次换乘

首先根据两个站点名获取两个站点各自的id,这里定义startStationId,endStationId,找到起点和终点的id之后,把经过开始站点的线路所含的站点全查出并去重,把经过目的地站点的线路所含的站点全查出并去重,经过开始站点的线路所含的站点=经过目的地站点的时候说明就是中转站。

select A.sl_station_id from

//把经过开始站点的线路所含的站点全查出并去重

(select distinct sl_station_id from t_station_line where sl_line_id in

(select sl_line_id from t_station_line where sl_station_id = #{startStationId}))A,//这个不就是上面的把所有经过开始站的线路id查出来

//把经过目的地站点的线路所含的站点全查出并去重

(select distinct sl_station_id from t_station_line where sl_line_id in

(select sl_line_id from t_station_line where sl_station_id = #{endStationId}))B//把所有经过目的地的线路id查出来

//经过开始站点的线路所含的站点=经过目的地站点的时候说明就是中转站

where A.sl_station_id= B.sl_station_id

这样查询的换乘站可能的结果有多个或零个后,之后就会根据在数据库中的查询结果将一次换乘方案返回到页面呈现给用户。

(3)以石家庄部分路线为例

查询河北科技大学(西门)到北站的界面,如图5-20所示:可以看到从河北科技大学(西门)到北站有三个中转站(红色字体),可看到都是3路转20路,也就是说3路和20路有三个相同的站点,站点对应数据库表t_station_line中的sl_station_id字段。

图5-20 一次换乘方案查询

查询河北科技大学(西门)到解放广场的界面,如图5-21所示:可以看到从河北科技大学(西门)到解放广场只有一种直达方案。

图5-21直达方案查询

查询河北科技大学(西门)到建设仓丰路口的界面,如图5-22所示:可以看到河北科技大学(西门)到建设仓丰路口有两种直达方案(这次界面展示说明只是与5-21做对比)。

图5-22直达方案模糊查询结果展示

5.2.3 用户登录注册

(1)用户注册

注册功能是通过表单action方式,再通过mappe层进行插入数据。代码如下(这里只展示sql语句):

Insertinto t_userInfo(user_name,password,realName,cardNumber,phone,create_time,login_time) values
(#{user_name},#{password},#{realName},#{cardNumber},#{phone},#{create_time},#{login_time})

注册界面:

图5-23 注册窗口

用户登录

前端用户登录功能时间用户名和密码通过ajax请求方式,再通过三层架构通过mapper层进行查询是否有匹配的用户,若有则登陆成功。 代码如下(这里只列出sql语句):

select * from t_userInfo where t_userInfo.user_name = #{user_name}

用户登录窗口:

图5-23 登陆窗口

留言信息

前端用户登录功能时间用户名和密码通过ajax请求方式,再通过三层架构通过mapper层进行查询是否有匹配的用户,若有则登陆成功。代码如下(这里只展示sql语句):

insert into t_guestBook(userName,content,email,addTime) values
(#{userName},#{content},#{email},#{addTime})

用户留言信息窗口:

图5-23 用户留言窗口

5.3 本章小结

本章节主要是针对本系统展开的测试,根据不同的具体测试方法,实现系统的正式实现的目的,根据每个模块的每个测试结果,根据不同的需求开发不同的板块数据,最后确定系统的稳定性和可用性。

结 论

本文通过对公交车查询系统的设计与实现感触颇深,一个人只有熟练的掌握技术、知识才能在开发中游刃有余。同时,在开发初期,需要仔细寻找设计思路和常规。一个好的设计思想是开发一个好的系统的基石。在开发前经过思考和研究,采用B/S模式进行系统设计。

在本系统的设计中,科学有效地实现了对线路和站点信息、用户基本信息、公交新闻信息和系统用户反馈信息的管理。系统中的数据以存储过程的形式实现了添加、删除、修改、查看等基本功能。在web开发方面,本文主要使用了JSP以及js技术。在后端开发主要是使用java语言、SSM框架。通过这段时间对SSM的学习,让我对知识的渴望更加强烈也让我明白实践真的真的很重要,由于缺乏时间和实践,基础可能不是太扎实。对于像我这样Java基础不是很好的人来说,在模块设计中仍然有许多不完善之处,但是在自己和朋友的引导下最终完成了本次课题《基于Java的公交车查询系统的设计与实现》。

在这个过程中,我的能力也得到了相应的提高,增强了我对未来设计、开发和学习的信心。但是总体上来说,在整个系统的设计与实现的过程中我一直以谦虚、努力、积极向上的态度,基本上完成了本系统的设计与开发,经过多次运行和不断修改,最终测试运行效果良好。不过由于经验不足,我设计的前端界面比较简单,页面设计可能不太美观,系统也有一些不足之处。但是我真的已经尽力去设计,一步一步修改已经不知道有多少个版本了,对我来说此次设计开发不易,困难重重,希望大家能够多多体谅。

参 考 文 献

张紫嫣. 基于J2EE的公交查询系统的设计与实现[D].厦门大学,2018.

苏楠.基于JAVA的城市公共交通查询系统的设计与实现[J].计算机产品与流通,2018(12):159-160.

胡晓纯. 基于ASP.NET的公交查询管理系统的设计与实现[D].吉林大学,2015.

石怡.基于MySQL数据库的查询性能优化研究[J].四川职业技术学院学报,2021,31(01):164-168.

李艳杰.MySQL数据库中数据参照完整性和一致性的设计与实现[J].信息技术与信息化,2020(11):102-104.

董宇平. 基于MVC技术的公交管理系统的研究与实现[D].沈阳师范大学,2018

周继芳. 基于J2EE的公交线路查询系统的设计与实现[D].电子科技大学,2009.

魏军峰.基于B/S架构资源管理系统设计与实现[J].电脑编程技巧与维护,2018(10):67-69+90.

陈志伟.基于SSM技术的网络安全渗透测试系统的开发[J].鞍山师范学院学报,2021,23(02):57-60.

张坤河. 公交车查询系统的设计与实现[D].厦门大学,2009.

廖宾.基于JAVA开发Web应用中MVC模式分析[J].电子技术与软件工程,2020(21):49-50.

史倩玉.基于MVC模式的实时招聘系统的设计[J].信息记录材料,2021,22(03):232-234.

罗飞. 基于Java的静态公交换乘查询系统的研究[D].北京邮电大学,2015.

史洪圳. 基于JSP的公共交通管理系统设计与实现[D].吉林大学,2014.

陈威佳. 基于B/S结构的城市公交出行查询系统的研究[D].东北林业大学,2011.

致 谢

转眼间已经到了要对本科生活画上一个完美又不是很完美的句号。本科生活虽然感觉很短暂但是真的教会了我很多,也真的让我成长了很多。本论文是在 的指导下完成的,因为新冠疫情开学较晚,老师通过雨课堂的形式对我们每一个人的开题报告进行了指导,并且针对我们每个写的开题报告说出了老师他自己的看法和理解,总之受益匪浅,非常感谢李老师的耐心指导。

通过这一段时间加班加点的努力,我的毕业论文也终于到了致谢的环节,心里有种说不出的感觉,致谢对我来说也意味着我的大学生活就要结束了。在这个期间,我的思想、学习和能力有了极大的提升,这和导师、各位老师、同学、朋友还有家人的关心帮助是分不开的,是他们教会了我如何摆正自己的位置,遇到任何事情不气馁,不妥协,一个人只有保持乐观的心态才会在遇到事情时不慌不忙,秉持着大事化小,小事化了的心态问题最终会解决。感谢我的辅导员,她虽然看起来很严肃,但是接触多了才慢慢发现老师真的很可爱很有经验,老师说的一句话任然铭记在心,只有在你人生路上遇到困难挫折想要放弃的时候你应该开心,因为你在走上坡路,那么说明你离成功又近了一步,你比别人多了一次机会,这也是使我在每次遇到困难时想起的一句话,每当想起这句话我都很有动力,机会不是凭空而来,机会是自己无数次的努力创造出来的,我想通过自己的努力创造机会,一步一步走上属于自己梦想的舞台。感谢我的朋友,在我设计与实现本系统时真的教会了许多,他们告诉我做一个项目应该有的知识,推荐了视频学习,当项目出现bug自己解决不了的时候,是他们教我应该怎么做,感谢我的朋友。通过毕业设计环节,在自学的过程中,我也找到了自己以后的追求方向,毕业设计对我来说不仅仅是一个项目一篇论文,他也挖掘了我的能力,我也从中找到了学习的快乐,使自己发现自己很有潜力,是一个潜力股。也希望自己以后能够为社会做出贡献。

最后,再次感谢我的导师、各位老师、朋友和我的家人感谢所有关心帮助我的人。

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695