基于jsp的航空票务系统论文.doc
- 本科生毕业论文设计题目:基于JAVA的航空票务 系统的设计与实现 摘 要现如今的航空售票业务是一个高度依赖信息的行业。互联网信息技术的飞速开展不仅使航空售票工作者逐渐摆脱了繁重的手工劳动、提高了工作效率,而且推着航空事业向现代化管理迈进。所以航空票务系统的实现在现实生活中尤为重要。基于JAVA的航空票务系统就是使用JAVA实现在网页上进展航空机票的交易和管理。通过本系统不仅可以进展售票工作,用户还可进展改签和退票等功能,系统的后台管理还可以对旅客情况和航班和机票的信息进展查询,并可根据不同的情况随时进展进展增加,修改,删除等工作,使售票人员能够有效的对机票进展控制和管理。极大程度的节约了本钱,并为用户提供更加快捷、简便的效劳。关键词:航空票务;管理系统;JAVA. z.-AbstractThe 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. So it is very important realize airline ticketing system in our life.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. Key Words:Air Ticketing; Management System; JAVA. z.-目 录摘 要IAbstractII1.引言11.1 开发背景及意义11.2 开发工具和环境配置11.2.1 开发工具11.2.2 环境配置21.3 可行性研究42.需求分析52.1 功能需求52.2 性能需求53.系统设计63.1 数据库设计63.1.1 数据库表63.1.2 数据库的概念构造设计63.1.3 数据库的逻辑构造设计83.2 功能模块概要设计103.2.1 模块设计103.2.2 系统流程图104.详细设计114.1 登录模块114.2 航班管理模块134.3 机票预订模块174.4 我的订单模块184.5 修改密码模块184.6 用户注册模块194.7 用户管理模块205.系统测试215.1 系统测试的概念215.2 测试策略及结果215.2.1 功能的测试215.2.2 其他测试236.结语24参考文献25附 录26. z.-1.引言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 应用效劳器,属于轻量级应用效劳. z.-器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试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-3 Tomcat配置3、使用第三方工具连接数据库:下载、安装MySQL客户端软件Navicat for Mysql,双击翻开工具 - 点击"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)这些实体模型的含义如下所述。1flightinfo:代表一个航班信息实体:包括航班号(id)、航空公司(airfirm)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime)。2userinfo:代表一个用户或管理员的信息实体:包括用户编号id、用户名(name),密码(password),性别(sex),手机(tel),号(idcard),用户权限(level)。3ticketinfo:代表每一机票的信息实体:机票编号(id)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime),日期(time),座位等级(seatLeval),票价(fare),discount(折扣),航班号(flight_id)、机票剩余数量(ticketNum)。4user_ticketinfo:代表一个用户购置机票的信息实体:机票编号(id)、起飞地(start)、到达地(end)、起飞时间(leaveTime)、到达时间(arriveTime),日期(time),座位等级(seatLeval),票价(fare),用户名(name)、号(idcard)。3.1.2数据库的概念构造设计概念构造设计将反映现实世界中的实体、属性和它们之间的关系,建立原始数据形式。概念构造设计的目标是产生反映系统信息需求的整体数据库概念构造8,描述工具主要有实体图:图3-1 航班信息实体图3-2 用户信息实体图3-3 机票信息实体图3-4 订单信息实体图3-5 ER图3.1.3数据库的逻辑构造设计数据库逻辑构造设计是描述数据库的组织构造、生成数据库模式。数据库模式定义以下容:存储什么信息、数据的组织、需要的表、列的定义9。本课题使用的是MySQL数据库,根据上述建立的E-R图,经设计得到如下的数据表:(1) flightinfo(航班信息表)航班信息表用来保存航班的信息,如图3-5所示。(2) userinfo(用户信息表)用户信息表用于记录用户的信息情况,如图3-6所示。(3) ticketinfo(机票信息表)机票信息表用来保存机票的信息,如图3-7所示。(4) user_ticketinfo(订单信息表)订单信息表用于记录每个用户订购机票的信息,如图3-8所示。图3-6 flightinfo(航班信息表)图3-7 userinfo(用户信息表)图3-8 ticketinfo(机票信息表)图3-9 user_ticketinfo(订单信息表)3.2 功能模块概要设计3.2.1模块设计用户登录模块 实现了对用户使用系统的检验工作。用户又分为不同的权限,管理员登陆,用户登录和不进展登录直接进入。对不同用户进入系统所赋予的权限也不同,增加了系统的平安性。用户管理模块管理员登陆的权限,对系统登录用户的查看和删除操作。航班管理模块包含对航班信息的查询,所有用户都拥有的权限。对航班信息的添加、修改和删除这是系统管理员的操作权限。机票管理模块包含对机票信息的查询,所有用户都拥有的权限。对机票信息的添加、修改和删除这是系统管理员的操作权限。对机票的预定这是登录用户的权限。我的订单模块包含对用户订单信息的查询,并且包含对机票的退订以及改签权限,改签后会提示改签前后机票价格信息。修改密码模块对于已登录用户可进展密码修改。登录和注册模块这是对进入系统没有登录的用户的权限。用户点击登录按钮跳转到登陆界面。点击注册进展注册,用户注册包含对用户信息的验证。3.2.2系统流程图图3-10系统走向图4. 详细设计 本系统使用的是JAVA的SERVLET和JSP技术,所以系统的设计又分为前端JSP页面设计和后端业务逻辑处理。下面的模块设计主要从前端JSP页面和后端中的SERVLET控制层两部局部进展讲解。4.1登录模块 登录模块进展登录用户的用户名和密码进展验证,点击"快速注册还能跳转到注册界面进展用户注册。 登录用户登录后,传递用户填写的用户名和密码进入到UserServlet中的loginStu方法进展用户身份验证,如果用户名和密码输入错误那么跳转到登录页面。用户登录正确那么跳转到系统主界面。实现代码如下:/* * 用户登录 */public void loginStu( ServletRequest request, ServletResponse response throws SQLException, ServletException, IOException String username = request.getParameter("username");String password = request.getParameter("password");String sql = "select * from userinfo where name=" and password=""Object parames = new Objectusername,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("管理员登录成功!"); Session session = request.getSession();session.setAttribute("username", username);request.getRequestDispatcher("main2.jsp").forward(request, response);elseSystem.out.println("用户登录成功!"); Session session = request.getSession();session.setAttribute("username", username);session.setAttribute("psw", password);request.getRequestDispatcher("main3.jsp").forward(request, response);elseSystem.out.println("登录失败");response.sendRedirect("/login.html");elseSystem.out.println("list为空,用户名或密码错误!");response.sendRedirect("login.html");1、 登录成功跳转到系统主界面:图4-1 主界面2、 登录失败跳转到登录界面:图4-2 登录界面4.2航班管理模块航班管理包含对航班信息系的查询、添加、修改和删除。在航班信息查询中又分为按航班号和起飞地进展查询。航班按航班号条件查询通过调用selectByhangbanhao方法,把按查询的条件选择航班号和查询的条件值航班值作为参数传递给selectByhangbanhao方法进展查询。图4-3 按航班号查询/* * 根据航班号查询 */public void selectByhangbanhao( ServletRequest request, ServletResponse response) throws SQLException, ServletException, IOException String chaxun = request.getParameter("chaxun");String sql = "select * from flightinfo where id=""if(chaxun=null | chaxun="")Object parames = new Objectchaxun;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 按航班号查询/* * 根据起飞地查询 */public void selectByqifeidi( ServletRequest request, ServletResponse response) throws ServletException, IOException, SQLException request.setCharacterEncoding("utf-8");response.setContentType("txt/html;charset=utf-8");/转换编码格式,将前台输入数据的编码改为UTF-8;String chaxun = request.getParameter("chaxun");System.out.println("按照起飞地【"+chaxun+"】查询");String sql = "select * from flightinfo where start=""if(chaxun=null | chaxun="")/查询全部记录request.getRequestDispatcher("adminServlet"caozuo=flightSelect").forward(request, response);elseObject parames = new Objectchaxun;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 添加航班/* * 航班添加 */public void flightInsert( ServletRequest request, ServletResponse response) throws SQLException, ServletException, IOException String id = request.getParameter("id");String start = request.getParameter("start");String end = request.getParameter("end");String leaveTime = request.getParameter("leaveTime");String sql = "insert into flightinfo value(",",",",",")"Object parames = new Objectid,airfirm,start,end,leaveTime,arriveTime;int i = fun.insert(sql, parames);response.sendRedirect("user_adminlogin/newWin.jsp"winValue="+winValue);图4-6 删除航班 删除航班是通过传递航班的id号,来确定这条航班记录。在调用flightDelete方法通过DELETE语句删除记录,实现航班删除。 /* * 航班删除 */public void flightDelete( ServletRequest request, ServletResponse response) throws SQLException, IOException String id = request.getParameter("id");String sql = "delete from flightinfo where id=""int i = fun.delete(sql, parames);if(i!=-1)System.out.println("删除航班成功");response.sendRedirect("adminServlet"caozuo=flightSelect");图4-7 修改航班/* * 航班修改 */private void flightUpdate( ServletRequest request, ServletResponse response) throws SQLException, IOException String id1 = request.getParameter("id1");String id = request.getParameter("id");String airfirm = request.getParameter("airfirm");String start = request.getParameter("start");String end = request.getParameter("end");String leaveTime = request.getParameter("leaveTime");String arriveTime = request.getParameter("arriveTime");String sql = "update flightinfo set id=",airfirm=",start=", end=",leaveTime=",arriveTime=" where id=""Object parames = new Objectid,airfirm,start,end,leaveTime,arriveTime,id1;int i = 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 修改用户密码/* * 修改密码 */public void updatePsw( ServletRequest request, ServletResponse response) throws SQLException, ServletException, IOException String oldPsw = request.getParameter("oldPsw"); /获得原密码String newPsw = request.getParameter("newPsw"); /获得新密码 Session session = request.getSession();String name = (String) session.getAttribute("username");String sql = "update userinfo set password=" where password=" and name=""Object parames = new ObjectnewPsw,oldPsw,name;int i = fun.update(sql, parames);response.sendRedirect("user_userlogin/newWin.jsp"");4.6用户注册模块用户注册可以在登录界面点击"快速注册进展注册或者在直接进入系统化点击菜单里的"注册按钮注册用户。实现原理就是调用zhuCe方法,把注册的信息传递到zhuCe方法,然后INSERT到数据库中。图4-13 修改用户密码/* * 用户注册 */public void zhuCe( ServletRequest request, ServletResponse response) throws SQLException, ServletException, IOException String id = request.getParameter("id");String name = request.getParameter("name");String password = request.getParameter("password");String tel = request.getParameter("tel");String idcard = request.getParameter("idcard");String sql = "insert into userinfo(id,name,password,sex,tel,idcard) value(",",",",",")"Object parames = new Objectid,name,password,sex,tel,idcard;int i = fun.insert(sql, parames);request.getRequestDispatcher("login.html").forward(request, response);4.7用户管理模块用户管理员登录后,可进展用户信息查询以及用户信息的删除。图4-14 用户信息管理/* * 用户删除 */public void userDelete( ServletRequest request, ServletResponse response) throws SQLException, ServletException, IOException String id = request.getParameter("id");String sql = "delete from userinfo where id=""Object parames = new Objectid;int i = fun.delete(sql, parames);if(i!=-1)request.getRequestDispatcher("adminServlet"caozuo=userSelect").forward(request, response);5. 系统测试5.1系统测试的概念软件测试不仅仅包括程序测试,而是贯穿于整个软件开发的全过程,也就是说其对象除了包括需求分析所获得的开发成果、还包括概要设计所获得的开发成果、以及包括详细设计所获得的开发成果、和包括编码实现所获得的开发成果10。系统测试是针对整个产品系统进展的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。系统测试发现问题之后要经过调试找出错误原因和位置,然后进展改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。对象不仅仅包括需测试的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等 比拟常见的、典型的系统测试包括恢复测试、平安测试、压力测试11。下面对这几种测试进展一一介绍:1恢复测试恢复测试作为一种系统测试,主要关注导致软件运行失败的各种条件,并验证其恢复过程能否正确执行。在特定情况下,系统需具备容错能力。另外,系统失效必须在规定时间段被更正,否那么将会导致严重的经济损失。2平安测试平安测试用来验证系统部的保护机制,以防止非法侵入。在平安测试中,测试人员扮演试图侵入