基于JSP SSH框架的客车网上售票系统的设计与实现

Scavengers

发布日期: 2019-02-18 13:18:57 浏览量: 845
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

随着互联网日益深入社会生活,以网站作为对外的展示窗口,进行内外信息交流,已成为大众的迫切需要。当作当今相对发达的轨道交通工具之一——客车,在铁路交通、航空都迈入网络售票的,开发一套汽车售票系统已经迫在眉睫,开发该系统可以有利于车站工作人员可以及时获取各列车票的发售情况、旅客订票情况;可以在系统中操作退、改签等操作,大大的提高了工作效率。其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。

本系统使用JAVA技术制作网站动态页面,用JAVA语言做连接数据库的程序,使用MYSQL数据库作为系统数据库,开发一个具有用户管理(系统用用户)、票务管理(订单管理、出售、改签、退票、售票情况查询)、基础信息管理(票务信息、新闻公告、留言信息管理)。

关键词:SSH框架技术,网上售票系统,设计与实现

ABSTRACT

With the Internet into the social life, external display as a window to the website, carry out internal and external information exchange, has become the urgent need for the public. As one of the rail transport in relatively developed — in the bus, railway transportation, airlines are entering the network ticketing, develop a set of auto ticketing system has been imminent, the development of the system can be beneficial to the station staff can get the train tickets on sale situation, passengers booking; can operate the withdrawal, change in system operation, greatly improves the work efficiency. Its development mainly includes two aspects: the background of the establishment and maintenance of database and front-end application development. For the former requirement to establish data consistency and integrity, good data security database. For the latter request application procedure function is complete, easy to use etc..

The system uses JAVA technology for the production of dynamic pages, using JAVA language program to connect to the database, using the database of MYSQL as database system, the development of a user (user management system), ticket management (query order management, sales, catering, ticketing, refund situation), basic information management (ticket information, news the announcement, message information management).

Keywords: SSH Framework Technology, Online ticketing system, Design and Implementation

第一章 引言

1.1 课题背景

目前我国进入飞速发展的智能交通时代,在这个信息化的时代,汽车售票信息化也是迫在眉睫的事情,随着出行的旅客数量的增加,客运部门的日常工作量和繁琐度也随之增加,而在票务管理这一块需要的人手非常大,所以开发服务于铁路系统的订票系统也是信息化必经的步骤。

传统的人工售票已经不适合这个信息化时代,人工售票的缺点在于必须要到站买票,而不是每个人都离车站很近,那么买票,坐车会在路上花费大量的时候,如果是网上订票,那么可以节省在路上浪费的时间;传统的订票方式,对于班次的信息必须要询问售票员,当节假日客游量大的时候,往往是排长龙买票,询问的人多了,既增加了售票员的工作量,也浪费了旅客的时间,所以开发客车网上售票系统是这个信息化时代必然的趋势。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对客车售票进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等这些优点能够极大地提高客车信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。与传统的人工售票相比,网上购票时间相对自由,而且免去了节假日需要提前抢票的麻烦与需要付出的大量时间去排队,有意向乘车的人也可以在网上实时了解车辆班次、车票价格等信息。

本系统主要阐述客车票订购系统的后台操作过程及一些关键技术。该系统信息来源主要由管理员添加,方便客车信息管理员的查询,用户可以通过查询到相关的客车票信息,判断是否适合自己乘坐,也可以在网上直接订票,省时省力。由于本系统的开发以节省资源为首,充分利用网络资源,所以本客车车票订购上所看到的客车票信息均来自互联网。

1.2 课题研究的意义

通过网络售票,人们不必再亲自到售票厅去购票,节省了在路上浪费的时候,也可以查询到所有在售车票信息,在预订随意性上游刃有余,而车站工作人员由于购票需求通过网络而大量分流,减少了工作量,为车站节省了人员成本,本次将设计一套方便、实用的高铁订票系统,能够提高高铁部门人员的工作效率、降低在票务管理这一块所花费的大量人力物力;减少旅客在订票、改签、退票过程中浪费的大量时间。

当然,利用这套客车售票系统,运输部门的工作人员可以实时的获知各车次票务的预售情况、旅客信息的管理、车票退改签的管理。

目前我国客车售票主要有汽车站窗口售票与分布在城镇的代售点售票两种,另外也有少量的网友自发组织的网上转让,只是由于网上交易不安全,不规范,并且问题较多并不能解决问题。一旦遇到高峰期出行,就只能老老实实去排长队,即使这样也很难买到票。而票源紧张,就会有黄牛党囤积居奇,进而加剧了票源供求紧张,票价上扬。

在春运期间,为了打击黄牛,杜绝炒票,采取了部分电话订票和取消代售点的措施,但春运期间本应动员社会力量分散售票,这却导致了在这特殊时期人们更加集中在车站购票或是集中在电话订票。而这些措施并不能杜绝黄牛炒票,他们利用先进设备大量订票,真正有需求的人因为只有普通的电话反而订不到票。铁路部门制定紧急措施,搭建临时售票窗口,公安部门投入大量警力大力打击倒票,但这也只是治标不治本,根本不能堵住到票产生的漏洞。

所以,目前铁路所面对的问题,除了春运等高峰期时运力确实不足外,票务体系落后也是人民购票难,黄牛猖獗的原因。

1.3 课题目标

本系统分为两部分:

  • 前台功能模块

    • 用户注册(游客进行该网站需要进行注册方可在系统中进行一系列与预订有关的活动)
    • 票务查询(旅客按出发地、到达地查询各车次的车票情况)
    • 车票销售(选择需要的车票,填写购买信息,比如:身份证号等,进行提交)
    • 改签(用户对已付款的订单车票信息进行变更操作)
    • 退票(用户对已付款的订单车票信息进行退货操作)
    • 信息浏览(查看管理员发布的各种信息)
    • 留言板(用户登陆后可以在留言板中发表留言,未登陆的用户则只能浏览其它用户发表的留言)
    • 个人信息修改
  • 后台系统管理部分

    • 用户管理(管理系统用户信息,作增删改查操作)
    • 票务管理(列车票务信息的增删改查)
    • 信息发布(管理员发布公告类新闻和图片类新闻)
    • 留言中心管理
    • 订单统计
    • 销售情况查询
    • 个人信息修改

