基于JSP SSM框架的城市公交查询系统的设计与实现

Electricity

发布日期: 2019-05-14 11:17:31 浏览量: 557
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

摘 要

公交查询系统是为了方便人们查询公交的信息,并且能够及时的做到信息更新,其主要是要做到方便人们的使用,信息的可维护性和程序的稳定性 。本系统采用了JAVA编程语言,数据库使用Mysql。计算机技术不断发展,逐渐适应用于各领域,给人们的学习工作生活带来了便利,在公交查询系统也是这样。纸质的公交指南或繁杂的网络版公交指南,都在不同程度上限制了市民出行的方便性。本论文介绍的是一个城市的公交查询系统,方便市民用最简约的方式,查询到最实用的公交信息。本论文是在此系统经过测试并且所有功能都实现的基础上完成的,主要涉及软件,数据库与网络技术等。

关键词:城市公交查询系统;数据库;JAVA;SSM

Abstract

This city buses inquiry system aims to make the resident inquire city buses information more convenient and must achieve the information not too lag, but its main idea is the system administrate user-friendly, the data processes reliability, the maintainability, as well as procedure toughness. The system uses the JAVA programming language and MYSQL as database. Along with computer technology’s unceasing development, the computer applies in each big domain, and has brought the enormous convenience to people’s life, the city buses referral system is also. The departed paper city buses guide or the numerous and diverse online edition city buses guide, has limited the conveniences which in the different procedure when a resident goes on a journey. This thesis introduces a city buses referral system, by facilitates the resident with the briefest way and inquires the most useful city buses information. This thesis that is based on the system has been tested and functions all come true mainly involves software, database and networking and so on.

Key words: City Buses inquiry system; Databases; JAVA; SSM

1 概述

1.1 项目开发背景和现状的研究

1.1.1 开发背景

随着城市建设的飞速发展,生活节奏的加快,公交系统对城市来说越来越重要。而政府在这方面的投入也是加大了力度,城市中的公交系统也是日益完善,公交系统的不断更新,却又导致了市民无法从原来的公交指南上看到现如今的信息,从而产生了很多不必要的麻烦。所以需要提供一个高效的公交查询系统,才是问题的根本所在。

现在,随着计算机技术和通信技术的发展,与网络相结合是现如今的重要发展方向,特别是在网络普及,上网极为方便的网络信息时代,通过上网来查询公交信息是公交查询系统的发展方向。

1.1.2 研究现状

公交查询系统是为了方便人们查询公交的一些信息,并且能够做到信息的及时更新,主要是要方便人们的使用,信息的可维护性和程序的稳定性 。本系统采用JAVA,数据库使用的是Mysql。计算机技术的不断发展,逐渐适应用于各领域,给人们的学习工作生活带来了便利,在公交查询系统也是这样。纸质的公交指南或繁杂的网络版公交指南,都在不同程度上限制了市民出行的方便性。本论文介绍的是一个城市的公交查询系统,方便市民用最简约的方式,查询到最实用的公交信息。

1.2 项目开发目的与意义

1.2.1 系统开发的目标

本系统是基于J2EE的公交查询系统,其中包括了公交查询系统的基本功能,并提供了用户留言的功能,方便根据用户提供的留言信息或是提出的建议对系统进行修改和完善,并提供了管理员用户后台维护公交信息的功能,做到能够实时添加和删除公交车次站点。除主要功能以外本系统还附带发布寻物启示与失物招领模块,方便用户。 本系统目标是方便市民进行公交信息查询,并且要做到信息不滞后,其主要思想是做到系统管理的人性化,数据处理的可靠性,可维护性,以及程序的健壮性[2]。系统提供了用户留言的功能,根据用户提供的留言信息或提出的建议提高公交公司的服务质量。基于J2EE的城市公交查询系统,它采用B/S模式。该系统不仅可以用于公交公司管理系统中,也可以单独作为公交管理系统的一个模块存在,并可以制作成城市公交信息系统查询网,放置于城市的主要场所[3]。这样不仅可以体现出一个城市的智能公交系统的水平,更显示出城市的数字化,信息化水平。

1.2.2 系统开发的意义

Internet 是城市公交信息查询系统得以实现的基础。在当今社会,网络大为普及,上网极为方便,通过网络查询公交信息更是城市公交信息查询系统的发展方向,与网络相结合是大势所趋[4]。城市公交信息查询系统旨在应用现代的信息网络化为广大乘客提供一种方便快捷的乘车线路服务,让网络惠及更多的人。提高市民的出行效率,促进社会的和谐。

本论文主要涉及软件,数据库与网络技术等。涵盖知识面广,可有效地提高学生综合运用所学知识分析解决问题的能力,增强学生对事物的理解与掌握能力,培养学生掌握科学的研究方法,正确的设计思想,独立思考,勇于进取,探索创新,为今后进一步学习与工作奠定了良好的基础。

1.3 本论文研究的主要内容

本论文采用软件工程思想来进行城市公交信息查询系统的设计与实现。

首先,介绍当前形势下大多数城市公交路线查询系统存在的诸多问题。在此基础上提出本系统的现实意义以及必要性。对城市公交信息查询系统进行了可行性分析,确定了本系统的功能、性能、界面等。

