航空订票系统姓名学号班级指导教师项目名称组长和组员开设学期2018–2019第二学期评定成绩评定人签字评定日期****学院2019年6月11.系统总体概述以“航空订票系统”为主题,学习好和巩固好我们学到的知识,实现航空订票系统的基本功能,要求如下:(1)用户:可进行注册。(2)注册的用户:用户可以登录;登录后可浏览和航班;可以将航班加入购物车,进行处理;可以对订单进行处理,如订票和退票等操作;可修改自己的个人信息。(3)管理员:对航班进行处理,添加,修改时间等等。2.系统需求分析与设计1.系统目标系统的开发目标是充分利用计算机和网络的技术,让用户在足不出户的情况下就能选择和购买航班机票。2.功能需求系统功能主要分为以下两个部分:(1)普通用户可以享有的功能,包括用户注册、登录、修改和完善个人资料、浏览航班、将机票加入购物车,对购物车中的机票进行处理,对机票进行查询和退票等操作。(2)系统管理员的管理,管理员可以对航班进行添加、删除、更新。本部分内容全组成员是一样的,请全组成员共同来完成。2.1系统总体功能描述1.系统用例图用例图如A1-1所示A1-1用例图22.用户注册要想正常的使用本网站,就要先进行用户注册,需要填写用户名、密码、电话号码、邮箱等信息问题。用例图说明如下:用户注册用例编号:UserCase-01参与者:所有用户前置条件无后置条件系统接收用户的注册主干过程1.用户填入正确的需要注册信息分支过程无异常1.输入的注册信息格式不正确取包含用例无3.登录用户经过注册后,使用已经注册的用户名和密码登录。登录成功后,可进行下一步的操作。用例图说明如下:登录用例编号:UserCase-02参与者:已经完成注册的用户前置条件用户完成注册后置条件客户进入航空订票系统主界面主干过程已经注册的用户输入自己的用户号和密码用户点击登录键登录系统进入了用户主页面分支过程无异常用户不存在密码不正确包含用例无4.修改密码用户登录成功后修改以前的密码。修改密码用例编号:UserCase-03参与者:已经完成注册的用户前置条件用户登录了航空订票系统后置条件系统接收了客户修改和完善资料的信息主干过程用户进入登录界面进入密码修改界面系统将修改后的密码写入到数据库中去分支过程无异常系统修改数据库操作系统失败3包含用例无5.修改资料用户在登录成功后可进入自己的个人页面来修改自己的个人信息。用例图说明如下:修改完善资料用例编号:UserCase-04参与者:已经完成注册的用户前置条件用户登录了航空订票系统后置条件系统接收了客户修改和完善资料的信息主干过程用户登录后进入了书店页面用户修改和完善自己的资料系统将修改后的资料信息写入到数据库中去分支过程无异常修改数据库操作系统失败包含用例无6.浏览所有航班可以对网站的航班信息进行随意的浏览。用例图说明如下:浏览、搜索用例编号:UserCase-05参与者:已经完成注册的用户前置条件用户登录了网上书店系统后置条件无主干过程用户成功登录航空订票系统用户对航班信息进行查找分支过程无异常用户登录不成功包含用例无7.预定机票已经登录的用户选中了某一航班,可以把其加入购物车。用例图说明如下:购物车用例编号:UserCase-06参与者:已经完成注册的用户前置条件成功登录了航空订票系统后置条件购物车中有机票主干过程用户成功登录了航空订票系统用户查看航班信息用户选择某一航班加入购物车4对购物车中的信息进行处理分支过程无异常航班机票已经售完包含用例8.购物车用户可以对订单进行查询,还可以对购物车中的机票进行退票。用例图说明如下:订单用例编号:UserCase-07参与者:已经完成注册的用户前置条件对购物车中的机票进行了确认后置条件无主干过程用户成功登录了航空订票系统对购物车中的机票进行了确认用户对对购物车中的机票进行退票分支过程无异常退票数目不足包含用例无9.管理员管理员可以对航班进行管理,添加航班、修改航班时间,安排航班等等。用例图说明如下:管理用例编号:UserCase-08参与者:有管理权限的人前置条件进入管理员页面,有管理员权限后置条件管理员对航班作出了处理主干过程成功登录了航空订票系统管理员进入后台管理界面管理员调用“安排航班”用例管理员对航班信息进行处理系统显示操作成功分支过程无异常系统无法对航班信息进行处理,显示操作失败包含用例安排航班信息52.2系统功能的业务流程业务流程图2.3系统功能模块设计任务本系统包含两个子系统,一个是用户子系统,另一个是管理员子系统,管理员用户子系统又称为后台管理子系统。每个子系统包换了若干子功能模块,每个子功能模块完成相应的处理操作功能。其中管理员的权限是大于票据信息用户的。基本设计流程如下图所示:用户子系统功能模块图本系统将用户子系统分为四个模块。分别对应用户的会员注册,查询航班和机票预订和机票退订。用户操作时,系统自动判断用户所想要调用的功能子模块,并提交给用户,在用户完成操作后可以退出系统。四个模块的组成能基本满足用户的需求。用户在使用本系统时需要进行会员注册,注册的同时需要先进行身份信息的验证,以保证用户信息的安全,同时在用户自己的权限内能够更加方便快捷地使用本系统。在注册完成后,用户可以根据自己的需求,查询现有的航班并订购机票。(可以订购多张机票)用户订购多长机票时,用户看见自己以购的机票,验证是否准确。当用户需要退订机票时也可时进行退订来满足用户需求。6注册:用户完成注册使用系统,后台获得用户信息。查询:根据航班号、起飞地点以及目的地查看票类信息。订票:根据出发日期和航班信息订机票,一次可购买多张机票。退票:根据用户需求退票,同时将数据传送到后台数据库。管理员子系统功能图管理员子系统需要管理员对后台进行操作,划分出三个模块,系统会有一个专门的管理员通道。管理员操作时,能看到后台实时数据,提供相应的权限操作。管理员在系统时也需要进行登入操作,验证身份信息,登入后。同时实现的对航班和后台数据的管理。管理员可以根据航班号,始发地点和目的地点来制定航班,设置航班起飞日期,安排航班起飞。制定航班:设置航班号、起飞地点、目的地点等信息。安排航班:安排航班起飞日期。管理航班:安排某一航班起飞。2.4数据库设计1、下图所示的是航空订票系统的各个实体属性的E-R图:用户信息:user表userEmailUsernamePasswordTelNameSex7航班订票信息:din表航班安排信息:sch表2、下图所示的是航空订票系统的数据模型的E-R图:会员用户管理员航班订票(退票)安排用户ID航班号起飞地目的地航班日期价格机票数性别姓名用户密码电话邮件用户名航班号起飞地航班日期目的地价格机票数dinJiagePiaosuHaoMudiQifeiRqiSchJiageIdHaoPiaosuQifeiRqi83、数据字典名称Username别名用户名描述最大长度为20的变长字符串名称Password别名用户密码描述最大长度为16的变长字符串名称Name别名姓名描述最大长度为10的变长字符串名称Sex别名性别描述最大长度为2的变长字符串名称Tel别名电话描述最大长度为20的变长字符串名称Email别名邮箱描述最大长度为50的变长字符串名称Hao别名航班号描述最大长度为10的变长字符串名称Qifei别名起飞地描述最大长度为20的变长字符串名称Rqi别名航班日期描述时间,格式为年月日时分秒。名称Mudi别名目的地描述最大长度为20的变长字符串名称Jiage9别名价格描述数字。最大显示宽度为5,占4个字节。名称Piaosu别名机票数描述数字。最大显示宽度为11,占4个字节。名称Id别名用户ID描述最大长度为20的变长字符串1.user表属性名字段名称存储类型及长度用户名Usernamevarchar(20)用户密码Passwordvarchar(16)姓名Namevarchar(10)性别Sexvarchar(2)电话Telvarchar(16)电子邮件Emailvarchar(30)2.din表属性名字段名称类型与长度航班号Haovarchar(10)起飞地Qifeivarchar(20)航班日期Rqidate目的地Mudivarchar(20)价格Jiageint(5)机票数Piaosuint(11)3.sch表属性名字段名称类型与长度用户IDIdvarchar(20)航班号Haovarchar(10)起飞地Qifeivarchar(20)目的地Mudivarchar(20)航班日期Rqivarchar(20)价格Jiagevarchar(10)机票数Piaoint(11)103.系统实现与测试3.1系统采用的关键技术网络如今已经深入到了我们的生活中,在快速发展的时代,怎么把互联网与我们生活的方方面面结合起来,该网站就是为了让大家能在家里就能搜索、选择自己想要的航班,并进行购买。结合实际出发,本文设计并实现了航空售票系统。该系统采用B/S模式,即使用了Browser/Server(浏览器/服务器)结构,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。该系统分为两种角色,普通用户与系统管理员,不同角色拥有不同的功能,当进行登录操作时,在表单中填入数据点击登录按钮,此时浏览器向服务器发送请求,将数据传输给servlet类,此时servlet类调用已经封装好的Dao类对数据进行处理,最后服务器发出响应结果。当需要进行查询操作时,点击查询,向服务器发出请求在jsp页面中调用数据库操作类,服务器发出响应将结果显示出来。当进行修改操作时,输入修改信息后,点击提交此时向服务器发送请求,将数据传输给servlet类,此时servlet类调用已经封装好的Dao类对数据进行处理,最后服务器发出响应将处理后的结果传给页面。3.2关键代码。(1)过滤器代码:publicclassSessionFilterimplementsFilter{publicvoiddestroy(){//TODOAuto-generatedmethodstub}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{//设置请求的字符编码request.setCharacterEncoding(UTF-8);//设置返回请求的字符编码response.setCharacterEncoding(UTF-8);//转换ServletRequest为HttpServletRequestHttpServletRequestreq=(HttpServletRequest)request;//转换ServletResponse为HttpServletRequestHttpServletResponseres=(HttpServletResponse)response;//获取SessionHttpSessionsession=req.getSession();//获取Session中存储的对象Objecto=session.getAttribute(username);//获取当前请求的URIStringurl=req.getRequestURI();11System.out.println(o);System.out.println(url);/*if(this.encode!=null&&!this.encode.equals()){req.setCharacterEncoding(this.encode);res.setCharacterEncoding(this.encode);}else{request.setCharacterEncoding(UTF-8);response.setCharacterEncoding(UTF-8);}*///判断Session中的对象是否为空;判断请求的URI是否为不允许过滤的URIif(o==null&&