1.4 系统特点

本系统主要具有几个显著的特点:

  • 系统界面友好,功能实用且操作比较快捷简单

  • 开发系统所用的周期短,维护费用低,软件的更新速度也较快,具有可靠安全性、可维护性的特点

  • 系统具有很好的可移植和扩展性,也主要表现在:首先,用户只需要使用IE浏览器(IE5.0及以上)就可使用该系统;其次,该系统提供的管理员登陆功能,可以方便的进行权限的控制;最后,该系统可以根据高铁部门随着市场相关策略的改动,而增加或者修改一些功能,却不影响到系统本身

  • 系统从开发到完成,考虑的都是要很好地实现人机交互,能够让操作人员,特别是对计算机知识、网络知识不是很熟悉的人员,也能够快速地使用和操作该系统

  • 在操作人员因某种原因输入了错误的数据时,系统会自动提示数据输入有误,这样保证操作人员输入数据的准确无误

  • 同时,系统采用B/S的架构体系,维护和升级方式简单,成本降低,选择也更多

1.5 本文结构

本文研究的主要内容是如何设计和网络实现客车售票系统,文章分为五个章节。

第一章是引言。本章主要对课题的背景、课题研究的意义以及学生公寓报修管理系统的现状做了全面、详细的说明。第二章是设计技术与开发环境的相关技术介绍。本章从JavaEE、MySql、SSH框架技术三个方面来介绍系统所涉及的相关技术。第三章系统需求分析。第四章系统详细。

第二章 设计技术与开发环境

2.1 运行环境

2.1.1 硬件环境

系统的硬件环境配置为处理器Pentium(R) T4400,内存512,硬盘1G。

2.1.2 软件环境

系统的软件环境的配置是Windows XP操作系统,MyEclipse 10.0开发工具包和MySQL数据库以及tomcat6.0服务器。

运行的环境主要包括开发软件和操作系统的选择。学生公寓报修管理系统的配置根据用户对系统的稳定性要求、系统的容量以及用户的维护水平来确定。

开发软件选择

使用MyEclipse10.0开发工具包或Eclipse JavaEE4.0、tomcat7.0服务器和JDK1.7。

操作系统选择

根据用户对windows的操作系统使用量比较大,因此选用windows 7操作系统。

其他

Intel486以上系列、AMD K6以上系列等台式机和笔记本电脑。

  • 运行时占用内存:≤10MB

  • 所需硬盘空间:≤50MB

  • 软件平台:中文windows2000或更高版本

2.2 开发工具及技术简介

2.2.1 开发工具简介

MyEclipse

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是目前应用最为广泛的java应用程序集成开发环境。它是由Genuine公司开发的一款商业化软件。

MyEclipse是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能。MyEclipse的实际价值来自包含的发布包中的大量的工具。如CCS/JS/HTML/XML的编辑器,帮助创建EJB和Struts项目的向导并产生项目的所有主要的组件如action/session bean/form等。还包含编辑Hibernate配置文件和执行SQL语句的工具。

总之,MyEclipse是个非常强大的开发工具,使用它可以很方便的进行Java Web开发。

MySQL

MySQL是一个精巧的SQL数据库管理系统。它强大功能、灵活性、丰富的应用编程接口(API)以及精巧的系统结构为建立基于数据库的动态网站提供了强大动力。用MySQL存储和管理数据有以下优点

  • 它的核心程序采用完全的多线程编程。它可以灵活地为用户提供服务,能够充分利用CPU

  • 可运行在不同的操作系统下。简单地说,它可以支持Windows95/98/NT/2000以及UNIX、Linux和SUN OS等多种操作系统平台。这意味着在一个操作系统中实现的应用可以很方便地移植到其他的操作系统下

  • 它有一个非常灵活而且安全的权限和口令系统。当客户与MySQL服务器连接时,他们之间所有的口令传送被加密,而且它支持主机认证

  • 支持ODBC for Windows。支持所有的ODBC 2.5函数和其他许多函数,这样就可以用Access连接MySQL服务器,从而使得MySQL的应用被大大扩展

  • 支持大型的数据库。虽然对于用PHP编写的网页来说只要能够存放上百条以上的记录数据就足够了,但它可以方便地支持上千万条记录的数据库

  • 作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改

  • 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性

  • 强大的查询功能。支持查询的SELECT和WHERE语句的全部运算符和函数,并且可以在同一查询中混用来自不同数据库的表,从而使得查询变得快捷和方便

2.2.2 技术简介

本系统使用J2EE规范流行的SSH框架。即基于MVC模式的Struts框架和基于IoC模式的Spring框架以及对象/关系映射框架Hibernate。

Struts是一个在JSP Model2基础上实现的MVC框架,主要分为模型(Model)、视图(Viewer)和控制器(Controller)三部分,它将应用程序的输入、处理、输出分开。视图部分主要由JSP页面组成,控制器主要是接收所有来自客户端的请求并根据配置文件中定义将控制转移到适当的Action对象。模型通常是跟业务逻辑紧密相关的。Struts框架中的MVC组件的体系结构如下图2.1所示。

Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。具有强大的应用功能及灵活性,在项目开发实践中应用该构架,降低了程序的复杂度。易于调试。减轻了程序员的负担,具有很强的扩展性。
Hibernate是持久层上的“对象一关系”映射轻量级组件。Hibernate通过映射(Mapping)文件将对象(Object)与关系型数据(Relational)相关联,因此需要编写和数据库表相对应的Java持久化类以及对应的映射文件。有了Java持久化类后就可以在此基础上实现数据访问类。