其次,对城市公交信息查询系统进行模块分解,确定软件结构,模块功能和模块间的接口,以及数据库的设计。及根据需求分析中提出的思路来设计系统,对各个模块的设计进行了描述。然后给出了城市公交信息查询系统的整体结构图以及各个模块的实现流程图以及数据库设计时需要的表结构。

再次,对本系统进行详细设计,在此基础上对各个模块的实现进行了介绍,给出了本系统的效果图,并且对重要功能给出了主要代码。

最后,对系统进行了测试及分析。本文对软件测试的概念和方法进行了概要说明,并对系统的设计和实现进行了总结,提出了对城市公交信息查询系统的展望和具体的改进建议。

2 需求分析

2.1 需求分析

2.1.1 系统需求

由于本系统面向广大市民和公交公司管理本系统等非计算机专业人士的需求,因此要求硬件配置不能太高,任何一个普通的计算机用户都能很快的熟悉整个软件的使用。本系统要做到所耗费的资源常小,任何用户只需要在一般的电脑上面,就能够通过浏览器使用这个软件。公交公司管理人员能够简单、方便、快捷、远程的实现对系统实时维护和管理。

2.1.2 技术需求

本系统是以互联网为基础,采用SSM框架MySQL数据库开发模式,服务器采用Tomcat 6.0。服务器由数据库服务器、Web服务器等服务器组成,通过客户端网络连接进行系统的管理和维护,数据库服务器中的数据要实现实时更新,数据库要可靠稳定。

2.1.3 安全需求

本系统面向社会,因此对系统的安全性有较高的要求。对数据库要设置不同的用户权限,数据的操作需要用户身份验证,只有取得合法的身份才能进行操作,还应避免数据并发现象,防止数据库无法响应操作。

2.2 系统可行性分析

2.2.1 技术可行性

现在,随着计算机技术和通信技术的发展,与网络相结合是以后的重要发展方向,特别是在网络大为普及,上网极为方便的网络信息时代,通过网络查询公交信息更是公交查询系统的发展方向。特别是在网络大为普及,上网极为方便的网络信息时代,通过网络查询公交信息更是查询系统的发展方向。基于Web的新型公交信息查询系统,数据信息更新更为准确、及时,用户可以利用计算机、手机等平台通过有限或无线的网络连接方式对系统进行访问,得到快捷的服务[5]。SSM(Spring + Springmvc +Mybatis)框架中Mybatis提供了多种常用的数据库应用程序,通过少量代码的编写,就能够实现数据库的访问[6]。系统采用MYSQL作为开发数据库。MYSQL是一种客户机/服务器结构的关系数据库管理系统[7]。在技术难度方面,有指导老师的指导、周围同学的热心帮助,加上对很多相关文献的参考,能够解决开发过程中所遇到的困难。因此,技术是可行的。

2.2.2 经济可行性

如今,随着计算机的大量普及,各种软件的开发成本越来越低,价格也越来越底。本系统也是这样,开发成本较低,只是需要一台配置一般的计算机,该系统运行时占计算机的资源也不多,但并不会因为开发成本低而造成系统功能性能的下降。相反,随着计算机技术的发展,各种实用软件的性能日渐提高。任务管理系统廉价的开发成本,却能够为用户带来相当大的实惠和方便。主要表现在:

  • 本系统可以说是一个拥有多种实用功能的系统,它集成了多种功能,具有较强的实用性和方便性

  • 本系统的运行可以大大提高查询信息的效率,减少不必要的人力和物力

2.3 功能分析

要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。公交查询系统的应用背景为:方便市民搭乘公交车出行;手动(目前)、自动(将来)、及时更新查询数据。

2.3.1 查询功能分析

系统需要提供几种不同方式的查询手段,以实现灵活方便地管理整个系统。其中包括:

  • 线路查询:可以获得要查询公交所通过的所有站点

  • 站点查询:通过输入指定站点查询经过该站点的公交车

  • 公交换乘模块:主要体现那些不可直达需要转车的线路的所有换发

2.3.2 数据的更新以及修改分析

  • 更新:系统允许管理员级别的用户对数据进行更新、修改并且存盘操作

  • 编辑:系统允许管理员级别的用户对数据进行编辑、删除的操作,保证数据的真实性与实时性

系统采用采用B/S(Browser/Server)结构。整个系统最关键的就是数据库系统,一个强大的数据库可以支持完善一个优秀的软件设计,通过软件系统与数据库系统的连接来实现通过软件界面观察和处理操作数据[8]。通过软件系统与数据库系统的连接来实现通过软件界面观察和处理操作数据,如图2-1所示。

系统采用三层结构,在客户端用户通过浏览器完成数据下载与模拟操作,浏览器端的表现逻辑通过JAVA网页完成[9]。而系统内部复杂的业务逻辑主要通过JavaBean的组件(Component)实现,JavaBean组件在WWW服务器上运行,通过JAVA返回到客户浏览器。通过表现逻辑与业务逻辑的分离,使网页内容简洁,系统的可维护性和可扩充性增强。在服务器端,系统使用JDBC中间件访问数据库,数据库服务器定义了本系统所需要的事务逻辑和数据逻辑。本系统使用JAVA技术作为表现手段,服务器采用Tomcat6.0作为JAVA引擎,系统业务逻辑由JavaBean 组件完成,使用JDBC 3.0 驱动程序访问数据库[10]。由于系统测试需要成熟的数据库支持,因此系统采用MySQL数据库作为数据库服务器。

