版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
合肥师范学院2015届本科生毕业论文(设计)合肥师范学院2015届本科生毕业论文(设计)本科生毕业论文(设计)题目:基于JAVA的航空票务系统的设计与实现学院计算机学院学科门类工科专业计算机科学与技术学号姓名指导教师2015年5月22日PAGEIPAGE摘要现如今的航空售票业务是一个高度依赖信息的行业。互联网信息技术的飞速发展不仅使航空售票工作者逐渐摆脱了繁重的手工劳动、提高了工作效率,而且推着航空事业向现代化管理迈进。所以航空票务系统的实现在现实生活中尤为重要。基于JAVA的航空票务系统就是使用JAVA实现在网页上进行航空机票的交易和管理。通过本系统不仅可以进行售票工作,用户还可进行改签和退票等功能,系统的后台管理还可以对旅客情况和航班和机票的信息进行查询,并可根据不同的情况随时进行进行增加,修改,删除等工作,使售票人员能够有效的对机票进行控制和管理。极大程度的节约了成本,并为用户提供更加快捷、简便的服务。关键词:航空票务;管理系统;JAVAIIAbstractThe
airline
ticketing
is
nowadays
a
career
highly
relied
on
information.
The
rapid
development
of
internet
information
technology
gradually
getting
the
heavy
missions
off,
improving
the
work
efficiency
and
making
steps
towards
modern
management.
Soitisveryimportantrealizeairlineticketingsysteminourlife.The
Java-based
airline
ticketing
system
realized
the
airline
tickets
trade
and
management
online
in
Web.
Not
only
the
ticket
selling
service
can
be
achieved
by
the
system,
but
the
tickets
rescheduling
and
canceling
service.
The
back-stage
management
realized
the
inquire
function
for
passenger,
flight
and
ticket
information.
Add,
delete
and
change
function
can
also
be
realized
in
necessary,
which
makes
tickets
seller
have
a
efficient
control
and
management
to
air
ticket.
Saved
cost
in
a
big
extent
and
proved
users
with
better
service.KeyWords:AirTicketing;ManagementSystem;JAVA目录TOC\o"1-3"\h\u28798摘要 I18659Abstract II145001.引言 1233621.1开发背景及意义 1183551.2开发工具和环境配置 1183531.2.1开发工具 1289841.2.2环境配置 2194081.3可行性研究 4316002.需求分析 580652.1功能需求 517742.2性能需求 5206023.系统设计 6174843.1数据库设计 6183403.1.1数据库表 6288373.1.2数据库的概念结构设计 658043.1.3数据库的逻辑结构设计 8227753.2功能模块概要设计 10167883.2.1模块设计 10209773.2.2系统流程图 10307634.详细设计 1176074.1登录模块 11189004.2航班管理模块 13324944.3机票预订模块 17174724.4我的订单模块 18213994.5修改密码模块 1882224.6用户注册模块 19167834.7用户管理模块 2092435.系统测试 21215205.1系统测试的概念 21309355.2测试策略及结果 21312935.2.1功能的测试 21158235.2.2其他测试 2358816.结语 2428233参考文献 255279附录 2624246致谢 38PAGEPAGE21.引言1.1开发背景及意义随着科技的发展,人们生活水平的提高,飞机这种交通工具逐渐的得到人们的青睐,它方便了人们的出行。民航服务业的发展,也推动着各种机票经营企业的快速发展,用户需要实时的管理航班信息,能够对客户定票、退票、产生定单进行管理。面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效的程序结构支持各种数据操作的执行。因此,航空票务系统的设计与实现是必须的。它不但能满足各种机票经营企业的需求,也大大方便了乘客的查询航班、购买机票、退票等活动。管理信息系统的开发需要语言的支持,现在主流的语言有JAVA、C、IOS、Android等。这里比较适合的是JAVA语言,它是面向对象的、B/S(浏览器/服务器)结构。面向对象的开发是将所需开发的管理信息系统要解决的问题抽象成若干对象,再研究这些对象之间的关系,构建这些对象之间的联系,最终反映在开发的管理信息系统中。B/S结构是浏览器、服务器的结构,客户之间通过浏览器就可以访问票务系统,不需要下载客户端。更加方便的为用户通过服务[1]。本系统的开发使用的JAVA中的SERVLET和JSP技术。前台页面时动态的JSP页面,在通过SERVLET交互式地浏览和修改数据,生成动态Web内容。整个项目使用MVC设计模式,层次结构分明便于开发和维护。1.2开发工具和环境配置1.2.1开发工具本系统开发主要使用的开发工具是MyEclipse9.0和MySQL数据库,同时还在MyEclipse中配置了Tomcat服务器以及使用火狐浏览器进行运行测试。1、MyEclipse:是在Eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于JAVA、JAVAEE以及移动应用的开发。MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持相当不错[2]。2、MySQL:是一个关系型数据库管理系统,其所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库[3]。3、Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务PAGEPAGE39器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。4、火狐浏览器:可以用来运行显示系统开发编写的JSP页面,尤其是火狐下的一款插件Firebug更是方便进行查错。它集HTML查看和编辑、JavaScript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手[4]。Firebug能从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。1.2.2环境配置1、配置JDK:首先下载安装JDK软件,安装好后配置系统环境变量,右击计算机-属性-高级系统设置-环境变量-,然后就可以对环境变量进行设置。找到系统变量中的path值。如下图所示:图1-1环境变量配置选中“path”-点击编辑-把安装JDK的路径粘贴到变量值的后面。注意,复制进去的路径一定要与前面的数据用分号隔开。图1-2系统变量编辑2、配置Tomcat:首先下载Tomcat文件,我是把文件放在E盘下。然后启动MyEclipse,点击Windows-preferences-搜索tomcat。如下图操作:图1-3Tomcat配置3、使用第三方工具连接数据库:下载、安装MySQL客户端软件NavicatforMysql,双击打开工具-点击“Connection”弹出如图示窗口,填写服务器的IP以及端口号、数据库的用户名和密码连接数据库。图1-4连接数据库1.3可行性研究航空票务系统是使用JAVA语言开发,使用SERVLET和JSP技术进行实现。为了更加方便用户进行订票、退票、查询等功能,系统使用JAVAWEB技术,直接将系统发布到万维网上,用户直接通过浏览器访问该系统,不需要下载客户端。在技术上使用MVC设计模式,将显示层、业务逻辑层以及控制层分开,结构清晰便于开发、易维护[5]。2.需求分析2.1功能需求本航空票务系统主要实现的功能有:(1)实现不同权限的登录。主要有三种用户权限:管理员权限、登录用户、未登录用户。管理员可进行用户管理、航班管理、机票管理以及系统维护。登录用户可进行航班查询,机票查询、预定、退票改签以及个人信息管理。未登录用户能对航班和机票进行查询以及注册、登录等[6]。(2)订票功能,能够按照顾客提供的信息提供订票服务,例如按给定的起飞城市、到达城市、起飞日期、舱位类型等订票。
(3)航班管理,管理员能够对航班信息进行增、删、改、查。保持航班信息的更新及维护。(4)机票管理,管理员客户操作反馈的信息,对机票信息进行增、删、改、查等操作。(5)提供各种查询功能。例如航班时刻查询,包括起飞时间,到达时间;航班的其他基本信息查询,以及对机票的查询。
(6)我的订单。用户登录后通过我的订单可以查看个人的订单详情,还可进行退票功能以及机票改签,并且打印改签前后机票的价格信息。
(7)公司简介,通过公司简介可以查看公司的介绍。用户登录进入航空票务系统的主界面,在上方有六个菜单按钮:系统主页、公司简介、航班查询、机票预订、我的订单及修改密码。各个界面简洁,操作方便,容易上手,用户可以对航班进行详细的信息查询,在机票查询中进行机票的查询和预定,在我的订单中进行机票退订和改签。2.2性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,系统应该满足以下的性能需求:系统处理的准确性和及时性是系统的必要性能,系统在后期的维护下以及可扩展性,要求系统提供足够的手段进行功能的调整和扩充。3.系统设计3.1数据库设计对于航空票务系统,它的数据库设计是通过对航空公司管理业务过程的数据流程分析和用户的基本信息以及用户的处理业务的数据分析后进行设计。可以确定岀系统中一些实体对象及以及它们之间的关系,这些实体包含各种具体信息,通过相互之间的作用形成数据的流动[7]。3.1.1数据库表航空票务系统中的实体对象包括航班信息表(flightinfo),用户和管理员信息表(userinfo),机票信息表(ticketinfo),订单信息表(user_ticketinfo)这些实体模型的含义如下所述。(1)flightinfo:代表一个航班信息实体:包括航班号(id)、航空公司(airfirm)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime)。(2)userinfo:代表一个用户或管理员的信息实体:包括用户编号(id)、用户名(name),密码(password),性别(sex),手机号码(tel),身份证号(idcard),用户权限(level)。(3)ticketinfo:代表每一张机票的信息实体:机票编号(id)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime),日期(time),座位等级(seatLeval),票价(fare),discount(折扣),航班号(flight_id)、机票剩余数量(ticketNum)。(4)user_ticketinfo:代表一个用户购买机票的信息实体:机票编号(id)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime),日期(time),座位等级(seatLeval),票价(fare),用户名(name)、身份证号(idcard)。3.1.2数据库的概念结构设计概念结构设计将反映现实世界中的实体、属性和它们之间的关系,建立原始数据形式。概念结构设计的目标是产生反映系统信息需求的整体数据库概念结构[8],描述工具主要有实体图: 图3-1航班信息实体图3-2用户信息实体图3-3机票信息实体图3-4订单信息实体图3-5ER图3.1.3数据库的逻辑结构设计数据库逻辑结构设计是描述数据库的组织结构、生成数据库模式。数据库模式定义以下内容:存储什么信息、数据的组织、需要的表、列的定义[9]。本课题使用的是MySQL数据库,根据上述建立的E-R图,经设计得到如下的数据表:flightinfo(航班信息表)航班信息表用来保存航班的信息,如图3-5所示。userinfo(用户信息表)用户信息表用于记录用户的信息情况,如图3-6所示。ticketinfo(机票信息表)机票信息表用来保存机票的信息,如图3-7所示。user_ticketinfo(订单信息表)订单信息表用于记录每个用户订购机票的信息,如图3-8所示。图3-6flightinfo(航班信息表)图3-7userinfo(用户信息表)图3-8ticketinfo(机票信息表)图3-9user_ticketinfo(订单信息表)3.2功能模块概要设计3.2.1模块设计[用户登录模块]实现了对用户使用系统的检验工作。用户又分为不同的权限,管理员登陆,用户登录和不进行登录直接进入。对不同用户进入系统所赋予的权限也不同,增加了系统的安全性。[用户管理模块]管理员登陆的权限,对系统登录用户的查看和删除操作。[航班管理模块]包含对航班信息的查询,所有用户都拥有的权限。对航班信息的添加、修改和删除这是系统管理员的操作权限。[机票管理模块]包含对机票信息的查询,所有用户都拥有的权限。对机票信息的添加、修改和删除这是系统管理员的操作权限。对机票的预定这是登录用户的权限。[我的订单模块]包含对用户订单信息的查询,并且包含对机票的退订以及改签权限,改签后会提示改签前后机票价格信息。[修改密码模块]对于已登录用户可进行密码修改。[登录和注册模块]这是对进入系统没有登录的用户的权限。用户点击登录按钮跳转到登陆界面。点击注册进行注册,用户注册包含对用户信息的验证。3.2.2系统流程图图3-10系统走向图4.详细设计本系统使用的是JAVA的SERVLET和JSP技术,所以系统的设计又分为前端JSP页面设计和后端业务逻辑处理。下面的模块设计主要从前端JSP页面和后端中的SERVLET控制层两部部分进行讲解。4.1登录模块登录模块进行登录用户的用户名和密码进行验证,点击“快速注册”还能跳转到注册界面进行用户注册。登录用户登录后,传递用户填写的用户名和密码进入到UserServlet中的loginStu方法进行用户身份验证,如果用户名和密码输入错误则跳转到登录页面。用户登录正确则跳转到系统主界面。实现代码如下: /** *用户登录 */ publicvoidloginStu(HttpServletRequestrequest,HttpServletResponseresponsethrowsSQLException,ServletException,IOException{ Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); Stringsql="select*fromuserinfowherename=?andpassword=?"; Objectparames[]=newObject[]{username,password}; System.out.println(username+""+password); //一般用户登录(不需要用户名、密码) if((username==null||username=="")&&(password==""||password==null)){ response.sendRedirect("main1.jsp"); }else{ //管理员或用户登录 List<Map<String,String>>list=fun.login(sql,parames); if(list!=null){ Map<String,String>map=list.get(0); if(username.equals(map.get("name"))&&password.equals(map.get("password"))){ System.out.println("登录成功~~~"); //判断是管理员还是用户登录 if(map.get("level").equals("1")){ System.out.println("管理员登录成功!!!~~~"); HttpSessionsession=request.getSession(); session.setAttribute("username",username); request.getRequestDispatcher("main2.jsp").forward(request,response); }else{ System.out.println("用户登录成功!!!~~~"); HttpSessionsession=request.getSession(); session.setAttribute("username",username); session.setAttribute("psw",password); request.getRequestDispatcher("main3.jsp").forward(request,response); } }else{ System.out.println("登录失败~~~~~"); response.sendRedirect("/login.html"); } } else{ System.out.println("list为空,用户名或密码错误!"); response.sendRedirect("login.html"); } } }登录成功跳转到系统主界面:图4-1主界面登录失败跳转到登录界面:图4-2登录界面4.2航班管理模块航班管理包含对航班信息系的查询、添加、修改和删除。在航班信息查询中又分为按航班号和起飞地进行查询。航班按航班号条件查询通过调用selectByhangbanhao方法,把按查询的条件选择航班号和查询的条件值航班值作为参数传递给selectByhangbanhao方法进行查询。图4-3按航班号查询 /** *根据航班号查询 */ publicvoidselectByhangbanhao(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringchaxun=request.getParameter("chaxun"); Stringsql="select*fromflightinfowhereid=?"; if(chaxun==null||chaxun==""){ Objectparames[]=newObject[]{chaxun}; List<Map<String,String>>list=fun.selectFlight(sql,parames); if(list!=null){ System.out.println("根据航班号查询成功~~~"); request.setAttribute("flightList",list); request.getRequestDispatcher("user_adminlogin/selectFlight.jsp").forward(request,response); } } }航班按起飞地条件查询通过调用selectByqifeidi方法,把按查询的条件选择起飞地和查询的条件值起飞地值作为参数传递给selectByqifeidi方法进行查询。图4-4按航班号查询 /** *根据起飞地查询 */ publicvoidselectByqifeidi(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException,SQLException{ request.setCharacterEncoding("utf-8"); response.setContentType("txt/html;charset=utf-8"); //转换编码格式,将前台输入数据的编码改为UTF-8; Stringchaxun=request.getParameter("chaxun"); System.out.println("按照起飞地【"+chaxun+"】查询"); Stringsql="select*fromflightinfowherestart=?"; if(chaxun==null||chaxun==""){ //查询全部记录 request.getRequestDispatcher("adminServlet?caozuo=flightSelect").forward(request,response); }else{ Objectparames[]=newObject[]{chaxun}; List<Map<String,String>>list=fun.selectFlight(sql,parames); if(list!=null){ System.out.println("根据起飞地查询成功~~~"); request.setAttribute("flightList",list); request.getRequestDispatcher("user_adminlogin/selectFlight.jsp").forward(request,response); } } }把添加航班的信息通过放在要跳转的URL之后传递到Servlet中,在Servlet中进行判断选择调用flightInsert方法,通过INSERT语句向数据库中插入数据,实现添加航班。图4-5添加航班 /** *航班添加 */ publicvoidflightInsert(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringstart=request.getParameter("start"); Stringend=request.getParameter("end"); StringleaveTime=request.getParameter("leaveTime"); Stringsql="insertintoflightinfovalue(?,?,?,?,?,?)"; Objectparames[]=newObject[]{id,airfirm,start,end,leaveTime,arriveTime}; inti=fun.insert(sql,parames); response.sendRedirect("user_adminlogin/newWin.jsp?winValue="+winValue); }}图4-6删除航班删除航班是通过传递航班的id号,来确定这条航班记录。在调用flightDelete方法通过DELETE语句删除记录,实现航班删除。/** *航班删除 */ publicvoidflightDelete(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,IOException{ Stringid=request.getParameter("id"); Stringsql="deletefromflightinfowhereid=?"; inti=fun.delete(sql,parames); if(i!=-1){ System.out.println("删除航班成功~~~"); response.sendRedirect("adminServlet?caozuo=flightSelect"); } }图4-7修改航班 /** *航班修改 */ privatevoidflightUpdate(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,IOException{ Stringid1=request.getParameter("id1"); Stringid=request.getParameter("id"); Stringairfirm=request.getParameter("airfirm"); Stringstart=request.getParameter("start"); Stringend=request.getParameter("end"); StringleaveTime=request.getParameter("leaveTime"); StringarriveTime=request.getParameter("arriveTime"); Stringsql="updateflightinfosetid=?,airfirm=?,start=?,end=?,leaveTime=?,arriveTime=?whereid=?"; Objectparames[]=newObject[]{id,airfirm,start,end,leaveTime,arriveTime,id1}; inti=fun.update(sql,parames); response.sendRedirect("user_adminlogin/newWin.jsp?winValue="+winValue); } }4.3机票预订模块用户点击“机票预订”菜单,会进入到机票预订界面。页面中会显示所以机票的信息,用户可以根据起飞地、到达地和日期,进行查询筛选出所需机票。用户点击“订票”按钮完成交易。完成订票后会把机票的票数修改为原来的值减一,然后在用户订单表中插入一条记录。图4-8机票预订图4-9机票售完提示4.4我的订单模块我的订单是根据用户预订机票产生的订单信息,用户可以对订单进行“改签”和“退票”操作。改签完成后会弹出改签前后票价信息的提示。改签调用gaiQian方法,在这个方法中把原记录删除再添加一条新纪录。图4-10我的订单图4-11改签后价格提示4.5修改密码模块点击“修改密码”菜单,会弹出窗口修改密码。用户需要输入原密码和两次新密码。通过调用updatePsw方法,在这个方法中用UPDATE语句对密码信息进行修改。图4-12修改用户密码 /** *修改密码 */ publicvoidupdatePsw(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ StringoldPsw=request.getParameter("oldPsw");//获得原密码 StringnewPsw=request.getParameter("newPsw"); //获得新密码 HttpSessionsession=request.getSession(); Stringname=(String)session.getAttribute("username"); Stringsql="updateuserinfosetpassword=?wherepassword=?andname=?"; Objectparames[]=newObject[]{newPsw,oldPsw,name}; inti=fun.update(sql,parames); response.sendRedirect("user_userlogin/newWin.jsp?"); }4.6用户注册模块用户注册可以在登录界面点击“快速注册”进行注册或者在直接进入系统化点击菜单里的“注册”按钮注册用户。实现原理就是调用zhuCe方法,把注册的信息传递到zhuCe方法,然后INSERT到数据库中。图4-13修改用户密码 /** *用户注册 */ publicvoidzhuCe(HttpServletRequestrequest,HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringname=request.getParameter("name"); Stringpassword=request.getParameter("password"); Stringtel=request.getParameter("tel"); Stringidcard=request.getParameter("idcard"); Stringsql="insertintouserinfo(id,name,password,sex,tel,idcard)value(?,?,?,?,?,?)"; Objectparames[]=newObject[]{id,name,password,sex,tel,idcard}; inti=fun.insert(sql,parames); request.getRequestDispatcher("login.html").forward(request,response); } }4.7用户管理模块用户管理员登录后,可进行用户信息查询以及用户信息的删除。图4-14用户信息管理 /** *用户删除 */ publicvoiduserDelete(HttpServletRequestrequest,HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringsql="deletefromuserinfowhereid=?"; Objectparames[]=newObject[]{id}; inti=fun.delete(sql,parames); if(i!=-1){request.getRequestDispatcher("adminServlet?caozuo=userSelect").forward(request,response); } }5.系统测试5.1系统测试的概念软件测试不仅仅包括程序测试,而是贯穿于整个软件开发的全过程,也就是说其对象除了包括需求分析所获得的开发成果、还包括概要设计所获得的开发成果、以及包括详细设计所获得的开发成果、和包括编码实现所获得的开发成果[10]。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。系统测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。对象不仅仅包括需测试的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等比较常见的、典型的系统测试包括恢复测试、安全测试、压力测试[11]。下面对这几种测试进行一一介绍:1)恢复测试恢复测试作为一种系统测试,主要关注导致软件运行失败的各种条件,并验证其恢复过程能否正确执行。在特定情况下,系统需具备容错能力。另外,系统失效必须在规定时间段内被更正,否则将会导致严重的经济损失。2)安全测试安全测试用来验证系统内部的保护机制,以防止非法侵入。在安全测试中,测试人员扮演试图侵入系统的角色,采用各种办法试图突破防线。因此系统安全设计的准则是要想方设法使侵入系统所需的代价更加昂贵。3)压力测试压力测试是指在正常资源下使用异常的访问量、频率或数据量来执行系统。139845.2测试策略及结果5.2.1功能的测试概述:功能测试也称为黑盒测试,就是运行整个系统测试各模块功能与预期的功能效果对比是否相同,在测试过程中把整个程序看成一个打不开的黑盒,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。就是按照开发的功能分析和各个模块的功能设计进行测试,主要针对软件界面和软件功能进行测试。功能测试既是测试的重点,也是测试的难点[12]。目标:功能测试的目标或者说过程就是分别使用有效的和无效的数据测试各个功能模块,测试输入为有效数据时,能否得到与预期结果相符的结果,测试输入为无效数据时,能否得到与预期相符的提示信息或者警告信息。结果:测试各模块,结果达到目标。下面以机票预订和我的订单功能模块的测试为例,该模块测试用例、测试结果如下:表4-1机票预订和我的订单功能测试用例用例机票预订,我的订单测试类名称dingPiao、ticketSelecttuiPiao、gaiQian测试目的验证该模块的功能测试环境Windows7、火狐浏览器、IE浏览器、360浏览器测试环境MyEclipse9.0、MySQL数据库、测试用例标号测试项目输入描述预期结果实际结果1查询机票输入正确的机票信息查询出对应条件的机票信息一致2查询机票点击“机票预订”菜单按钮查询出所有机票信息的记录一致3查询机票起飞地错误结果为空一致4查询机票目的地错误结果为空一致5查询机票日期错误结果为空一致6查询机票所有条件为空结果为空一致7机票预订票数为0提示机票已卖完一致8机票预订机票有剩余订票成功,票数减1一致9机票预订重复购买提示机票不能重复购买一致10退票点击退票退票成功一致11退票飞机起飞前三十分点击退票退票失败一致12改签点击改签后选择预定的机票改签成功一致13改签完成改签显示改签前后机票价格一致14改签点击改签后不选择预定的机票改签失败一致15改签点击改签后进行其他操作改签失败一致16改签点击改签后点击退出系统按钮退出当前系统成功,改签失败一致5.2.2其他测试1、性能的测试概述:性能的测试是为了获得系统的最大负载和最大处理能力等等数据,其主要是通过评测和评估非功能性需求来获得的,包括评测和评估系统处理速度、系统响应时间以及其他与时间相关的数据[13]。目标:性能的测试的目标是测试在正常负荷下运行的系统的预期工作量。结果:经过测试,得出系统平均响应时间、处理速度、最大负载等性能达到目标。2、压力的测试概述:压力的测试也就是系统承受压力的测试,既有高压测试又有负载测试。目标:压力的测试主要就是要掌握系统的安全运行性能,这就需要了解系统在长时间处理多个用户相同的且性能最坏的业务的情况下的安全运行边界条件,这就需要测试系统在给定时间内能够持续处理的最大工作量或最大负载。结果:经过测试,系统在所需最大负荷两倍的条件下,仍能够正常运转。5、配置的测试概述:配置的测试主要是确认系统的使用范围,这需要测试系统在不同的软件配置中的运行情况以及在不同的硬件配置中的运行情况[14];目标:配置的测试的目标就是测试系统在不同条件下是否能够正常运行,这就包括测试系统在所需的软件配置以及所需的硬件配置中,也就是说在正常配置下,运行是否正常。测试系统的兼容性,也就是测试在其他版本的浏览器操作或者在其他系统平台的异常情况下,系统是否兼容,也就是说系统是否能够正常运行[15]。结果:系统在主流操作系统WindowsXP、Windows7,火狐浏览器,IE浏览器,360浏览器以及其他操作系统和浏览器上都可以正常运行。6.结语经过两个月的忙碌整个毕业设计和论文已全部完成,总结这两个月的经历感觉真的学到了很多。从最开始的不知从何下手到最后的全部完成,这中间我付出了很多努力同时也收获了很多。这次的毕业设计不仅仅是对我大学四年所学的总结,还是对我能力的一个考验。因为想要完成一个优秀的毕业设计仅依靠大学中所学习到知识是完全不够的,但我经过四年的学习也具备了自学的能力,我通过查找相关的资料书籍以及用过网络资源获取来帮助我完成毕业设计。拿到这个毕业设计题目,首先我们从系统的需求分析入手,我们将系统要实现的功能和估计要用到的相关技术及相关技术难点进行分析。接下来就是进行系统的总体设计,首先将系统的结构进行分析,分析这个系统需要完成哪些功能,将这些功能划分为多个模块,这样在设计上我们就将软件分成一个立体的,低偶合的一个一个的小模块。我先从简单的模块开始着手编写代码,然后一点点的完成整个项目的开发。
本次系统设计中我也遇到了很到问题,主要是缺少项目经验。有些只是可能会但是在实际项目开发中一不小心就会出错。还有在做系统时不能把以前学过的知识都综合到一起。每当遇到这样或那样的问题时,我都通过网上查阅相关资料,一些没有接触过的知识也是从头开始学起,在这个过程中让我的进步非常大通过解决这一个个难点不仅是对我知识的积累也是对我学习能力的提高,这一点对我今后的工作有很大的帮助。另外在这次做系统的过程中,我认为软件最难的是设计,设计有了,实现是很简单的,所以也为我指明了以后学习的方向。
系统中难免有不尽人意之处,如系统的安全性能有待提高,系统的通用性也需要完善。由于本人的知识水平和能力有限,本文的疏漏和不当之处在所难免,敬请指正。我也会努力尽量完善所有编写的功能模块,完美的完成这个毕业设计,为我的大学划上一个圆满的句号。参考文献[1]良葛格.Java学习笔记(第一版)[M].北京:清华大学出版社,2006.[2]孙卫琴.精通Hibernate:Java面向持久化技术详解[M].北京:电子工业出版社,2007.[3]卢晓庆.基于Web的交通旅游订票系统的设计与实现[D].大连:大连理工大学,2004.[4]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2003.[5]张水平.数据库应用技术[M].西安:西北工业大学出版社,2005.[6]杨小平.VisualC++项目案例导航[M].北京:科学出版社,2005.[7]李闽溟,吴继刚.数据库系统开发实例[M].北京:人民邮电出版社,2002.[8]郑阿奇,丁有和.VisualC++教程[M].北京:机械工业出版社,2004.[9]蔡学镛.Java程序员的心声第2版[M].北京:电子工业出版社,2004.[10]姜志强.Java语言程序设计[M].北京:电子工业出版社,2007.[11]田苗苗.基于面向对象技术开发[J].面向对象研究,2004,(02):134-139.[12]BruceEckel.《ThinkinginJava4》[M].American:PrenticeHallPTR,2007.[13]A.Parasan.《marketingresearch》[M].American:HoughtonCompany,2007.[14]MichaclHammer.《ReengineeringtheCorporation》[M].American:HarperBusiness,1993.附录ADO层JDBC建立数据库的连接:packagecom.nite.dao;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importorg.junit.Test;/***@author:刘贤龙*@功能:JDBC*@时间:2015.3*/publicclassDao{ Connectioncon=null; PreparedStatementps=null; ResultSetrs=null;publicDao(){} static{ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } /** *数据库连接 *@throwsSQLException */ @Test publicvoidgetConnect()throwsSQLException{ Stringurl="jdbc:mysql://localhost:3306/ticketsystem"; Stringuser="root"; Stringpassword="liu"; con=DriverManager.getConnection(url,user,password); if(con!=null){ System.out.println("连接数据库成功"); }else{ System.out.println("连接数据库失败"); } } /** *执行sql *return:影响行数 *@throwsSQLException */ publicintdoSql(Stringsql,Objectparames[])throwsSQLException{ getConnect(); ps=con.prepareStatement(sql); for(inti=0;i<parames.length;i++){ ps.setObject(i+1,parames[i]); } ps.execute(); inti=ps.getUpdateCount(); returni; } /** *获得结果集 *@throwsSQLException *return:结果集 */ publicResultSetgetRs()throwsSQLException{ rs=ps.getResultSet(); returnrs; } /** *关闭资源 *@throwsSQLException */ publicvoidgetClose()throwsSQLException{ if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(con!=null) con.close(); }}2、SERVICE(业务逻辑层)层处理业务逻辑:packagecom.nite.service;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.nite.dao.Dao;publicclassFunction{ privateDaodao=newDao(); /** *查询航班 *@paramsql *@paramparames *@return *@throwsSQLException */ publicList<Map<String,String>>selectFlight(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("结果集中有"+i+"条记录"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringairfirm=rs.getString(2); Stringstart=rs.getString(3); Stringend=rs.getString(4); StringleaveTime=rs.getString(5); StringarriveTime=rs.getString(6); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("airfirm",airfirm); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); list.add(map); } }else{ list=null; } dao.getClose(); returnlist; } /** *查询机票 *@throwsSQLException */ publicList<Map<String,String>>selectTicket(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("结果集中有"+i+"条记录"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringstart=rs.getString(2); Stringend=rs.getString(3); StringleaveTime=rs.getString(4); StringarriveTime=rs.getString(5); Stringtime=rs.getString(6); StringseatLevel=rs.getString(7); Stringfare=rs.getString(8); Stringdiscount=rs.getString(9); Stringflight_id=rs.getString(10); StringticketNum=rs.getString(11); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); map.put("time",time); map.put("seatLevel",seatLevel); map.put("fare",fare); map.put("discount",discount); map.put("flight_id",flight_id); map.put("ticketNum",ticketNum); list.add(map); } }else{ list=null; } dao.getClose(); returnlist; } /** *添加 *@paramsql *@paramparames *@return *@throwsSQLException */ publicintinsert(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影响行数"+i); dao.getClose(); returni; } /** *删除 *@paramsql *@paramparames *@throwsSQLException */ publicintdelete(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影响行数:"+i); dao.getClose(); returni; } /** *修改 *@paramsql *@paramparames *@throwsSQLException */ publicintupdate(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影响行数:"+i); dao.getClose(); returni; } /** *登录 *@throwsSQLException */ publicList<Map<String,String>>login(Stringsql,Objectparames[])throwsSQLException{ dao.doSql(sql,parames); ResultSetrs=dao.getRs(); List<Map<String,String>>list=newArrayList<Map<String,String>>(); rs.last(); inti=rs.getRow(); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringname=rs.getString("name"); Stringpassword=rs.getString("password"); Stringlevel=rs.getString("level"); Map<String,String>map=newHashMap<String,String>(); map.put("name",name); map.put("password",password); map.put("level",level); list.add(map); } }else{ list=null; } returnlist; } /** *用户查询 *@paramsql *@paramparames *@throwsSQLException */ publicList<Map<String,String>>selectUser(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringname=rs.getString(2); Stringpassword=rs.getString("password"); Stringsex=rs.getString(4); Stringtel=rs.getString(5); Stringidcard=rs.getString(6); Stringlevel=rs.getString("level"); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("name",name); map.put("password",password); map.put("sex",sex); map.put("tel",tel); map.put("idcard",idcard); map.put("level",level); list.add(map); } }else{ list=null; } returnlist; } /** *查询订单 *@throwsSQLException */ publicList<Map<String,String>>selectMyTicket(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("结果集中有"+i+"条记录"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringstart=rs.getString(2); Stringend=rs.getString(3); StringleaveTime=rs.getString(4); StringarriveTime=rs.getString(5); Stringtime=rs.getString(6); StringseatLevel=rs.getString(7); Stringfare=rs.getString(8); Stringname=rs.getString(9); Stringidcard=rs.getString(10); Stringflight_id=rs.getString(11); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); map.put("time",time); map.put("seatLevel",seatLevel); map.put("fare",fare); map.put("name",name); map
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业租赁安全合同模板
- 消防排烟合同模板
- 泥水装修服务合同范例
- 退换货协议承诺书退货协议书合同
- 紧固件采购合同范例
- 承包山地挖鱼塘合同范例
- 全新家政钟点工劳务合同下载
- 家庭护工雇佣合同
- 咨询合作协议书合同范本范本版
- 购销机械合同范本
- 《MBTI职业性格测试93题》
- 互联网导论智慧树知到答案章节测试2023年上海第二工业大学
- 防火门和防火卷帘的构造及安装标准
- 玩转PPT-多媒体课件制作实战智慧树知到答案章节测试2023年
- 蹲踞式起跑 优质课比赛一等奖
- 表单+药品管理检查记录表
- GB/T 15242.3-2021液压缸活塞和活塞杆动密封装置尺寸系列第3部分:同轴密封件沟槽尺寸系列和公差
- 大学生积极心理健康教育理论与实践课件积极体验
- 中央厨房卫生标准及5S检查表
- 习作我最喜欢的玩具说课稿
- 统编初中语文教材七年级上册第三单元解析及教学建议
评论
0/150
提交评论