2.3 可行性分析

2.3.1 技术可性性

现行系统是手工运作的系统,可以支持向各部门提供查询服务功能,但是,存在以下薄弱环节:

  • 现行系统是手工运作的系统,手工作业量大,数据传递不及时,对数据的统计和计算运程中易发生差错,工作效率较低

  • 流程管理不够严密

  • 不能满足管理要求(例如不能统计、实时状况统计等信息)

  • 提供的资料手工书写,常发生字迹不清晰的问题,并且格式也不统一

  • 信息的查询也不方便

现行系统的上述弱点,实质上反映信息管理的过程中,对信息的产生、传输、加工与挖掘分析利用方面存在不足,不能满足管理与业务发展的要求,也对小区形象造成不利的影响。这也正是提出新系统的直接原因。

根据实际情况,我们使用以少量代价快速地构造一个可执行的软件系统模型。我们可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。

现代计算机软硬件的发展使得本系统具有良好的操作界面,简单直接的操作界面,具有较强的人机对话能力,支持多种汉字输入方式,其适应性强,显示内容简单明了,使操作者不必具有较高高的计算机专业知识,也不必进行专门培训,稍一接触就可以上手进行所有操作。

2.3.2 经济的可行性

本系统旨在提高工作效率、降低劳动成本,在经济上无疑是为企业创造了具大的价值。

本系统运行所需要的环境也是非常便宜的,普通的电脑即可以满足。并且以JAVA WEB作为开发语言和技术,在后期维护上的费用也很低。

综合所述,经济上也是可行的。

2.3.2 政治的可行性

本系统纯为私人设计,在开发过程中没有涉及合同、责任等与法律相抵触的方面。因此,本系统在法律上是可行的。

第三章 系统需求分析与设计

3.1 需求分析

计算机信息系统以数据库为核心,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计和传播等操作。数据库已经成为现在信息系统等计算机系统的基础与核心部分。数据库设计的好坏直接影响到整个系统的质量和效率。

数据库的设计一般经过规划。需求分析、概念设计、逻辑设计、物理设计5个步骤。

3.1.1 功能需求

3.1.1.1 车站方面的需求

订票与取票分离

实现订票方式的多样化,可以采取网络订票,电话订票,代售点订票等多种方法,在订票时需要订票人提供身份证号码与订票人姓名,通过与公安系统协助的网络订票系统对比身份证的所有人是否和订票人提供的信息是否相同,杜绝虚假的订购信息。

付款

对于网络付款可以直接通过网络银行等手段进行付款。对于电话订票、订票点订票可以在固定地点进行付款,并人工操作直接给予付款人发票或其他的可作为付款凭证的物品。同时铁路系统内部数据库记录购票人的身份证号码与座次等车票信息。

取票

取票可在车站内部进行或者在代售点、取票点等地进行。应该通过机器自动进行。可以使用整合身份证识别器的终端系统印刷车票。购票者需要携带身份证换票。

验票

验票应采取与取票类似的方式,使用终端自动验票,乘客需要携带身份证和车票通过中断自动验票登车。终端系统将扫描车票上印刷的乘客身份证号码和身份证信息对比,当二者信息相符方能放行。

保留人工现场售票、验票系统

人工现场售票处将作为办理特别票销售的地点。同时也是为因种种原因没有随身携带身份的乘客提供售票服务的地点。毕竟车系统是为了服务大众的系统,所以应该人性化。对于不能提供身份证的乘客应该携带可以证明身份的证件,如驾驶证、户口本、学生证、军官证、工作证等证件,车站方面对购票乘客身份进行登记记录,发放没有印制身份证号码的特殊票种。学生票等特殊票种办理同上。对于农民工团体票等团体票办理需提供有购票人签名的购票委托书,同时提供购票成员每人的身份证信息,对信息进行记录,发放销售价格特定的正常票种。验票处保留人工验票点,处理与特殊票种有关的验票事项。

3.1.1.2 旅客的需求

  • 旅客要求可对车票信息实时的查询,包括车票起点站和终点站,以及余票等信息,方便订票

  • 旅客要求可以查看车站方面发布的实时通知公告,以便及时了解,改变行程

  • 旅客要求可以网上支付

  • 旅客要求对已订购的车票能改签、退票

  • 旅客要求系统设置功能可以提交建议给车站

3.1.2 权限与责任

客车售票系统有两种角色的人员,因此需要设置两种权限。会员可以在线查询车票,购买车票,车票的退改签;管理员能管理所有票务信息,对票务信息及时更新,查询车票的销量情况等。

  • 会员:查询通知、查询车票、车票预订、车票退改签,个人信息修改

  • 管理员:通知公告信息维护,票务信息维护,余量盘存,销售统计,财务统计,会员管理,留言管理

3.2 概要设计

3.2.1 总体设计

该订票系统包含以下功能:用户模块的用户注册登录,车辆信息查询,车票预定,管理员模块的车辆信息管理,反馈信息管理,用户信息管理。