3 系统关键技术

3.1 JAVA技术

JAVA是由Sun微系统公司于1999年6月推出的一项技术,是基于JavaServlet以及整个Java体系的Web开发技术,利用这一技术可以建立先进、安全和跨平台的动态网页技术[11]。JAVA技术在多个方面加速了动态Web页面的开发。

与微软公司的ASP技术相比,JAVA具有如下优点:

  • 开放的技术:JAVA技术基于平台和服务器的相互独立,技术支持来自广泛的、专门的、各种工具包,有服务器的组件和数据库产品开发商提供。相比之下,JAVA技术主要依赖MICROSOFT支持

  • 平台和服务器的独立性:JAVA编写的代码可运行在任何符合JAVA语法结构的环境中。这样JAVA就能够运行在多种WEB服务器上并支持来自多家开发商提供的各种工具包

  • 开放的开发过程,开放的源码:自1995年以来,SUN用开放过程方法同国际JAVA组织合作开发和修改JAVA技术和规范

  • JAVA标记可扩充性:JAVA技术能够为开发者扩展JAVA标记,充分利用与XML兼容的标记技术强大的功能,大大减少对脚本语言的依赖

  • JAVA跨平台的可重用性:JAVA组件(EJB,JavaBean或定制的JAVA标记)都是跨平台可重用的

3.2 Java Bean技术

JAVA作为一个很好的动态网站开发语言得到了越来越广泛的应用,在各类JAVA应用程序中,JAVA + JavaBean的组合成为了一种事实上最常见的JAVA程序的标准[12]。JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。JavaBean通过Java虚拟机(Java Virtual Machine)可以得到正确的执行,具有平台无关性[13]。
一个JavaBean有三个部分组成:

属性(Property)

Bean的属性就是对象的属性,但提供了属性读取和设置的接口支持。例如一个时钟Bean可以有时区和镇铃属性,日历Bean可以有年份和月份属性。每个属性通常遵守简单的方法命名规则。这样可以很方便的找出Bean提供的属性,然后查询属性值或改变属性值,对Bean进行操作。

方法(Method)

由于Bean本身是Java对象,调用这个对象的方法是与其交互作用的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外界访问其任何实例字段(没有Public字段)。这样,方法调用的是接触Bean的唯一途径。

事件(Event)

Bean与其他软件组件交流信息的主要方式是发送和接收事件。这与对象之间通过消息通信类似。
JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从JAVA诞生后,JavaBean更多的应用在非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。利用非可视化JavaBean, 来封装事务逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如JAVA)的分离,使得系统具有更好的健壮性和灵活性。

3.3 JDBC技术

JDBC是Java的开发者——Sun的Java Soft公司制定的Java数据库连接Java Data Base Connectivity技术的简称,是为各种常用数据库提供无缝联接的技术[14]。JDBC在Web和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。简单地说,JDBC能完成下列三件事:

  • 同一个数据库建立连接

  • 向数据库发送SQL语句

  • 处理数据库返回的结果

JDBC是一种可用于执行SQL语句的Java API(Application Programming Interface,应用程序设计接口)。它由一些Java语言写的类、界面组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。

通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问MySQL,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“Write Once,Run Everywhere![15]”。

Java 具有健壮、安全、易用等特性,而且支持自动网上下载,是一种很好的与数据库线连接而使用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。

JDBC扩展了Java的能力,如使用Java和JDBC API就可以公布一个Web页,页中带有能访问远端数据库的Applet。或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windows, UNIX)在Internet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。

3.4 Springmvc技术

Springmvc虽然是在Struts1的基础上发展起来的,但它实质上是以WebWork为核心的,其次它为传统的Struts1注入了WebWork的先进设计理念,是在Struts和WebWork的技术基础上进行合并后的一种全新框架。它全新的体系结构与Struts1的体系结构差别很大,Springmvc以WebWork为核心,在Springmvc中大量使用拦截器机制来处理用户请求,采用这种设计的优势表现在:业务逻辑控制器能够与Servlet API 完全分离,避免了Struts1与Servlet API的严重耦合。

Springmvc对Struts1进行了巨大的改进,主要表现在以下几个方面:

  • 线程模型方面:Springmvc的Action是一个请求对应一个实例,而Struts1用一个Action的实例处理所有的请求,它的Action工作在单例模式,存在线程安全问题

  • Action实现方面:Struts1要求统一扩展自Action类,而Springmvc中可以是一个普通的POJO(Plain Old Java Objects)。POJO指简单的Java对象,实际就是普通Java Beans

  • Servlet依赖方面:Struts1的Action依赖于Servlet API,例如Action的execute方法的参数包括request和response对象,使得程序难以测试,而Springmvc的Action不再依赖于Servlet API,便于测试

  • 封装请求参数:在Struts1中强制使用ActionForm对象封装请求参数而在Springmvc中可以直接使用Action的属性或者选择使用JavaBean来封装要请求的参数

  • 在数据校验方面: Struts1中支持覆盖validate方法或者使用Validator框架,而在Springmvc中支持重写validate方法或者使用XWork的验证框架

  • 在Action执行控制方面:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期,而Springmvc支持通过拦截器堆栈为每一个Action创建不同的生命周期

