下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 java航空订票系统毕业设计论文

java航空订票系统毕业设计论文.doc

java航空订票系统毕业设计论文

想说原谅你
2017-09-23 0人阅读 举报 0 0 暂无简介

简介:本文档为《java航空订票系统毕业设计论文doc》,可适用于IT/计算机领域

java航空订票系统毕业设计论文本科毕业论文java航空订票系统学院,计算机与信息工程学院专业,计科双学位学号,姓名,周楷指导教师,李建荣职称,论文提交日期,二ОО八年四月摘要当前中国民航市场扩大迅速随着生活水平的提高越来越多的人选择飞机出行对航空公司的服务要求的越来越高为了适应快速发展的需求管理大量数据有效地稳定的管理航空公司我们要为某航空公司开发一套国内机票售票系统要求能通过分布在全国各主要城市的该航空公司的营业网点为顾客提供航班查询购买机票以及退票的服务。该系统的工作流程如下:当顾客到达营业网点后向航空公司营业员提供出发地目的地和出发日期营业员根据以上信息操作软件连接航空公司的服务器查询满足条件的航班然后根据顾客的要求选择某个航班输入乘客信息以及舱位信息然后执行出票操作。该系统在营业网点内能够完成营业员登录查询航班出票等功能。在航空公司内部能够完成添加或删除航班添加或删除营业网点添加或删除营业员等功能。除此之外该系统还要求能统计每个营业网点的业务量以及每位营业员的工作量并将这些信息保存在服务器端并能在服务器端随时查询。关键词:民航管理系统分层部署AbstractThecurrentChinesecommercialaviationexpansionofmarketisrapid,alongwiththelivingstandardenhancement,moreandmoremanypeoplechoosestheairplanejourney,toairline'sservicerequestmoreandmorehigh,inordertoadaptthefastdevelopmentdemand,themanagementmassdatas,thestablemanagementairline,wemustdevelopasetofdomesticairplaneticketbookingsystemeffectivelyforsomeairline,therequestcanthroughdistributeprovidethescheduledflightinquiryinthenationaleachmaincitythisairline'sbusinessmeshpointforthecustomer,theservicewhichthepur面取得积极进展:重点民用航空产品加快民用航空产业化进程增强民用航空科研生产能力增强民用航空工业的自主创新能力履行政府职能进一步加强行业管理。在“十一五”期间中国将投入约亿元人民币用于机场建设。这将为民航业的发展创造有利条件。预计年至年间中国民航航空运输总周转量年均增长保持在左右年民航运输飞机将达到架年均增长。本报告在对中国民用航空市场进行分析的同时也将行业主力厂商的重点信息收入其中并对行业内的上市公司企业进行深入的财务分析在市场集中度分析方面本报告力求全面反映中国民用航空市场占有率的真实情况深入挖掘市场CR和CR等核心市场数据并在此基础上对产业价值链进行深度的剖析是中国民用航空市场极具研究价值的行业性分析报告。根据研究院的预测年全球航空运输业的表现将不及年。预计今年全行业的毛收入大约为亿美元净利润是亿美元盈利率为。从目前到年全球市场新增客机和货机的数量将达架。我们对市场的预测认为民用客机的最大需求来自亚太地区其中中国仍然是最大市场之一。全球航空客运预计以平均每年的速度增长在年内增长将近倍全球航空公司座以上飞机机队的规模也将成倍增长由目前的架增加到年的架预计接近架旧飞机需要更新这就意味着市场需要架新飞机价值万亿美元。与此同时全球航空货运预计以更快的速度增长年平均增长率达到。加上机队更新所需的飞机数预计未来年内需要多架新货机其中多架将由新我们要为某机票代理公司开发一套机票预定系统该系统要求通过分布在每一个代理点的客户端机器完成查询航班和出票的功能。该软件系统由两部分组成安装在代理点机器上的程序是该系统的客户端软件另外还有安装在代理公司机器上的服务器端软件。客户端软件能够完成与服务器的通信根据给定的出发地和目的地以及出发日期向服务器发送航班查询请求和出票的请求。服务器端软件能够接受客户端请求完成航班查询和出票功能并向客户端返回结果。同时服务器端软件还能进行代理商的管理记录并统计每个代理点的业务量并以日志文件的方式保存下来。飞机来满足。技术选择CS结构与BS结构BS结构即BrowserServer(浏览器服务器)结构是随着Internet技术的兴起对CS结构的一种变化或者改进的结构。在这种结构下客户机上只要安装一个浏览器(Browser)如NetscapeNavigator或InternetExplorer服务器安装Oracle、Sybase、Informix或SQLServer等数据库。浏览器通过,ebServer同数据库进行数据交互。用户界面完全通过WWW浏览器实现一部分事务逻辑在前端实现但是主内蒙古农业大学学士学位论文要事务逻辑在服务器端实现形成所谓tier结构。BS结构主要是利用了不断成熟的WWW浏览器技术结合浏览器的多种Script语言(VBScript、JavaScript„)和ActiveX技术用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能并节约了开发成本是一种全新的软件系统构造技术。随着WindowsWindows将浏览器技术植入操作系统内部这种结构更成为当今应用软件的首选体系结构。BS最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用客户端零维护。系统的扩展非常容易只要能上网再由系统管理员分配一个用户名和密码就可以使用了。甚至可以在线申请通过公司内部的安全认证(如,,证书)后不需要人的参与系统可以自动分配给用户一个账号进入系统。采用InternetIntranet技术适用于广域网环境支持更多的客户。可根据访问量动态配置WEB服务器、应用服务器以保证系统性能。客户端只需标准的浏览器采用面向对象技术代码可重用性好系统扩展维护简单开发费用较高开发周期较长CS结构即ClientServer(客户机服务器)结构是大家熟知的软件系统体系结构通过将任务合理分配到Client端和Server端降低了系统的通讯开销可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。。BS结构即BrowserServer(浏览器服务器)结构是随着Internet技术的兴起对CS结构的一种变化或者改进的结构。在这种结构下用户界面完全通过WWW浏览器实现一部分事务逻辑在前端实现但是主要事务逻辑在服务器端实现形成所谓tier结构。BS结构主要是利用了不断成熟的WWW浏览器技术结合浏览器的多种Script语言(VBScript、JavaScript„)和ActiveX技术用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能并节约了开发成本是一种全新的软件系统构造技术。随着WindowsWindows将浏览器技术植入操作系统内部这种结构更成为当今应用软件的首选体系结构。CS与BS区别:ClientServer是建立在局域网的基础上的BrowserServer是建立在广域网的基础上的(硬件环境不同:CS一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务BS建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备信息自己管理有比CS更强的适应范围,一般只要有操作系统和浏览器就行(对安全要求不同CS一般面向相对固定的用户群,对信息安全的控制能力很强一般高度机密的信息系统采用CS结构适宜可以通过BS发布部分可公开信息BS建立在广域网之上,对安全的控制能力相对弱,面向是不可知的用户群(对程序架构不同CS程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑Java航空订票系统BS对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上比CS有更高的要求BS结构的程序架构是发展的趋势,从MS的Net系列的BizTalkExchange等,全面支持网络的构件搭建的系统SUN和IBM推的JavaBean构件技术等,使BS更加成熟(软件重用不同CS程序可以不可避免的整体性考虑,构件的重用性不如在BS要求下的构件的重用性好BS对的多重结构,要求构件相对独立的功能能够相对较好的重用就入买来的餐桌可以再利用,而不是做在墙上的石头桌子(系统维护不同系统维护是软件生存周期中,开销大,重要CS程序由于整体性,必须整体考察,处理出现的问题以及系统升级升级难可能是再做一个全新的系统BS构件组成,方面构件个别的更换,实现系统的无缝升级系统维护开销减到最小用户从网上自己下载安装就可以实现升级(处理问题不同CS程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关应该都是相同的系统BS建立在广域网上,面向不同的用户群,分散地域,这是CS无法作到的与操作系统平台关系最小(用户接口不同CS多是建立的Window平台上,表现方法有限,对程序员普遍要求较高BS建立在浏览器上,有更加丰富和生动的表现方式与用户交流并且大部分难度减低,减低开发成本(信息流不同CS程序一般是典型的中央集权的机械式处理,交互性相对低BS信息流向可变化,BBBCBG等信息、流向的变化,更象交易中心Java技术Java是由SunMicrosystems公司于年月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:跨平台、动感的webinternate计算。从此Java被广泛接受并推动了Web的迅速发展常用的浏览器现在均支持Javaapplet。另一方面Java技术也不断更新。Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次就可以在各种系统中运行。Java应用编程接口已经从x版发展到版。目前常用的Java平台基于Java最近版本为Java。Java分为三个体系JavaSEJavaEEJavaME。内蒙古农业大学学士学位论文Java语言Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C语言的优点并增加了其它特性如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:、Java语言是简单的。Java语言的语法与C语言和C语言很接近使得大多数程序员很容易学习和使用Java。另一方面Java丢弃了C中很少使用的、很难理解的、令人迷惑的那些特性如操作符重载、多继承、自动的强制类型转换。特别地Java语言不使用指针并提供了自动的废料收集使得程序员不必为内存管理而担忧。、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语为了简单起见只支持类之间的单继承但支持接口之间的多继承并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定而C语言只对虚函数使用动态绑定。总之Java语言是一个纯的面向对象程序设计语言。、Java语言是分布式的。Java语言支持Internet应用的开发在基本的Java应用编程接口中有一个网络应用编程接口(javanet)它提供了用于网络应用编程的类库包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。、Java语言是安全的。Java通常被用在网络环境中为此Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外Java对通过网络下载的类具有一个安全防范机制(类ClassLoader)如分配不同的名字空间以防替代本地的同名类、字节代码检查并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。、Java语言是可移植的。这种可移植性来源于体系结构中立性另外Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性Java编译器是用Java实现的Java的运行环境是用ANSIC实现的。、Java语言是解释型的。如前所述Java程序在Java平台上被编译为字节码格式然后可以在实现这个Java平台的任何系统中运行。在运行时Java平台中的Java解释器对这些字节码进行解释执行执行过程中需要的类在联接阶段被载入到运行环境中。、Java是高性能的。与那些解释型的高级脚本语言相比Java的确是高性能的。事实上Java的运行速度随着JIT(JustInTime)编译器技术的发展越来越接近于C。、Java语言是多线程的。在Java语言中线程是一种特殊的对象它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程其二从Thread类派生出子类并重写run方法使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口因此任何一个线程均有它的run方法而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java航空订票系统Java语言支持多个线程的同时执行并提供多线程之间的同步机制(关键字为synchronized)。、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境也可以通过网络来载入所需要的类。这也有利于软件的升级。另外Java中的类有一个运行时刻的表示能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(JavaEnterpriseAPIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。开发工具Eclipse:Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言它只是一个框架和一组服务用于通过插件组件构建开发环境。幸运的是Eclipse附带了一个标准的插件集包括Java开发工具(JavaDevelopmentToolsJDT)。Eclipse还包括插件开发环境(PluginDevelopmentEnvironmentPDE)这个组件主要针对希望扩展Eclipse的软件开发人员因为它允许他们构建与Eclipse环境无缝集成的工具。JDBC:JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI可以为多种关系数据库提供统一访问它由一组用Java语言编写的类和接口组成。JDBC为工具数据库开发人员提供了一个标准的API据此可以构建更高级的工具和接口使数据库开发人员能够用纯JavaAPI编写数据库应用程序同时JDBC也是个商标名。hibernate:Hibernate是一个开放源代码的对象关系映射框架它对JDBC进行了非常轻量级的对象封装使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合既可以在Java的客户端程序使用也可以在ServletJSP的Web应用中使用最具革命意义的是Hibernate可以在应用EJB的JEE架构中取代CMP完成数据持久化的重任。Hibernate的核心接口一共有个分别为:Session、SessionFactory、Transaction、Query和Configuration。这个核心接口在任何开发中都会用到。通过这些接口不仅可以对持久化对象进行存取还能够进行事务控制。下面对这五的核心接口分别加以介绍。Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务内蒙古农业大学学士学位论文是完成与数据库的交流包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时其实指的是Hibernate中的session而以后会将HttpSesion对象称为用户session。SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的因为一般情况下一个项目通常只需要一个SessionFactory就够当需要操作多个数据库时可以为每个数据库指定一个SessionFactory。Configuration接口:Configuration接口负责配置并启动Hibernate创建SessionFactory对象。在Hibernate的启动的过程中Configuration类的实例首先定位映射文档位置、读取配置然后创建SessionFactory对象。Transaction接口:Transaction接口负责事务相关的操作。它是可选的可发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。(需求分析:软件分层与部署:我把软件非为三个层次:分别是表现层业务层和持久层。表现层即是客户端客户端包装请求通过socket发放服务器。服务器通过控制器把请求转发给不同的模块处理。模块调用相应的Dao访问数据库。软件分层实现了格模块功能之间的松散耦合有利于功能扩展系统维护。图部署图系统功能模块:Java航空订票系统主要的系统功能模块如下:客户端模块:代理商登陆模块BranchDAOgetBrancht()查询航班模块(A):FlightDAOgetAllFlights()订票模块(A)OrderTicketDAOorder()修改密码模块(A):AgentDAOmodifyPassword()服务器模块:添加营业网点模块(B):BranchDAOaddBranch()删除营业网点模块(B):BranchDAOremoveBranch()查询营业网点模块(B):BranchDAOaddBranch()添加飞机型号模块(B):PlaneModelDAOaddPlaneModel()添加航班计划模块(B):FlightDAOaddFlightSchedular()查询航班计划模块(B)FlightDAOgetAllFlightSchedulars()添加航班模块(B):FlightlDAOaddFlightl()统计所有出票记录模块:TicketOrderDAOgetAllTicketOrder()统计网点出票记录模块:TicketOrderDAOgetBranchTicketOrder()内蒙古农业大学学士学位论文营业员登录营业员修改密码前台操作查询航班出票管理员登录查询航班计划XX添加航班计划航空航班管理公司删除航班计划国内机票售票添加飞机型号系统查询营业网点添加营业网点营业网点管理删除营业网点后台管理查询营业网点业务量统计信息查询月报表查询出票信息图模块划分系统活动图:系统活动过程如下:服务器读取配置文件启动。之后可以进行航班管理网点管理统计信息等。客户端读取配置文件启动连接服务器登陆成功后才可以进行航班查询修改密码订票等操作。每一步操作都要发往服务器处理。服务器同时可以服务多个客户端线程。Java航空订票系统图系统活动图用例图:(客户端用例:此图描述了客户端的各功能依赖关系内蒙古农业大学学士学位论文图客户端用例图服务器端用例:此图描述了服务器各功能关系。Java航空订票系统图服务器端用例图概要设计:业务模型:通过上面的分析我建立了下列业务模型航班计划(FlightScheduler):用来描述由某个航空公司执行的某个定期航班的计划表。例如:由中国国际航空公司执行的每天早上:从北京起飞上午:到达上海的CA就是一个航班计划。属性:航班号起始日期结束日期出发地目的地离港时间到港时间里程飞机机型班期基准票价。航班(Flight):用来描述在某个确定日期执行某个定期航班计划的一次航班。例如:年月日从北京飞上海的CA就是一个航班的实例。属性:航班计划出发日期各舱剩余座位数折扣。起始日期(StartDate):用来描述某个航班计划开始的日期。结束日期(EndDate):用来描述某个航班计划结束的日期。营业网点(Branch):用来描述航空公司的某个分支机构该机构能使用该系统为顾客提供查询航班和出票的服务。营业网点通过若干台终端机器与航空公司的服务器相连内蒙古农业大学学士学位论文属性:编号名称密码城市地址。航班号(planemodel):由航空公司给航班计划定义的唯一标识号码该号码由位英文字符和位数字组成位英文字符是航空公司编码位数字是航班编码。例如:CA就是一个航班计划的航班号其中CA代表中国国际航空公司代表航班的编号。出发地(FromCity):用来描述某个航班计划的起飞城市和机场所有国内机场均用(国内机场代码表)。三个英文字母的代码表示详情请见附录I目的地(ToCity):用来描述某个航班计划的到达城市和机场所有国内机场均用三个英文字母的代码表示详情请见附录I(国内机场代码表)。离港时间:(Departure):用来描述某个航班计划的从出发地机场离开的时刻离港时间一般代表飞机舱门关闭不再接收乘客的时刻。该时间精确到分钟。到港时间:(Arrival):用来描述某个航班计划到达目的地机场的时间到港时间一般代表飞机舱门开启允许乘客下飞机的时刻该时间精确到分钟。出发日期(Date):用来描述某个航班的出发日期该日期精确到某一天。班期(Scheduler):用来描述某个航班计划在一周之内哪些天有航班哪些天没有航班。舱位等级:(CabinClass):用来描述航班的不同舱位一般分为三种:头等舱(F)公物舱(C)经济舱(Y)。不同的舱位等级具有不同的机票折扣详情请参见舱位折扣和机票价格。**实际情况中航空公司定义的舱位等级可能更复杂在本项目中为简化业务模型只对舱位等级作上述三种划分。乘客类型:(Passengertype):用来描述乘坐航班的乘客的类型一般分为三种:成人(A)(age>)儿童(C)(<age<=)婴儿(I)(<=age<=)。不同的乘客类型具有不同的机票折扣详情请见乘客折扣。在这三种乘客类型中成人和儿童占用座位而婴儿不占用座位婴儿票不能单独出售一张婴儿票必须凭一张成人票售出。飞机机型:(AirplaneModel):用来描述执行某个航班计划的飞机的型号一般来讲一个航班计划的各次航班都应该采用同种机型的飞机来执行。不同的飞机型号有不同的航程及各舱座位数。详情请参见附录II民航飞机型号一览表。**实际情况中各种机型的座位数是不一样的同一机型还分好几个系列如B(波音)有B、BB等多个系列每个系列座位数都不一样。即使是同一型号、同一系列的机型所属的航空公司不同座位数也会不同因为航空公司在购买飞机时会根据自己的需要要求厂家采用不同的布局不同的布局会有不同的头等舱、公务舱、经济舱座位数。在本项目中为简化业务模型我们认Java航空订票系统为同种型号的飞机各舱座位数是固定的。基准票价:(FullPrice):是指某个航班在没有季节折扣时的一张经济舱成人票的价格该价格作为该航班计划的基准价格最终机票价格应该在此基础上乘以季节折扣舱位折扣和乘客类型折扣。季节折扣:(priceoff):航空公司根据不同季节的客流状况调整的航班的折扣只有经济舱的成人票才享受季节折扣。舱位折扣:(ClassDiscount):不同舱位在基准价格基础上的价格系数头等舱为公务舱为经济舱为乘客类型折扣:(PassengerDiscount):不同乘客类型在基准票价基础上的价格系数成人为儿童为婴儿为。机票订单(TicketOrder):一张成功出票的机票记录机票价格:(TicketPrice):一张机票的价格机票价格由以下公式计算:经济舱成人票票价=基准价格*季节折扣其他舱位乘客票价=基准价格*舱位折扣*乘客类型折扣其中抽象出以下数据类型:其总舱位等级和机票类型为枚举类型。内蒙古农业大学学士学位论文图类图数据库设计根据数据模型设计数据库如下:其中航班计划表有一个外间引用飞机机型表航班表引用航班计划表订单表引用航班表和网点表。飞机机型表(AIRPLANEMODEL):表飞机机型表modelVARCHAR()PRIMARYKEY机型maxlengthNUMBER()NOT最大航程firstclassseatsNUMBER()NOT头等舱座位数businessclassseatsNUMBER()NOT公务舱座位数economyclassseatsNUMBER()NOT经济舱座位数Java航空订票系统航班计划表(FLIGHTSCHEDULER):表航班计划表flightnumberCHAR()PRIMARYKEY航班号startdateDATENOT开始日期enddateDATENOT结束日期FromaddressCHAR()REFERENCESairportairportcode出发地机场toaddressCHAR()REFERENCESairportairportcode目的地机场NOTstarttimeDATENOT离港时间endtimeDATENOT到港时间airplaneVARCHAR(REFERENCES执行机型)airplanemodelmodelNOTschedulerCHAR()NOT班期saillengthNUMBER()NOT航程航班表(FLIGHT):表航班表idNUMBER()PRIMARYKEY航班编号flightnumberCHAR()REFERENCES航班号flightschedulerflightnumbercalendarDATENOT出发日期firstclassremainseatsNUMBER()NOT头等舱剩余座位数businessclassremainseatsNUMBER()NOT公务舱剩余座位数economyclassremainseatsNUMBER()NOT经济舱剩余座位数priceoffNUMBER(,)NOT季节折扣DEFAULT营业网点表(BRANCH):表营业网点表idNUMBER()PRIMARYKEY网点编号nameVARCHAR()NOT网点名称passwordVARCHAR()NOT密码addressVARCHAR()NOT地址cityVARCHAR()NOT所在城市出票记录表(TICKETORDER):表出票记录表内蒙古农业大学学士学位论文idNUMBER()PRIMARYKEY机票编号flightidNUMBER()NOT航班编号REFERENCESFLIGHTidpassengernameVARCHAR()NOT乘客姓名passengeridVARCHAR()NOT证件号码CalendarDATENOT出票日期cabinclassCHAR()NOTCHECKIN(F,C,Y)舱位等级tickettypeCHAR()NOTCHECKIN(A,C,I)乘客类型branchidNUMBER()NOT营业网点编REFERENCESBRANCHid号DAO接口设计设计了通用的DAO接口flightDAO用来航班计划航班的数据访问。BranchDAO用来访问网点数据。TicketOrderDAO用来访问票单数据。的实现类来实现接口使标准制定和标准实现分离。可以创建不同如从文件中读取数据可以定义FlightDaoFromFile利用JDBC访问数据可以定义FlightDaoFromJDBC利用hibernate访问数据可以定义FlightDaoFromHibernate等。FlightDAO:packagecomtarenaabsdaoimportcomtarenaabsmodel*importjavautil****对航班和航班计划数据访问的接口。*authorzhoukai**publicinterfaceFlightDAO{***根据指定出发地目的地和出发日期在底层数据源中查找*得到所有的航班对象的集合。*paramfromAddr出发地*paramtoAddr目的地*paramdate出发日期*return航班集合*publicSetgetAllFlights(StringfromAddr,StringtoAddr,Calendardate)***执行出票的操作。*paramord订单对象*return若出票成功返回true否则返回false。*Java航空订票系统publicbooleanorder(Orderord)***添加指定的航班计划对象。*paramfs要添加的航班计划对象。*return添加成功返回true,否则返回false。*publicbooleanaddFlightSchedular(FlightSchedularfs)***根据给定的航班编号在底层数据源中删除该航班计划以及该计划下的所有航班。*paramflightNumber要删除的航班计划的航班编号。*return删除成功返回true,否则返回false。*publicbooleanremoveFlightSchedular(StringflightNumber)*得到所有航班计划对象*return*publicSetgetAllFlightSchedulars()**添加航班*publicbooleanaddFlight(Flightfl)BranchDAO:}packagecomtarenaabsdaoimportcomtarenaabsmodel*importjavautil****对网点数据进行访问的接口。*authorzhoukai**publicinterfaceBranchDAO{***根据给定的姓名和密码在底层数据源中查找代理商的纪录*若找到则返回该代理商对象若没找到或密码错误则返回。*paramname网点名称*parampasswd网点密码密码*return找到的网点对象或*publicBranchgetBranch(Stringname,Stringpasswd)***向底层数据中添加一个网点纪录。*paramuser要添加的网点对象*return若添加成功返回true否则返回false。内蒙古农业大学学士学位论文*publicbooleanaddBranch(Branchuser)***根据指定的网点的姓名在底层数据源中删除该网点。*paramname网点姓名*return若删除成功返回true否则返回false。*publicbooleanremoveBranch(Stringname)***修改指定网点的密码。*paramname网点名称*paramoldPassword旧密码*paramnewPassword新密码*return若修改成功返回true否则返回false。*publicbooleanmodifyPassword(Stringname,StringoldPassword,StringnewPassword)**查询所有网点信息*return若成功返回set否则*publicSetgetAllBranch()TicketOrderDAO:}packagecomtarenaabsdaoimportjavautilSetimportjavautilCalendarimportcomtarenaabsmodel****机票出票记录访问接口*authorzhoukai**publicinterfaceTicketOrderDAO{***执行出票的操作。*paramord订单对象*return若出票成功返回true否则返回false。*publicbooleanorder(Orderord)***执行退票操作。Java航空订票系统*paramTicketNumber机票编号*return退票成功返回true否则返回false。*publicbooleancancelOrder(intTicketNumber)***查询指定营业网点在指定时间段内的出票记录*parambranch营业网点*paramstartDate开始日期*paramendDate结束日期*return满足条件的出票记录集合*publicSet<TicketOrder>getAllTicketOrder(Branchbranch,CalendarstartDate,CalendarendDate)***得到指定营业网点指定日期内的营业额。*parambranch营业网点*paramstartDate开始日期*paramendDate结束日期*return营业额*publicdoublegetAllTicketMoney(Branchbranch,CalendarstartDate,CalendarendDate)***得到所有营业网点指定日期内的营业额*paramstartDate开始日期*paramendDate结束日期*return营业额*publicdoublegetAllTicketMoney(CalendarstartDate,CalendarendDate)**查询所有出票信息*return出票集合publicSet<TicketOrder>getAllTicketOrder()主要工作流程:}内蒙古农业大学学士学位论文客户端启动营业员登录输入用户名出票查询航班修改密码密码YESNOYES是否已查数据有效NO询出航班性验证YESYES输入出发地输入乘客信输入旧密码目的地出发息新密码日期数据有效NONO数据有效NO性验证数据有效性验证性验证YESYESYES封装Request对象将Request对象写往服务器端分拣请求航班查询请求修改出票请求登录请求密码调用请求调用调用调用TicketOrderFlightDaoBranchDaoBranchDaoDao封装Response对象解析Response对将Response对象象将结果显写往客户端示在客户端Java航空订票系统图工作流程图详细时序图图详细时序图详细设计流程详细分析服务器启动时读取配置文件读取数据并且服务器端ServerSocket等待客户端线访问当收到客户端相应后则创建一个新的服务线程执行服务。ServerSocketss=Sockets=try{创建服务器socketss=new内蒙古农业大学学士学位论文ServerSocket(IntegerparseInt(progetProperty("ServerPort")))while(true){s=ssaccept()newServerThread(s)start()转发给serverThread处理(传递socket参数)}}catch(IOExceptione){eprintStackTrace()}服务线程ServerThread通过构造函数接受socket然后转发给ControllerpublicclassServerThreadextendsThread{SocketsprotectedServerThread(Sockets){用传入的socket初始化thiss=s}publicvoidrun(){try{newController(s)handle()交给控制器处理}catch(Exceptione){eprintStackTrace()}finally{try{sclose()}catch(IOExceptione){}}}}由controller调用handle方法分析请求对象if(typeequals("login")){登陆处理loginHandle(req)}elseif(typeequals("flightSearch")){航班计划查询处理flightSearchHandle(req)}elseif(typeequals("order")){订单处理orderHandle()}elseif(typeequals("quit")){退出处理quitHandle()break}elseif(typeequals("modifyPasswd")){modifyPasswd(req)有不同的处理程序调用相应的dao将查询信息封装到response中}hs=(HashSet)(flightDaogetAllFlights(fromAddr,toAddr,cal))Responseres=newResponse("flightSearch")ressetData(hs)用表格显示表单当客户端查询到航班计划时把flightlist航班集合传给FlightTableModel,再把FLightTableModel传给JTable然后把JTable加入JScorllPane就会自动显Java航空订票系统示数据FlightTableModelftm=newFlightTableModel(flightlist)JTablejt=newJTable(ftm)ClientMainClassclientFramesetTable(jt)FlightTableModel实现了AbstractTableModel接口实现了如下四个方法。packagecomtarenaabsclientimportjavaxswingtable*importjavautil*importcomtarenaabsmodel*publicclassFlightTableModelextendsAbstractTableModel{ArrayListspublicFlightTableModel(ArrayLists){thiss=s}获得列名publicStringgetColumnName(intarg){switch(arg){case:return"航班号"case:return"出发地"case:return"目的地"case:return"起飞时间"case:return"到达时间"case:return"机型"case:return"票价"case:return"头等舱"case:return"公务舱"case:return"经济舱"default:return}}获得行数publicintgetColumnCount(){return}获得列数publicintgetRowCount(){returnssize()}获得指定位置的值publicObjectgetValueAt(introw,intcol){Flightf=(Flight)sget(row)if(row<||row>ssize())returnswitch(col){case:returnfgetSch()getFlightNumber()内蒙古农业大学学士学位论文case:returnfgetSch()getFromAddress()case:returnfgetSch()getToAddress()case:returnfgetSch()getFromTime()case:returnfgetSch()getToTime()case:returnfgetSch()getPlane()case:return(int)(fgetSch()getPrice()*fgetPriceOff())case:returnfgetFCSRemain()case:returnfgetBCSRemain()case:returnfgetECSRemain()default:return}}}在服务器中会有航班计划营业网点票单等多种类需要显示如果为每个类写一个TableModel类工作量大且当改动业务模型时维护量大。考虑如此情况我利用反射机制写了一个ArrayListTableModel类来实现多种来型的表格显示此类如下:packagecomtarenaabsserverimportjavalangreflectFieldimportjavautilArrayListimportjavautil*importjavaxswingtableAbstractTableModelpublicclassArrayListTableModelextendsAbstractTableModel{privateArrayListarrpublicArrayListTableModel(ArrayListarr){thisarr=arr}获得列名即属性名publicStringgetColumnName(intarg){Classc=arrget()getClass()Fieldfs=cgetDeclaredFields()returnfsarggetName()}获得列数即属性数publicintgetColumnCount(){Classc=arrget()getClass()returncgetDeclaredFields()length}获得行数即元素个数publicintgetRowCount(){returnarrsize()Java航空订票系统}获得指定索引的值行对象列属性publicObjectgetValueAt(introwIndex,intcolumnIndex){Classc=arrget()getClass()arr类型Fieldfs=cgetDeclaredFields()Fieldf=fscolumnIndex按索引返回属性列表中某个属性Objecto=fget(obj)返回指定对象(obj)上此Field表示的字段的值oObjecto=arrget(rowIndex)返回数组中索引处的对象设置所有访问属性for(inti=i<fslengthi){fsisetAccessible(true)}try{Fieldf=fscolumnIndexObjecto=arrget(rowIndex)Objectcol=fget(o)属性字段的对象if(col==)return""if(colgetClass()==javautilGregorianCalendarclass){Calendarcal=(Calendar)colStringBuffersb=newStringBuffer()sbappend(calget(CalendarYEAR)"年")sbappend(calget(CalendarMONTH)"月")sbappend(calget(CalendarDAYOFMONTH)"日")returnsb}else{把值转化为stringreturnfget(arrget(rowIndex))""}}catch(IllegalArgumentExceptione){eprintStackTrace()}catch(IllegalAccessExceptione){eprintStackTrace()}return}hibernate映射关系}再用JDBC储存数据时涉及多个表格的修改查找。工作难度较大。所以考虑用hibernate实现数据储存。首先把模型改写为标准pojo。添加Long类型的oid属性内蒙古农业大学学士学位论文为保存每个属性添加gettersetter方法添加无参构造函数。写hibernate映射文件Hibernate储存原理:当储存数据时hibernate自动调用getter方法把属性存入相应字段当读取数据时hibernate自动调用无参构造方法创建对象然后调用setter方法给对象赋值从而产生和原来对象相等(equals)的对象。当增删改操作时hibernate会自动把与原数据相关联的表的字段修改(必须设置级联)利用hibernate储存原理可以解决枚举映射问题:在类中建一个新的String属性代表枚举存入数据库读取时由string生成枚举操作应写在在setter方法中。以下是数据表结构:后续改进这次作业时间比较紧从设计编码到实现都由一个一人完成历时一个多月软件难免有很多不足以及bug比如:初始化参数程序是直接读配置文件来读取初始化参数的如下所示:ServerIP=Java航空订票系统ServerPort=可以将此参数放入程序中由用户或管理员输入来选侧不同的服务器。客户端的参数设置及重新连接功能有待实现。服务器掉线默认是实现是客户端先退出通知服务器服务器从内存中删掉此客户端然后客户端关闭连接。privatevoidquitHandle(Requestreq){StringcurrentUserName=(String)reqgetData("currentUser")for(Objecto:onlineAgent){Brancha=(Branch)oif(agetName()equals(currentUserName)){onlineAgentremove(a)}}try{sclose()}catch(IOExceptione){eprintStackTrace()}}但是当服务器由于网络故障或者系统维修时临时断开没有通知客户端当客户端此时向服务器发请求时便会出现想不到的错误。一个解决方法是:利用观察者模式。在服务器推出方法中遍历在线客户端socket发送等待信息Privatevoidquit(){For(Sockets:Currentsockets)封装等待信号给客户端}客户端受到等待信号后执行waitServer()方法并禁止操作。请求响应对象现在的request对象封装了String类型的Type变量代表请求类型。Response对象包装了Object类型的Date变量作为相应。可以把请求对象作为枚举类型更安全不易出错。数据显示的轮动更新服务器端显示航班信息网点信息出现一张表该表不能滚动和更新。可以利用可滚动可更新以及Swing的某些特性实现excell中的实时修改数据功能。实现此功能较为复杂。总结航空订票系统使用软件分层结构利用面向对象的设计方法并把学到的知识应用于实践。实现了稳定可维护可扩展性的软件并且完成业务需求。如果以后加以改进相信可以成为变的更加优秀。内蒙古农业大学学士学位论文致谢经过了近五十天的毕业设计~使我学到了很多~首先巩固了我的基础知识~java~sql~jdbc等进行了完整的在学习~同时学习了hibernate来加速开发。理解了客户端服务器的应用~软件分层的设计理论~以及面向对象的分析与设计的思想。并把学到的知识应用于实践。我中心的感谢我的指导老师李建荣教授~以及我的教师唐亮同志~项目经理张翠同志~和校领导对我的的关心支持和帮助。参考文献CaysHostmannGaryComelljava核心技术机械工业出版社~孙卫琴java面向对象编程,电子工业出版社~KathySierraBertBates(深入浅出Java~东南大学出版社~林胜利王坤茹Java优化编程电子工业出版社

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/46

java航空订票系统毕业设计论文

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利