该客车网上售票系统除了应具备用户模块注册、登录、验证功能的实现和管理员登录、验证的原始账号设置以及对新增加的管理员授权设置功能以外,还应该具备的基本网站使用功能如下:

  • 实现查询信息:用户选择目的地后,可以对车辆发车时间,发车地点,车票价格进行详细的查询,购买车票以后也可以对自己的订单进行查询

  • 实现购买车票:登录账号后,客户根据自身需求查询车辆信息找到自己要乘坐的车次,支付订单后完成购买

  • 实现退票或改签:通过查询系统,客户可以根据自己的订单找到自己的订票信息,对已购车票进行退票操作或者改签操作,退票需要收取5%手续费,只退回95%购票金额,改签不需要另外加钱,但只允许改签一次

  • 实现代售网点:提供代售网点的地址信息,客服服务,用户如遇问题可打电话咨询。在代售网点已购票用户可以对进行取票操作、退票操作、改签操作

  • 实现实时车票图

    • 根据用户查询的班次显示剩余票数,用户可以直观的判断该班次能否购票。当用户购买车票成功后,剩余票数减少一张
    • 在自己的订单进行退票或改签操作后,该班次剩余票数增加一张,改签后的班次剩余票数减少一张
    • 管理员可对某班次信息进行增删查改,票数会随着管理员的操作而改动
  • 实现后台管理员操作

    • 管理员可对车辆的发车时间,票价等信息进行修改
    • 管理员对代售点进行授权以及处理代售点反馈信息
    • 发布公告以及对黑名单和用户进行操作
  • 其他功能

    • 用户实名验证以及限购票数,黑名单设置
    • 用户建议邮箱反馈功能

3.2.2 系统功能结构图

本系统系统功能结构图如图3.1。

3.2.4 模块结构

3.2.4.1 用户可以进行的操作

  • 用户中心:用户信息查看;用户信息修改;用户订单查询;查看帮助中心

  • 查询车辆班次信息,发车时间,发车地点,车票价格等

  • 订单:核对车票信息(核对来回地点与车票价格);下订单:购买车票(确认购买)

  • 退票或改签,退票需要收取5%手续费,退回95%车票价格。改签只允许改一次,切只允许更改相同目标城市的不同发车时间,即车票价格必须相同。

3.2.4.2 管理员可以进行的操作

  • 用户信息管理:管理员可以对用户信息进行增删查改操作

  • 提供代售网点信息:若用户没有网银进行网上支付,管理员可以提供代售网点具体地点或者客服电话给用户,让用户去代售网点购买车票

  • 修改班次信息:管理员可以对车辆的发车时间、地点、票价等车辆班次信息进行修改

  • 发布公告与黑名单功能:遇紧急事件管理员可以发布公告通知用户,遇到一些恶意用户进行不正当操作(如大量购买车票进行黄牛贩票行为)可以对用户进行黑名单处理

3.3 数据库概念结构设计

3.3.1 基本设计概念和处理流程

网站最注重的是与浏览者的互操作性及对信息资源的操作性,因此数据库是必不可少的。数据库是数据管理的最新技术,是计算机科学的重要分支[11]。数据库是服务于各个栏目的,建立的数据库应该力求结构严谨、关系清晰,不要产生冗余。目前,常用的数据库管理系统有Access、SQL Server、MySql、Oracle等。SQL Server是Microsoft公司开发的大型关系数据库管理系统,具有强大的关系数据库创建、开发、设计和管理功能。由于其功能强大、操作方便,适用于不同层次的用户掌握使用[12]。因此本网站采用MYSQL数据库。

3.3.2 概念结构设计

根据功能模块划分的结果,具体分析了本系统中大部分实体,实体属性图如下图所示。

用户E-R图

车票信息E-R图

销售E-R图

留言E-R图

新闻E-R图

3.3.3 数据库表设计

本系统主要的数据表如表3.7至表3.15所示。

系统用户信息表

系统用户信息表主要用来存储系统用户的信息。表的结构如表5.1所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
uname varchar 255 用户名
upass varchar 255 密码
realname varchar 255 姓名
sex varchar 255 性别
age varchar 255 年龄
tel varchar 255 电话
addr varchar 255 地址
delstatus varchar 255 删除状态
type varchar 255 用户类别

待确认信息表

待确认信息表用来保存会员预选的车票信息。表的结构如表3.8所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
productid varchar 255 车票ID
num varchar 255 数量
memberid varchar 255 会员ID

票务记录信息主表

票务记录信息主表用来记录商品的出入库记录信息。表的结构如表3.9所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
productid varchar 255 车票ID
num varchar 255 增减数量
type 增减类型
savetime 日期

留言信息表

留言表用来保存用户的留言信息。表的结构如表3.10所示。

字段名 数据类型 长度 描述
ID int 255 ID(主键)
content varchar 255 留言内容
reply varchar 255 回复内容
savetime varchar 255 留言日期
memberid varchar 255 会员ID

新闻类信息表

新闻类表用来保存站内新闻信息。表的结构如表3.11所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
title varchar 255 信息标题
content varchar 255 内容
savetime varchar 255 日期
type varchar 255 信息类别

订单信息表

订单表用来保存用户提交的订单信息。表的结构如表3.12所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
orderid varchar 255 订单ID
proinfo varchar 255 订单车票明细
memberid varchar 255 会员ID
price varchar 255 订单金额
savetime varchar 255 订单日期
fkstatus varchar 255 付款状态
tel varchar 255 收货人电话
addr varchar 255 身份证
type varchar 255 订单类别

车票信息表

车票信息表用来保存车票信息。表的结构如表3.13所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
prono varchar 255 车票编号
Filed1 varchar 255 出发地
Filed2 varchar 255 到达地
price varchar 255 单价
remark text 0 车票详情
delstatus varchar 255 删除状态

商品类别信息表

商品类别信息表用来保存商品的商品类别情况信息。表的结构如表5.9所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
productid varchar 255 车票ID
num varchar 255 销售数量
savetime varchar 255 销售日期

广告图片信息主表

广告图片信息主表用来记录首页展示的图片信息。表的结构如表5.10所示。

字段名 数据类型 长度 描述
ID int 11 ID(主键)
imgurl varchar 255 图片路径
type varchar 255 类别

3.3.4 数据库逻辑结构设计

逻辑结构设计是概念结构设计的下一阶段,设计根据概念阶段的E-R图转化成系统支持的数据模型,本选课系统采用关系模型。关系模型的逻辑结构是一组关系模式(二维表)的集合。E-R图是由实体,实体属性和实体之间的联系三个要素组成的。所以将E-R图转换为关系模型实际上是要将实体,实体的属性和实体之间的联系转换为关系模型。