3.5 Mybatis技术

Mybatis是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得开发人员可以随意的使用对象编程思想来操纵数据库,最具特色的是它可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任[16]。

Mybatis 核心接口有Session、SessionFactory、Transaction、Query、Criteria和Configuration等6个。通过这六个核心接口,不仅可以对持久化对象进行存取,还能够进行事物控制。以下是对这6个核心接口的介绍:

  • Session接口:该接口负责执行持久化对象的CRUD(Create Read Update Delete)操作,需要特别指出的是Session对象时非线程安全的

  • SessionFactory接口:该接口负责初始化Mybatis。它的职能是负责创建Session对象,并充当数据存储的代理。这里用到了工厂模式,需要注意的是SessionFactory 并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory 就够了,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory

  • Transaction接口:该接口负责事物相关的操作。它是可选的,开发人员可以根据自己的需要来编写自己的底层事物处理代码

  • Query和Criteria接口:Query和Criteria接口负责各种数据库查询。它们可以使用SQL语句和HQL语言两种方式,本系统采用SQL语句

3.6 JavaScript技术

JavaScript是适应动态网页制作的需要而诞生的一种脚本语言。它具有交互性,能够包含更多活跃的元素,如今已经广泛地应用于Internet网页制作[17]。JavaScript是由Netscape公司开发的一种脚本语言(Scripting Language)。在HTML基础上,使用JavaScript可以开发交互式网页。它的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更精彩的内容。

JavaScript可以嵌入到HTML文件中,它的出现增强了网页的互动性,JavaScript简化了HTML文段中的有规律重复的部分,缩短了网页加载时间。

3.7 MVC设计模式

MVC模式是目前广泛流行的设计模式,包括三类对象。它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器[18]。

3.7.1 模型(Model)

模型就是业务流程、状态的处理以及业务规则的制定,业务流程的处理过程对其它层来说就是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件。在MVC的三个部件中,模型处理的任务最多。模型的好处在于代码可以被多个视图重用,因此简化了代码。

3.7.2 试图(View)

视图代表用户交互界面,对于Web应用来说,可以概括为HTML界面。由于一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上业务流程的处理。业务流程的处理交予模型处理。

3.7.3 控制器(Controller)

控制器可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。

3.8 系统运行环境

服务器端的最低配置是由建立站点所需要的软件来决定的,在最底配置的情况下,服务器的性能往往不进人意,现在硬件性能已经相当出色,而且价格也很便宜,因此通常应给服务器端配置高性能硬件。

本系统的配置要求如下:

  • 处理器:1.5GHZ以上

  • 内存:512MB

  • 硬件空间:160GB

题目主要采用的开发环境及技术:

  • 开发环境

    • Windows XP Professional(以上版本)
    • Internet Explorer6.0(以上版本)
  • 开发工具包:JDK Version1.6

  • 脚本语言:JavaScript

  • 数据库工具:MYSQL

  • JAVA开发工具:MyEclipse8.5

4 系统总体设计

4.1 系统总体设计概述

本系统设计使用了面向对象技术和模块化技术。面向对象技术是一种软件开发和程序设计技术,其所开发的程序是面向对象程序,直接描述客观世界的对象及其相互关系。对象是封装了数据和操作的程序块。所谓封装是为这个程序块建立显示的界面,其它对象只能向这个界面发消息,不能访问内部的私有数据和操作。因此,内部的数据和实现操作的算法若有改动,对其它程序对象没有任何影响。封装使程序局部化、易修改、好维护,但许多对象有相同的功能时免不了重复,所以面向对象技术有继承的机制。此外,由于对象自己操作自己的数据,对同一消息不同的对象均以自己的方式响应使得一种消息可有多种响应方式,这就是多态性。封装、继承、多态是面向对象程序的主要特征[19]。正是这些特征使程序安全、可靠、可重用、易维护。因而面向对象技术也成为当今计算机的新兴技术。

4.2 系统功能结构图

根据上述设计思想进行分析,确定了系统的基本框架,如图4-1所示。

可以看出城市公交信息查询系统的相关功能,这为系统开发及功能模块化提供了清晰地设计思路与方向,基于系统需求分析,以下为该系统的详细功能:

登录模块

普通登陆成功后进入用户个人主界面并选择各种操作,否则会返回到登录界面重新进行登录。管理员登录成功进入管理员主界面选择相应操作。

公交系统查询模块

无需登录,进入系统首页根据自己需要进行公交查询。有包括车次查询、站点查询和查询公交换乘方案等。车次查询即为根据车次号查询车次经过的站点,该车次开收车时间,等基本信息;站点查询为经过该站点的车次信息;公交换乘方案查询即分别输入起始站点和目的站点并查询公交乘车方案。

公告管理模块

普通用户登录系统后,进入公告管理模块,用户可以提出自己的一些看法意见和对本公交系统的建议,能查看以前的留言。除此之外系统还提供事物认领模块。

用户个人信息管理模块

用户登录成功后即可进入到用户的个人主界面,在个人主界面中,用户可以查看个人详细信息,包括用户名账号,保护邮箱等信息,并可以自行修改密码等个人信息,最后注销登录返回到系统登录界面。

站点信息管理模块

管理员登录系统后进入相应管理员主界面,在管理员主界面中,可对公交站点信息进行添加和删除,实时更新公交变动信息。

车次信息管理模块

管理员登录系统后进入相应管理主界面,在管理员主界面中,可对公交车次信息进行添加和删除,实时更新公交变动信息。

4.3 系统流程图

4.3.1 系统操作流程

系统操作流程图详细阐述了该系统的整体操作流程,如图4-2所示。

用户进行登录,选择登录身份是普通用户或者管理员,如果用户名和密码正确则进入到相应的用户个人主界面,否则返回登录界面重新进行登录。在用户个人主界面,用户可以进行各自需要的操作。若用户为普通用户,则可以进行查询公交信息,留言,注销和更改个人信息等操作;用户为管理员,可添加删除公交信息。最后,用户操作完毕,即可退出本系统,整个系统操作流程到此结束。

4.3.2 数据增加流程

添加信息时,编号字段由系统自动生成,且不能修改,其他信息由用户输入,之后对数据进行合法判断, 合法则写入保存至数据库,不合法则重新输入数据。数据增加流程图如图4-3所示。

4.3.3 数据修改流程

在修改信息时,先选中一条待修改的记录,然后直接输入数据,判断合法性,合法则保存至数据库,不合法重新输入。数据修改流程图如图4-4所示。

4.3.4 数据删除流程

当用户选定一条记录时,单击删除按钮,会提示用户是否确定删除,然后删除数据库相关内容。数据删除流程图如图4-5所示。

4.4 数据流分析

管理员登录系统后,可进行车次管理、站点管理、线路管理、删除用户等操作。普通用户注册登录后,进入查询界面通过系统数据库,可进行公交信息查询、留言版留言。如图4-6所示。

4.5 业务流分析

城市公交信息查询系统工作流程为:输入首页网址进入首页界面,游客只能查询公交信息,游客可以通过注册成为普通用户。普通用户除了具备游客权限外还可以管理个人资料以及发布信息。管理员拥有最高权限,可以对系统信息增删改查,以及对普通管理员的管理,系统业务流程图如图4-7所示。

5 系统详细设计

5.1 后台数据库设计

数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求[20]。

毕业设计城市公交信息查询系统需要对大量的数据完成搜集、分析、整理、存储、交换等工作,这就需要设计一个较为强大的数据库来对这些数据进行管理。在这里本着实用、方便、安全、可靠的原则,采用MySQL作为本系统数据库的支持。本系统主要数据表有:普通用户表、管理员表、车次信息表、站点信息表、中间站点关联表、留言信息表等。

为了满足系统存储数据需要,方便进行插入,更新,统计分析等操作,数据一共设计为两个部分,第一部分为满足插入,更新,删除较多的数据存储。第二部分为满足查询和统计分析。

管理员信息表:该表主要保存管理员信息,包含管理员编号、管理员姓名、账户名、密码。

列名 数据类型 字段大小 可否为空 说明
id int 管理员编号(主键)
adminName varchar 50 管理员姓名
loginName varchar 50 账户名
passWord Varchar 50 密码

公交线路信息表:该表主要保存公交线路信息,包含线路编号、正向途经站点、反向途经站点、公交线路名称、始发时间与末班时间。

列名 数据类型 字段大小 可否为空 说明
id int 线路编号(主键)
content varchar 255 正向途径站点
content2 varchar 255 反向途径站点
name varchar 50 线路名称
title varchar 255 始末发车时间

失物信息表:该表主要保存用户发布的信息,包括启示编号、启示内容、发布时间、启示标题、启示类别。

列名 数据类型 字段大小 可否为空 说明
id int 启示编号(主键)
contents varchar 20 启示内容
inputTime varchar 255 发布时间
title varchar 255 启示标题
type int 启示类型

找回密码表:该表主要保存找回密码所需信息,包括编号、问题答案内容、问题类型。

列名 数据类型 字段大小 可否为空 说明
id int 编号(主键)
content varchar 255 答案内容
title int 问题类型

公告表:该表主要保存发布的公告信息,包括公告编号、公告内容、发布时间、公告标题。

列名 数据类型 字段大小 可否为空 说明
id int 公告编号(主键)
contents varchar 20 公告内容
inputTime varchar 255 发布时间
title varchar 255 公告标题

用户信息表:该表主要保存用户注册信息,包括编号、用户地址、用户邮箱、用户姓名、登录密码、用户名、用户电话、附加信息。

列名 数据类型 字段大小 可否为空 说明
id int 用户编号(主键)
address varchar 255 用户地址
contents varchar 255 附加信息
email varchar 50 邮箱
loginName varchar 255 用户名
passWord varchar 50 密码
userName varchar 50 用户姓名
tel varchar 20 用户电话