根据以上原则将系统中的E-R图转换为关系模型如下:

  • 会员信息表(用户ID,用户名,密码,姓名,电话,用户类型……)

  • 订单信息表(订单ID,编号,车票ID,时间,会员ID,电话,身份证号……)

  • 票务信息表(车票ID,维修人员ID,起始地,到达地,时间……)

  • 留言信息表(留言ID,会员ID,留言内容,日期……)

通过以上数据库关系可以可以得出以下E-R图:

第四章 系统详细设计

4.1 管理员功能模块设计

4.1.1 通知公告功能

管理员发布站内通知公告信息,可对通知公告信息进行编辑,学生和维修人员只能查看通知公告。

通知公告管理的界面为notice.jsp,新增通知公告的页面为noticeadd.jsp,编辑通知公告的页面为noticeedit.jsp

新增通知公告的实现代码为:

  1. //添加公告
  2. public String noticeAdd(){
  3. Notice notice = new Notice();
  4. notice.setTitle(title);
  5. notice.setContent(content);
  6. notice.setSavetime(Info.getDateStr());
  7. commonDAO.save(notice);
  8. suc="";
  9. return "success";
  10. }

编辑通知公告的实现代码为:

  1. //编辑公告
  2. public String noticeEdit(){
  3. Notice notice = (Notice)commonDAO.findById(id, "Notice");
  4. notice.setTitle(title);
  5. notice.setContent(content);
  6. commonDAO.update(notice);
  7. suc="";
  8. return "success";
  9. }

通知公告管理的界面如下:

4.1.2会员管理功能

管理员维护系统会员信息,对会员信息进行增删改查操作,此处会员信息由于与订单信息相关联,删除是采用的逻辑删除,即每个用户有一个delstatus删除状态,正常为0,已删除是1,当用户的delstatus状态为1时,则不能登陆,也不能为管理所查询。

用户管理的用户列表页为member.jsp,系统设有黑名单功能,即将会员加入黑名单后则会员帐户失效;加入黑名单的实现方式为将会员信息的blackname设为YES。

实现代码为:

  1. if(inid!=null){
  2. Sysuser s1 = (Sysuser)dao.findById(inid,"Sysuser");
  3. s1.setBlackname("yes");
  4. dao.update(s1);
  5. }if(outid!=null){
  6. Sysuser s2 = (Sysuser)dao.findById(outid,"Sysuser");
  7. s2.setBlackname("no");
  8. dao.update(s2);
  9. }

功能界面如下:

4.1.3 车票管理功能

管理员维护车票信息功能,即管理员添加车票信息,如:车票编号,始发站,日期,说明等,车票信息为贯穿整个系统的核心数据,关联订单表。

车票管理的功能有新增、查询、编辑和删除,具体的实现代码如下:

  1. //新增车票
  2. public String productAdd()
  3. {
  4. System.out.println("11=="+field1);
  5. Product product=new Product();
  6. product.setProname(proname);
  7. product.setProno(prono);
  8. //product.setImg(img);
  9. product.setPrice(price);
  10. product.setProtype(protype);
  11. product.setRemark(remark);
  12. product.setDelstatus("0"); //0:正常;1:删除
  13. product.setField1(field1); //时间
  14. product.setField2(field2.trim());
  15. product.setField3(field3.trim());
  16. product.setField4(field4);
  17. product.setField5(field5);
  18. product.setField6(field6);
  19. product.setField9(field9);
  20. product.setField10(field10);
  21. commonDAO.save(product);
  22. suc="";
  23. return "success";
  24. }
  25. //编辑车票
  26. public String productEdit(){
  27. Product product = (Product)commonDAO.findById(id, "Product");
  28. product.setProname(proname);
  29. product.setProno(prono);
  30. product.setPrice(price);
  31. product.setProtype(protype);
  32. product.setRemark(remark);
  33. product.setField1(field1); //时间
  34. product.setField2(field2);
  35. product.setField3(field3);
  36. product.setField4(field4);
  37. product.setField5(field5);
  38. commonDAO.update(product);
  39. suc="";
  40. return "success";
  41. }
  42. //删除车票
  43. public String productDel(){
  44. Product product = (Product)commonDAO.findById(id, "Product");
  45. product.setDelstatus("1");
  46. commonDAO.update(product);
  47. return "success";
  48. }

功能界面设计如下:

4.1.4 订单管理功能

管理员查看会员的订单信息,由于本系统为自动售票系统,所以管理员只能对订单信息进行查询,不需要作其它操作,订单信息集成了订单中的票务信息,数量,订单会员,电话,身份证等信息。

4.1.5 订单退票查询功能

订单退票信息会员的退票操作产生的数据,可以一目了然的看到会员每一笔退票操作,包括所退订单中的车票始发站,订单人的基础信息,本功能的数据也只为管理员所查看。

4.1.6 余票查询功能

管理员可以对各个票务信息的余票进行查询,余票查询功能分为流水记录和余票盘点,即可以查询每一班的车票信息的售出出库及退票入库明细信息和每一班车票的剩余数,帮助车站方面及时调整调度工作。

4.1.7 留言管理功能

管理员查看及回复会员的留言问题,在站内形成一个互动平台,更有利于车站与旅客的沟通及交流。

管理员后台回复留言和留言删除的代码实现为:

  1. //留言回复
  2. public String msgReply(){
  3. Msg msg = (Msg)commonDAO.findById(id, "Msg");
  4. msg.setReply(reply);
  5. commonDAO.update(msg);
  6. suc="";
  7. return "success";
  8. }
  9. //留言删除
  10. public String msgDel(){
  11. commonDAO.delete(id, "Msg");
  12. suc="";
  13. return "success";
  14. }

4.2 会员功能模块设计

4.2.1 会员注册功能