5.2 系统模块设计

5.2.1 注册与登录

用户注册界面,要求用户必须输入姓名、用户名、密码、联系电话以及邮箱等必填信息以及联系地址等选填信息。当信息填完后点击保存按钮完成注册工作,进入用户登录界面,点击返回按钮返回到首页,如图5-1所示。

登录界面,分为普通用户登录和管理员登录。普通用户或系统管理员在用户对应的文本框中输入用户名,在密码对应的文本框中输入密码,然后选择相应的用户类型。如果用户名和密码同时与数据库中的用户名和密码相对应,点击确定后进入系统主界面,如果输入的信息不正确,则给出提示。

用户要登录本系统需要提供用户名和密码,在这里就是要检验用户是否满足输入的要求,即检验用户名和密码文本框是否为空,若为空,则提示用户输入用户名和密码。检验用户名是否存在或密码是否正确,即是否存在用户输入的用户名,并且密码是否正确,如图5-2所示。

输出:登录成功,进入用户的系统使用资源页面,不成功则显示错误信息页面,管理界面如图5-3所示。

5.2.2 公交信息查询

用户根据自己的实际情况选择按站点查询、按线路查询也可以根据其实位置和终点位置进行查询,在相应的位置进行输入,然后提交给系统,系统会自动查找线路表所有相匹配的信息,并返回给用户要查询的公交信息,如图5-4所示。

查询公交信息数据库相关操作代码:

  1. public String zz() throws Exception {
  2. String cd = request.getParameter("textfield3").trim();
  3. String zd = request.getParameter("textfield4").trim();
  4. ArrayList al = (ArrayList) indexDao.checkCDZD(cd, zd);
  5. System.out.println("al.size=" + al.size());
  6. HttpSession session = request.getSession();
  7. if (al.size() > 0 && al != null) { //如果有直达的车辆(也就是不用转车)
  8. session.setAttribute("zzMore", al); //直达的车辆的信息
  9. session.setAttribute("zzMorecd", cd); //您输入的起点名
  10. session.setAttribute("zzMorezd", zd); //您输入的终点名
  11. return "zzone";
  12. } else {
  13. ArrayList arrMiddleAll = indexDao.checkMiddle(cd, zd);
  14. if (arrMiddleAll.size() > 0 && arrMiddleAll != null)
  15. {//查询一个中转站可以到达目的地的方法
  16. session.setAttribute("zzMoreMiddleAll", arrMiddleAll); //得到一个中转站可以到达目的地的所有信息
  17. session.setAttribute("zzMorecd", cd); //您输入的起点名
  18. session.setAttribute("zzMorezd", zd); //您输入的终点名
  19. System.out.println("=======================zztwo");
  20. return "zztwo";
  21. } else { //也就是要倒两次以上车
  22. ArrayList arrTwoMiddleAll=indexDao.checkTwoMiddle(cd,zd);
  23. if (arrTwoMiddleAll.size() > 0 && arrTwoMiddleAll != null) {
  24. session.setAttribute("zzMorecd", cd); //您输入的起点名
  25. session.setAttribute("zzMorezd", zd); //您输入的终点名
  26. session.setAttribute("zzMoreTwoMiddleAll", arrTwoMiddleAll); //得到二个中转站可以到达目的地的所有信息
  27. System.out.println("=======================zzthree");
  28. return "zzthree";
  29. }else{
  30. System.out.println("======================= - zzerror - ");
  31. return "zzerror";}

5.2.3 寻物启事和失物招领

普通用户进入该模块可以发布寻物启示以及失物招领信息,如图5-5所示。

数据库操作相关代码:

  1. public String noteSSMow() throws Exception {
  2. if (request.getSession().getAttribute("loginmessage") == null)
  3. return "noLogin";//判断是否登录
  4. NotesEntity pe = indexDao.noteSSMow(request);
  5. request.setAttribute("NotesEntity", pe);
  6. return "noteSSMow";
  7. }
  8. // 公告管理:修改信息
  9. public String notesUpdList() throws Exception {
  10. if (request.getSession().getAttribute("loginmessage") == null)
  11. return "noLogin";//判断是否登录
  12. List list = indexDao.notesList(request);
  13. request.setAttribute("notesUpdList", list);
  14. return "notesUpdList";
  15. }
  16. // 公告管理:修改单个信息
  17. public String notesUpd() throws Exception {
  18. if (request.getSession().getAttribute("loginmessage") == null)
  19. return "noLogin";//判断是否登录
  20. NotesEntity notesEntity = indexDao.noteSSMow(request);
  21. request.setAttribute("getNotesView", notesEntity);
  22. return "notesUpd";
  23. }
  24. // 公告管理:修改保存到数据库
  25. public String notesUpdDB() throws Exception {
  26. if (request.getSession().getAttribute("loginmessage") == null)
  27. return "noLogin";//判断是否登录
  28. indexDao.notesUpdDB(request);
  29. return "notesUpdList";
  30. }
  31. // 公告管理:删除信息
  32. public String notesDelList() throws Exception {
  33. if (request.getSession().getAttribute("loginmessage") == null)
  34. return "noLogin";//判断是否登录
  35. List list = indexDao.notesList(request);
  36. request.setAttribute("notesDelList", list);
  37. return "notesDelList";
  38. }
  39. // 公告管理:删除单个信息
  40. public String notesDel() throws Exception {
  41. if (request.getSession().getAttribute("loginmessage") == null)
  42. return "noLogin";//判断是否登录
  43. indexDao.notesDel(Long.valueOf(request.getParameter("id")));
  44. return "notesDelList";
  45. }

5.2.4 用户个人信息管理

普通用户登录成功后可以进入到个人主界面,该界面实现的功能为:查看个人详细信息、修改个人信息,如图5-6所示。

5.2.5 公交线路管理

此模块需要系统管理员权限,在管理员主界面中,可对公交线路进行添加、删除以及对公交变动信息实时更新。如图5-7所示。

5.3 连接池配置

在城市公交信息查询系统中采用数据库连接处技术提高访问数据库的效率。在数据源中建立了多个数据库连接,这些连接保存在数据库连接池中。Java程序访问数据库时,只需要从连接池中取出空闲的数据库连接,程序访问数据库完毕之后,再将数据库连接池放回连接池,具体实现是在applicationContext.xml中加入:

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2. <property name="driverClassName">
  3. <value>com.mysql.jdbc.Driver</value>
  4. </property>
  5. <property name="url">
  6. <value>jdbc:mysql://127.0.0.1:3306/buscity</value>
  7. </property>
  8. <property name="username">
  9. <value>root</value>
  10. </property>
  11. <property name="password">
  12. <value></value>
  13. </property>
  14. </bean>

5.4 SSM框架的整合

为实现Spring 整合Mybatis和Springmvc,需要配置applicationContext.xml文件,配置完成后系统就可以通过Springmvc的action直接调用了。Mybatis访问数据库的操作都在Spring中实现了,而Spring的调用是在Springmvc的action中实现。SSM框架整合具体如下:

首先在web.xml文件中添加Spring配置、新增一个监听器(Linstener)。监听器的作用是启动 Web 容器时,自动装配 ApplicationContext 的配置信息。因为它实现了ServletContextListener这个接口,在Web.xml完成这个监听器的配置后,启动容器时,就会默认执行它实现它的方法。实现代码如下:

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>
  4. classpath*:/applicationContext.xml
  5. </param-value>
  6. </context-param>
  7. <listener>
  8. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  9. </listener>

配置数据源、SessionFactory。连接池的数据源和分配 sessionFactory 对象是通过Spring 管理的。Spring 通过建立一个LocalSessionFactory对象来完成对Mybatis 的配置,这是一个工厂 bean 的实现。然后就可以通过继承 Spring 为 我们提供MybatisDaoSupport(MybatisDao层都需要继承extends它)来对数据库的 DAO 模式管理。代码如下:

  1. <!-- 配置数据源 DBCP 提供的BasicDataSource -->
  2. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  3. <property name="driverClassName">
  4. <value>com.mysql.jdbc.Driver</value>
  5. </property>
  6. <property name="url">
  7. <value>jdbc:mysql://127.0.0.1:3306/buscity</value>
  8. </property>
  9. <property name="username">
  10. <value>root</value>
  11. </property>
  12. <property name="password">
  13. <value></value>
  14. </property>
  15. </bean>
  16. <!-- Mybatis配置 -->
  17. <bean id="sessionFactory"
  18. class="org.springframework.orm.Mybatis3.annotation.AnnotationSessionFactoryBean">
  19. <property name="dataSource" ref="dataSource" />
  20. <property name="MybatisProperties">
  21. <props>
  22. <prop key="Mybatis.dialect">org.Mybatis.dialect.MySQL5Dialect</prop>
  23. <prop key="Mybatis.show_sql">true</prop>
  24. <prop key="Mybatis.format_sql">true</prop>
  25. <prop key="Mybatis.hbm2ddl.auto">update</prop>
  26. </props>
  27. </property>
  28. <property name="packagesToScan" value="com.Mybatis" />
  29. </bean>

将sessionFactory 对象作为属性注入到这个服务类中去。代码如下:

  1. <bean id="indexDao" class="com.struts.dao.IndexDao">
  2. <property name="sessionFactory" ref="sessionFactory"></property>
  3. </bean>

装配事务管理器,使用annotation定义事物、自动注册bean。代码如下:

  1. <!-- 事务管理器配置,单数据源事务 -->
  2. <bean id="transactionManager"
  3. class="org.springframework.orm.Mybatis3.MybatisTransactionManager">
  4. <property name="sessionFactory" ref="sessionFactory" />
  5. </bean>
  6. <!-- 使用annotation定义事务 -->
  7. <tx:annotation-driven transaction-manager="transactionManager" />
  8. <context:annotation-config />
  9. <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
  10. <context:component-scan base-package="com.*">
  11. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
  12. </context:component-scan>

配置struts.xml的Action。

6 系统调试与测试

6.1 程序调试

在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。

6.2 程序的测试

6.2.1 测试的重要性及目的

测试的重要性

软件的测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。

测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

测试工作枯燥无味,不能引起人们的兴趣;

测试工作是艰苦而细致的工作;

对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。

测试的目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。

软件测试是为了发现错误而执行程序的过程,测试是为了证明程序有错,而不是证明程序无错误,一个好的测试用例是在于它能发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试。

这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。

首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。

6.2.2 测试的步骤与内容

与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

  • 模块测试:在这个测试步骤中所发现的往往是编码和详细设计的错误

  • 系统测试:在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误

  • 验收测试: 在这个测试步骤中发现的往往是系统需求说明书中的错误

测试的主要内容:

为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试[21]。

单元测试

单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。

集成测试

集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

确认测试

确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户合理期待的那样。

系统测试

软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。

6.2.3 单独对系统的测试

单独对系统的测试主要从以下几个方面入手:

  • 功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准

  • 强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况

  • 安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试

6.3 测试分析

本系统主要实现了公交查询功能,并附有用户留言的功能,同时具有管理员后台维护公交信息等功能。但由于本人能力不足以及所学知识的缺乏,再加上时间有限,该系统还不够健全。该系统虽然基本实现了所要求的功能,但是还存在很多不足,有待于进一步的完善和改进。经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。

结束语

本文通过本系统设计与开发感触颇深,总结如下:

学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它。一个系统的开发,经验是最重要的,经验不足,就难免会有许多考虑不周之处。要想吸引更多的用户,系统的界面必须要美观、有特色、友好,功能要健全。不过由于经验不足,我设计的图形界面比较简单。只是对基本功能进行了开发。

本次开发,我参考了很多本系统的例子,吸取了一些别的本系统的长处,对自己的毕业设计进行了完善,但是还有很多的不足之处,有待以后进一步学习。实践证明,本系统有着很好的发展前景,经测试运行。本文所制作的系统界面友好、使用灵活、操作简单、功能齐全、表现方式独特,已基本具备了成熟的技术理论。

由于时间仓促,本次设计由我完成本系统的制作,对我这样一个JAVA新手而言所制作的模块还有不完善的地方。数据库的设计也比较简单。还有很多毕业设计中用到JAVA语言的知识也不够全面,还有很多地方不能够作到完全的理解和掌握。通过这次毕业论文的设计制作使本人受益匪浅。由于是毕业设计是独立完成的,因此在毕业设计的过程遇到了很多的困难,我求教了不少老师和同学,在这个过程中让我体会到了,一个团队的重要性。

参考文献

[1] BruceEckel. JAVA编程思想[M].北京:机械工业出版社,2003

[2] 赛奎春. JAVA工程应用与项目实践[M]. 北京:机械工业出版社, 2002

[3] 陈守学、刘电霆.中小城市公交线路查询系统设计方法研究[M]. 桂林航天工业高等专科学校学报,2007.12

[4] 刘晓妍. 基于J2EE公交查询系统的研究[D].上海:华东师范大学软件学院,2010.4

[5] 吴永军、蔡永香、郭庆胜. 城市公交查询系统的设计与实现[D].武汉:武汉大学资源与环境科学学院,2006.5

[6] 周继芳. 基于J2EE的公交线路查询系统的设计与实现[D].西昌:西昌卫星发射基地,2009.5

[7] 孙一林,彭波. JAVA数据库编程实例[M]. 北京:清华大学出版社,2002

[8] 萨师煊,王珊. 数据库系统概论[D].高等教育出版社,2002

[9] 耿祥义,张跃平. JAVA实用教程[M]. 北京:清华大学出版社,2003

[10] 蔡剑,景楠. Java Web应用开发J2EE和Tomcat[M]. 北京:清华大学出版社, 2005

[11] Brown等. JAVA编程指南(第二版)[M]. 北京:电子工业出版社 ,2003

[12] 沈雄. 基于SSM的分布式公交运营管理系统设计与实现[EB/OL].http://wenku.baidu.com/view/c49946293169a4517723a3cc.html,2011-05-09/2012-03-28

[13] JAVA 程序设计论坛http://techbbs.zol.com.cn/subcate_list_8.html,2010-11-04/2012-03-29

[14] 徐国志,汪孝宜等. SQL Server数据库开发实例精粹[M].北京:电子工业出版社,2006

[15] 岳昆、王晓玲、周傲英. Web服务核心支撑技术[J]:研究综述.软件学报,2004,18(1):16-20

[16] 冯锐. SSM权威指南[M].北京:中国电力出版社,2003

[17] 月影. JavaScript王者归来[M].北京:清华大学出版社,2008

[18] 孙卫琴. 精通Struts:基于MVC的Java Web设计与开发[M]. 北京:电子工业出版社,2004

[19] 张存保等. 基于WebGIs的城市公交问路系统.武汉理工大学学报,2004,23(1):20-24

[20] Paul Simith. Database Appliction[J]. 北京:电子工业出版社,2001

[21] 王水,张晓民.软件工程素质导论[M].河南:河南科学技术出版社,2011

上传的附件 cloud_download 基于JSP SSM框架的城市公交查询系统的设计与实现.7z ( 24.01mb, 6次下载 )
error_outline 下载需要16点积分

发送私信

懒到懒得喜欢你

5
文章数
6
评论数
最近文章
eject