游客想要在线订票则必须先进行会员注册,会员注册时需要填写个人的真实信息,包括姓名,电话身份证等必要信息,注册时后台需要验证用户名的唯一性,如果必填项为空则不允许提交注册并给出提示。

注册时的代码实现为:

  1. //用户注册
  2. public String memberReg()
  3. {
  4. String hql = " from Sysuser where uname='"+uname+"'";
  5. List adminList=commonDAO.findByHql(hql);
  6. if(adminList.size()!=0){
  7. no="";
  8. return "erro";
  9. }else{
  10. Sysuser sysuser=new Sysuser();
  11. sysuser.setUname(uname);
  12. upass = MD5.getDigest(upass);
  13. sysuser.setUpass(upass);
  14. sysuser.setRealname(realname);
  15. sysuser.setSex(sex);
  16. sysuser.setAge(age);
  17. sysuser.setTel(tel);
  18. sysuser.setAddr(addr);
  19. sysuser.setType("会员");
  20. sysuser.setDelstatus("0");
  21. sysuser.setEmail(email);
  22. sysuser.setMoney("0");
  23. commonDAO.save(sysuser);
  24. suc="";
  25. return "success";
  26. }
  27. }

会员登陆后可以对自己的个人信息进行修改

  1. //会员编辑个人信息
  2. public String memberEdit(){
  3. Sysuser sysuser = (Sysuser)commonDAO.findById(id, "Sysuser");
  4. System.out.println("aa="+upass.equals(""));
  5. if(!upass.equals("")){
  6. upass = MD5.getDigest(upass);
  7. sysuser.setUpass(upass);
  8. }
  9. sysuser.setRealname(realname);
  10. sysuser.setSex(sex);
  11. sysuser.setAge(age);
  12. sysuser.setTel(tel);
  13. sysuser.setAddr(addr);
  14. sysuser.setEmail(email);
  15. commonDAO.update(sysuser);
  16. suc="";
  17. return "success";
  18. }

4.2.2 票务查询功能

会员或游客均可对票务信息进行站站查询,查询的结果显示在车票列表页,会员登陆后可以点击需要的车票信息进入购买页面。

4.2.3 会员订票功能

本功能的流程为,会员选定车票购买后,车票信息进入待确认栏,会员在待确认栏进行付款,则生成订单,可以我的订单页进行查询。

如果车票的余量为0时则提示会员不能购买,否则在待确认订单后在可以进行购买,移出等操作,会员在付款前可以对车票数量进行修改。

预选车票的代码实现为:

  1. public void carAdd() throws IOException
  2. {
  3. System.out.println("aaaaaaaaa");
  4. Car car=new Car();
  5. car.setProductid(productid);
  6. car.setNum(num);
  7. car.setMemberid(memberid);
  8. commonDAO.save(car);
  9. int responseContext;
  10. responseContext=1;
  11. System.out.println(responseContext);
  12. HttpServletResponse response=ServletActionContext.getResponse();
  13. response.setContentType("text/html");
  14. PrintWriter out = response.getWriter();
  15. out.println(responseContext);
  16. out.flush();
  17. out.close();
  18. }
  19. //移出车票
  20. public String carDel(){
  21. commonDAO.delete(id, "Car");
  22. suc="";
  23. return "success";
  24. }
  25. //修改购物车内车票数量
  26. public String carNumEdit(){
  27. Car car = (Car)commonDAO.findById(id, "Car");
  28. car.setNum(num);
  29. commonDAO.update(car);
  30. suc="";
  31. return "success";
  32. }

在确认付款后会员需要对订单信息进行补充。

  1. //新增订单
  2. public String orderAdd()
  3. {
  4. Order order=new Order();
  5. order.setOrderid(Info.getAutoId());
  6. order.setMemberid(memberid);
  7. order.setPrice(price);
  8. order.setFkstatus("未付款");
  9. order.setProinfo(proinfo);
  10. order.setSavetime(Info.getDateStr());
  11. order.setFhstatus("未发货");
  12. order.setShstatus("未确认");
  13. order.setTel(tel);
  14. order.setAddr(addr);
  15. order.setType("0"); //0:订单 1:退货
  16. order.setIsgq("no");//yes :改签订单 no :非改签订单
  17. commonDAO.save(order);
  18. commonDAO.delete(carids, "Car");
  19. suc="";
  20. return "success";
  21. }

订单页面为已付或未付款订单的结果页面,会员可以在此对未付款订单进行付款和取消,对已付款订单进行退票及改签。

  1. //会员付款
  2. public String orderFk(){
  3. Order o = (Order)commonDAO.findById(id, "Order");
  4. String is = "yes";
  5. String b[] = o.getProinfo().split(",");
  6. Kcrecord kc = new Kcrecord();
  7. kc.setProductid(b[0]); //车票ID
  8. kc.setNum(b[1]); //数量
  9. ArrayList<Kcrecord> inlist = (ArrayList<Kcrecord>)commonDAO.findByHql(" from Kcrecord where productid='"+b[0]+"' and type='in' ");
  10. ArrayList<Kcrecord> outlist = (ArrayList<Kcrecord>)commonDAO.findByHql(" from Kcrecord where productid='"+b[0]+"' and type='out' ");
  11. int k=0;
  12. if(inlist.size()!=0){
  13. int innum = 0;
  14. int outnum = 0;
  15. for(Kcrecord in:inlist){
  16. innum+=Integer.parseInt(in.getNum());
  17. }
  18. for(Kcrecord kout:outlist){
  19. outnum+=Integer.parseInt(kout.getNum());
  20. }
  21. k = innum-outnum;
  22. }else{
  23. k = 0;
  24. }
  25. System.out.println("kkkkkkkkk=="+k);
  26. System.out.println("Integer.parseInt(b[1]=="+b[1]);
  27. if(Integer.parseInt(b[1])<=k){
  28. System.out.println("yyyyyyyyyy");
  29. kc.setType("out");
  30. kc.setSavetime(Info.getDateStr());
  31. commonDAO.save(kc);
  32. Sales sales = new Sales();
  33. sales.setProductid(b[0].toString()); //车票ID
  34. sales.setNum(b[1].toString()); //数量
  35. sales.setSavetime(Info.getDateStr());
  36. commonDAO.save(sales);
  37. }else{
  38. System.out.println("wwwwwwwwwwwwww");
  39. is = "no";
  40. }
  41. if(is != "no"){
  42. o.setFkstatus("已付款");
  43. commonDAO.update(o);
  44. suc="";
  45. return "success";
  46. }else{
  47. no="";
  48. return "erro";
  49. }
  50. }

4.2.4 订单退票功能

会员登陆后可以对已付款的订单进行退票操作,此时车票余量信息自动恢复订单中的车票数量,并返还票面金额95%的金额至会员帐户。

具体的逻辑代码为:

  1. //会员订单退票
  2. public String orderTh(){
  3. Order o = new Order();
  4. o = (Order)commonDAO.findById(id, "Order");
  5. String pinfo = o.getProinfo();
  6. //返库
  7. String b[] = pinfo.split(",");
  8. Kcrecord kc = new Kcrecord();
  9. kc.setProductid(b[0]);
  10. kc.setNum(b[1]);
  11. kc.setType("in");
  12. kc.setSavetime(Info.getDateStr());
  13. commonDAO.update(kc);
  14. //变更退票状态
  15. o.setType("1");
  16. o.setFhstatus("退票成功");
  17. //这里加退票返金额至会员帐户
  18. Sysuser sysuser = (Sysuser)commonDAO.findById(o.getMemberid(), "Sysuser");
  19. String fh = o.getPrice();//返还金额
  20. sysuser.setMoney(String.valueOf(Double.valueOf(sysuser.getMoney())+Double.valueOf(fh)-Double.valueOf(fh)*0.05));
  21. commonDAO.update(sysuser);
  22. commonDAO.update(o);
  23. suc="";
  24. return "success";
  25. }

4.2.5 车票改签功能

每一次订单会员均有一个改签的机会,改签车票只限本线路车票的其它时刻的车票,改签不需要手续费,本模块设计订单生成时的是否改签状态为NO,如果订单被改签过一次则此状态更新为YES,则不能再次改签。

改签的页面为:

当会员选定目标车票后,后台先判断目标车票的余量信息,若旧车票的数量大于目标车票的余量则不允许改签并给予提示,反之则将目标车票的余票减于订单中旧车票的数量,且将旧车票的余票量加上对应的数据,保证了整个票务余票的进出合理性。

  1. //改签
  2. public String orderGq(){
  3. String is = "yes";
  4. Order o = (Order)commonDAO.findById(id, "Order");
  5. String pinfo[] = o.getProinfo().split(",");
  6. String oldpid = pinfo[0];
  7. String oldnum = pinfo[1];
  8. String newnum = oldnum;
  9. o.setProinfo(newpid+","+newnum);
  10. o.setIsgq("yes");
  11. //检查目标车票库存
  12. Kcrecord kc = new Kcrecord();
  13. kc.setProductid(newpid); //车票ID
  14. kc.setNum(newnum); //数量
  15. ArrayList<Kcrecord> inlist = (ArrayList<Kcrecord>)commonDAO.findByHql(" from Kcrecord where productid='"+newpid+"' and type='in' ");
  16. ArrayList<Kcrecord> outlist = (ArrayList<Kcrecord>)commonDAO.findByHql(" from Kcrecord where productid='"+newpid+"' and type='out' ");
  17. int k=0;//总库存
  18. if(inlist.size()!=0){
  19. int innum = 0;
  20. int outnum = 0;
  21. for(Kcrecord in:inlist){
  22. innum+=Integer.parseInt(in.getNum());
  23. }
  24. for(Kcrecord kout:outlist){
  25. outnum+=Integer.parseInt(kout.getNum());
  26. }
  27. k = innum-outnum;
  28. }else{
  29. k = 0;
  30. }
  31. //如果目标车票数量小于总库存则可以改签
  32. if(Integer.parseInt(newnum)<=k){
  33. //目标车票出库
  34. kc.setType("out");
  35. kc.setSavetime(Info.getDateStr());
  36. Kcrecord oldProductkc = new Kcrecord();
  37. //旧车票入库
  38. oldProductkc.setProductid(oldpid);
  39. oldProductkc.setNum(oldnum);
  40. oldProductkc.setType("in");
  41. oldProductkc.setSavetime(Info.getDateStr());
  42. commonDAO.save(oldProductkc);
  43. commonDAO.save(kc);
  44. //commonDAO.save(sales);
  45. commonDAO.update(o);
  46. }else{
  47. is = "no";
  48. }
  49. if(is != "no"){
  50. suc1="";
  51. return "success";
  52. }else{
  53. no="";
  54. return "erro";
  55. }
  56. }

第五章 系统测试

5.1 系统测试目的与意义

系统测试是管理信息系统开发周期中一个十分重要而漫长的的阶段。其重要性体现在他是保证系统质量与可靠性的最后关口,是对整个系统开发过程包括系统分析、系统设计和系统实现的最终审查。

系统测试的任务是尽可能彻底的检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统“做得怎样”。这这阶段又可以分为三个步骤:模块测试,测试每个模块的程序是否正确;组装测试,测试模块之间的接口是否正确;确认测试,测试整个软件系统是否满足用户功能和性能的要求。测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒测试,应覆盖系统随偶联合的部件,系统测试是正对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出需求规格不符合或与之矛盾的地方。

5.2 测试过程

在测试之初,由于将数据库中的数据是随便输入,没有实用性,为了使系统更加完善,在系统测试的过程中,本系统将一开始编程随便输入的数据全部清理后,输入了一些有效的测试数据,这样可以更真实的反映系统的功能实现情况。

这样不断发现问题,经过反复的测试、调试,把问题一个个的解决,最终系统可以正常运行。

5.2.1 主页面的登录模块测试

测试流程

  • 打开系统首页,输入错误的登录信息

  • 登录

  • 输入正确的登录信息

  • 登录

  • 测试结果

模块名称 测试用例 预期结果 实际结果 是否通过
登录模块 用户名:null 密码:null 弹出错误提示,请输入用户名 登陆失败,提示请输入用户名 通过
登录模块 用户名:m1 密码:null 弹出错误提示,请输入密码 失败,提示输入密码 通过
登录模块 用户名:m1 密码:1 弹出错误提示,用户名或者密码错误 登陆失败,提示用户名或者密码错误 通过
订单改签 会员对已付款订单进行改签 改签成功,旧车票余量增加对应数量,目标车票余量减少对应数量 旧车票余票量增加相应数量,目标车票余量减少相应数量 通过
订单退票 会员对已付款订单进行退票 退票成功,对应车票余量增加相应数量,会员帐户返还票面金额95% 退票成功,对应车票余量增加相应数量,会员帐户返还票面金额95% 通过
用户密码修改 随意一个用户登陆,修改密码 修改成功,退出后用新密码登陆,并登陆成功 修改成功 通过

5.3 其他错误

在程序设计实现的过程中不可避免的会产生各种难以预料的错误,如书写错误、传值类型不一致、参数传递问题等等。这些都需要通过细心的检测与不断的调试才能够排除。比如在servlet路径配置时因粗心错误导致运行导致所报错误,如图5.4:

结 论

本次毕业设计将我大学四年所学的软件工程理论知识用到了具体的实践中去,深化了理论知识,同时也锻炼了动手实践能力。在这段日子里,我查阅了许多有关人事管理信息系统的资料,翻阅了许多JSP的书籍,结合自己的经验,详细调查了车站售票的工作内容与细节,开发设计了这个网上客车售票系统,虽然企业每个学期都会有相应课程的课程设计和实训来作为动手练习训练,不过在本次毕业设计具体的实践的时候还是遇到了很多小问题,比如说在jsp页面将输入框设为不可用是添加属性readonly=“true”,而我在实际编程中却错写成disable=“true”,这样直接导致了request对象取不到数据,调试了程序很久才发现request对象获得的返回值一直是空,之前一直以为是代码哪里出了问题,总是在查源程序的逻辑。这些虽然都是小问题,但是由于不细心在具体实践中却浪费了不少时间,看来平时还是要多多实践才是。

在系统的开发过程中,我运用到了B/S三层结构技术和自己在平时学习中掌握的一些技术,通过这些技术的实现,整个系统的性能得到了大大的提高。这些技术都在论文中做了比较详细的介绍。本系统还存在许多的缺陷和不足之处,比如很多细节上做的还不行,有些功能模块还应再加强。希望在以后的时间里,我可以把这些缺陷都弥补过来,进一步完善系统。

通过本次毕业设计我锻炼了自己的自学、研究能力,也从中学到不少在企业在课堂上学不到的东西.通过实践我也深刻的体会到软件开发的艰辛及问题解决后的喜悦心情,培养我的独立思考问题的能力,同时也增强了我的理论联系实际的能力,这为自己以后的工作奠定了良好的基础。

本系统可以在很大程度上减轻车站工作人员的工作负担,但由于时间按和技术条件的限制,还存在一些不足之处,有些功能还需要改进,还应该做进一步的系统调查需求分析工作,更深入的完善系统。总之,一个紧跟时代步伐的真正使用的软件必需有一个不断完善改进的过程

参考文献

[1] 齐治昌,《软件工程(第二版)》 ,高等教育出版社,2007.8

[2] 张新曼,《精通JSP-WEB开发技术与典型应用》 ,人民邮电出版社, 2007.9

[3] 张立科,《Java信息管理系统开发》 ,人民邮电出版社,2005.4

[4] 邓子云,《JSP网络编程从基础到实践》 ,电子工业出版社,2007.5

[5] 郝玉龙,《JavaEE编程技术》 ,北京交通大学出版社,2005.3

[6] 邓 创,《java速查手册》 ,辽宁科学技术出版社,2004.1

[7] 李萍,《企业管理优质接待技巧》 ,南方日报出版社,2004.1

[8] 吴兆奎,《企业经营宝典》 ,企业管理出版社,2005.1

[9] 赵增敏,《sql server 2000 实用教程(第 2 版),电子工业出版社,2008.9

[10] 李金勇,《SQL SERVER 2000 数据库技术与实训》北京理工大出版社,2008.11

[11] 周绪, 《sql server2000 中文版入门提高》清华大学出版社,2004.02

[12] 朱涛江,《SqlServer权威指南》 ,中国电力出版社,2003

[13] 张长富,黄中敏,《JavaScript动态网页编程实例手册》 ,海洋出版社,2005

[14] 李建中,王珊.《数据库系统原理(第2版)》 ,电子工业出版社,2004.9

上传的附件 cloud_download 基于JSP SSH框架的客车网上售票系统的设计与实现.7z ( 28.21mb, 22次下载 )
error_outline 下载需要13点积分

keyboard_arrow_left上一篇 : C++实现的基于链表的通讯录管理系统 基于VC++的四国军棋局域网联网游戏的设计与实现 : 下一篇keyboard_arrow_right



Scavengers
2019-02-18 13:19:37
使用JAVA技术制作网站动态页面,用JAVA语言做连接数据库的程序,使用MYSQL数据库作为系统数据库
六氯苯小姐姐
2019-06-10 14:10:43
为什么解压的文件打不开呀

发送私信

坚持了才叫梦想,放弃了就只是妄想

8
文章数
24
评论数
最近文章
eject