• 领导讲话
  • 剖析整改
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 事迹推荐
  • 考察鉴定
  • 述职述廉
  • 会议主持
  • 主题演讲
  • 就职演说
  • 领导致辞
  • 周年庆典
  • 晚会游戏
  • 慰问贺电
  • 结婚典礼
  • 悼词殡葬
  • 竞职演说
  • 精彩演讲
  • 信息简报
  • 毕业典礼
  • 节日祝福
  • 开幕闭幕
  • 现实表现
  • 廉政谈话
  • 实习报告
  • 策划方案
  • 合同协议
  • 规章制度
  • 申报材料
  • 情书信件
  • 当前位置: 达达文档网 > 体裁范文 > 事迹推荐 > 正文

    基于微信公众平台航空售票系统设计与实现

    时间:2021-04-17 08:40:51 来源:达达文档网 本文已影响 达达文档网手机站

    基于微信公众平台的航空售票系统的设计与实现

    毕业论文

    基于微信公众平台的航空售票系统的设计与实现

    题目:基于微信公众平台的航空售票系

    统的设计与实现

    姓名:何经纬

    学号:1305120107

    指导教师(职称):刘菲(讲师)

    专业:计算机科学与技术

    班级:2013计算机科学与技术01

    所在学院:计算机科学与工程学院

    2017年6月

    基于微信公众平台的航空售票系统的设计与实现

    Design and Implementation of Air Ticketing System Based on WeChat Public

    Platform

    学生姓名何经纬

    指导教师刘菲

    目录

    摘要................................................................... III Abstract .................................................................. V 第一章绪论. (1)

    1.1 课题背景 (1)

    1.2 目的和意义 (2)

    1.3 国内发展现状 (2)

    1.4 开发技术及工具 (3)

    1.5 开发环境介绍与搭建 (6)

    第二章需求分析 (9)

    2.1 可行性分析 (9)

    2.2 业务分析 (10)

    2.3 功能性需求 (12)

    2.4 非功能性需求 (16)

    第三章概要设计 (19)

    3.1 系统架构 (19)

    3.2 用例设计 (19)

    3.3 数据库设计 (27)

    第四章详细设计 (33)

    4.1 微信服务器端 (33)

    4.2 微信端 (36)

    第五章运行结果分析与展望 (41)

    5.1 运行结果 (41)

    5.2 运行结果分析 (48)

    5.3 展望 (50)

    总结 (51)

    致谢 (53)

    参考文献 (55)

    摘要

    近十年来,随着国内互联网技术的高速发展,中国逐渐从互联网技术的的跟随者变成互联网技术的引领者,在国际互联网技术上的话语权越来越高。国内互联技术的高速发展,给广大人民的生活带来了许多的便利,其中网络购票就是互联网技术发展带来的便利,网上购买机票早已成为一种极其普及的购票方式。网络购票早已成为人们日常生活的一部分,目前网络购票主要形式有网站购票和APP购票两种,其中网站购票需要借助电脑来实现,APP购票则需要下载相关APP。对于用户来说无论是网站购票还是APP购票都是不够方便的,对开发者来说,由于APP载体的差异,开发者需要开发Android和iOS两种平台的应用,耗费大量的时间和精力。

    基于微信公众平台的航空售票系统就可以完美的解决上述问题,它可以跨平台,低存储,同时兼具网站和APP购票的优点,用户只需关注公众号即可获得购票所需的途径。基于微信公众平台的航空售票系统的出现,让人们购票的方式变的更加多元化、更加便利。本航空售票系统以MyEclipse 10、MySQL数据库、Ngrok为开发工具进行开发,主要采用的开发技术有Java、JSP(Java Server Pages,Java服务器页面)、XML(Extensible Markup Language,可扩展标记语言)、AJAX(Asynchronous Javascript And XML,异步JavaScript和XML)等,主体框架为Struts2、Hibernate。本系统除包括用户信息管理、机票信息管理、购票、退票等必须功能之外,还有例如旅游景点和旅游资讯等附加功能,系统总体达到了设计要求。

    关键词:微信公众平台;航空售票系统;跨平台

    Abstract

    In the past ten years, with the rapid development of Internet technology in China, China has gradually become the leader of Internet technology from the followers of Internet technology, and the right to speak in the Internet technology is getting higher and higher. The rapid development of Internet technology has brought a lot of convenience to the lives of the vast numbers of people, of which the online ticketing is the convenience of Internet technology development. Online ticketing has become a part of people"s daily life, At present, the main forms of online ticketing are website ticketing and APP ticketing, in which the website ticketing needs to be realized by means of computers, and APP ticketing requires people to download relevant APP. For users, whether it is website ticket purchase or APP ticket purchase, it is not absolutely convenient. For developers, due to the differences in APP vectors, developers need to develop applications for two platforms, Android and iOS, which take a lot of time and effort.

    This time the Air Ticketing System based on WeChat Public Platform can perfectly solve these problems, it can be cross platform, low storage, and the advantages of both the website and APP, users only need to pay attention to the WeChat Public Platform, then they can get the way to buy tickets.The emergence of Air Ticketing System based on WeChat Public Platform, the way people buy tickets has become more diversified and more convenient. This Airline Ticketing System is developed with MyEclipse 10, MySQL database and Ngrok as the development tools. The main development technologies are Java, JSP, AJAX and so on. The main frame are Struts2 and Hibernate. In addition to the functions of user information management, ticket information management, ticket purchase and refund, the system also has additional functions such as tourist attractions, tourist information and so on. The system meets the design requirements as a whole.

    Keywords:WeChat Public Platform;Airline Ticketing System;cross platform

    第一章绪论

    1.1 课题背景

    随着国内的互联网技术不断发展,人们的生活正在发生着改变,足不出户就可完成生活中绝大部分的事情。外出购买商品不用带现金,手机支付可以代替现金支付。吃饭不用外出,“饿了么”、“美团”可以送餐到家。购物不用外出,“天猫”、“京东”上的商品琳琅满目。由此看出互联网技术的发展带来的是一大批的网络应用的涌现而出,微信就是众多网络应用中的一个。微信由深圳腾讯控股有限公司(Tencent Holdings Limited)于2010年10月筹划启动,由腾讯广州研发中心产品团队打造。该团队经理张小龙所带领的团队曾成功开发过Foxmail、QQ邮箱等互联网项目。腾讯公司总裁马化腾在产品策划的邮件中确定了这款产品的名称叫做“微信”[1]。

    微信在刚刚推出的时候,没有人会想到它的市场占有率会发展到如此之高,因为大家都认为QQ在国内市场已经有了接近90%的占有率,微信作为和QQ功能差不多的即时聊天软件实属多余,相信用不了它就会因用户量过少而退市,就像现在国内几乎见不到的“飞信”、“MSN”等聊天软件一样。然而事实并不是人们预想的那样,微信不仅没有失败反而发展势头很迅猛。在微信发布后的短短433天,微信用户突破一亿,微信的地用户数量的不断增加也为微信的发展带来了强大的后续动力。时至今日,微信已经不单单是一款聊天软件,它是一个集通讯、商务、娱乐于一体的综合性平台。

    分析微信成功的原因,大致可以总结为以下几点。首先,微信是腾讯公司旗下的一款即时聊天软件,腾讯公司自1999年推出第一版QQ至今已经有将近20年的时间了,对于即时聊天软件,腾讯公司有着丰富的推广、运营经验。其次微信所属的腾讯公司拥有雄厚的资金支持,截止2017年4月6日,腾讯公司的市值已经达到2790亿美元,在强大的资金链的支持下,微信的推广也就不是问题了。最后微信相对QQ来说精简了许多,上手很容易,对于中老年人来说这是一种福利。微信简单并不是说它是为年龄稍大的人群开发的,微信也包含了很多QQ没有的功能,例如摇一摇、附近商铺等,所以说微信是针对所有人群一款即时聊天软件。

    微信的成功让腾讯公司对微信发展的信心倍增,腾讯公司决定拓展微信的功能。于是腾讯公司于2012年8月8日正式上线微信公共平台,在最初上线的时候,腾讯官方给它的定位为“为用户、媒体、企业等提供一种全新的互动沟通模式,以及通过自由平台来打造一种全新的阅读模式和体验!”。微信公共平台它诞生于目前国内最大用户群的移动互联网应用—微信。它的相关用户体验已经非常的完善,用户的自由度非常的高,其中的用户订阅推送功能都能够自主选择,而且它加入的门槛非常的低,任何人都可以免费加入[2]。如今,微信已成为一种潮流,几乎可以在每个人的手机里都可以看到这个软件的存在,不管你是用还是不用。

    随着人们的收入逐渐的提高,乘飞机出行不再是一件可望而不可即的事情,飞机已

    经逐渐成为一种日常交通工具,就像汽车和火车一样。在前不久中国铁路总公司宣布东南沿海城市的高铁和动车票即将涨价,最高涨幅达到70%,这使得本来就不便宜的高铁票更加贵,有的价格甚至超过了机票的价格。权衡飞机和高铁,相信会有更多的人选择乘飞机出行,这时候就需要一种便捷的购票方式来为广大乘客服务。结合微信的庞大用户群体,推出一个基于微信公众平台的航空售票系统将会是一个很好的选择。

    微信公众平台的发布的时候微信的功能已经得到了极大的扩展,如扫一扫、微信支付等。微信的发展给基于微信公众平台的航空售票系统的发展奠定了基础。在基于微信公众平台的航空售票系统中购票,用户只需要关注航空公司公众号,注册用户就可以完成订票活动,机票的支付可以由微信支付来完成,也就是说只要有微信,就可以完成购买机票的一切活动。

    1.2 目的和意义

    基于微信公众平台的航空售票系统突破了很多传统网络售票的限制,用户只需要有一部装有微信的手机即可完成购票的所有工作,而且可以随时收到航空公司推送的一些折扣信息、旅游信息,同时,用户不用再为下载大量的APP占用了手机宝贵的内存而担心,也不用为在没有无线网络的情况下下载APP浪费流量而担心。基于微信公众平台的航空售票系统并不是为立即了取代传统的网络售票方式,它目前只是为用户提供一种更加便捷的购票方式,是对现有的网络购票方式的一种补充,相信随着时间的推移,微信功能将会变得更加完善、强大,基于微信公众平台的航空售票系统也将会成为主流的网络购票方式。

    基于微信公众平台的航空售票系统对于航空公司来说是一种较好地售票平台,它的跨平台性使得它可以在Android设备、iOS 设备、甚至Windows平台上使用,做一次开发即可全平台通用。对于基于微信公众平台的航空售票系统的维护升级也将是极为方便的,一切的升级和维护活动都在后台进行,而微信的升级与维护是由腾讯公司来做,这样将为航空公司省去大量的系统开发和维护费用。

    1.3 国内发展现状

    2015年4月20,根据中国新闻出版社研究公布的第十二次全国国民阅读调查结果显示,微信阅读被首次纳入了调查。结果显示,我国成年人手机阅读群体的微信阅读使用频率为每天两次,人均每天阅读时长超过40分钟。微信成为用户在移动端的一个重要信息接入口。而这其中来自微信公众号的信息又占据了大部分比重。微信公众号依托多媒体图文推送、互动方便快捷等优势备受用户青睐[3]。截止2016年底,微信已成为全球第四大聊天类应用,前三名分别为WhatsApp、Messenger、QQ。虽然微信只是排在第四位,但是微信在全球已有6.97亿用户,并且还在持续增加中,而且由于腾讯公司得天独厚的生态环境,微信的功能越来越强大,业务拓展范围越来越大,微信购票已经成为一种趋势。

    网络购票早已不是什么新鲜事物,已经成为一种主流的购票方式,手机APP购票是网络购票的一种主要途径,现在来看,手机购票应该是智能手机用户的第一选择了。

    基于微信公众平台的航空售票系统结合和了网络购票和手机购票APP的优势,是一种新的购票形式。目前国内已有航空公司推出了微信公众号售票平台,在用户中推广效果也很好,手机购票APP变成可以卸载的软件,用户不用再考虑APP占用内存,也不用考虑APP的更新问题和私自读取用户隐私信息等问题。

    目前,国内已有航空公司推出各自用于机票业务的微信公众号,比如春秋航空、东方航空、四川航空等航空公司。这些航空公司本来就有很完善的网络售票的体系,为什么还会特意发展微信端的售票系统?原因很简单,对于用户来说,微信端的售票系统比其他平台的售票系统更加方便,用户更愿意在微信上购买机票。以此看来,基于微信公众平台的航空售票系统将会是航空售票系统的一种发展趋势,值得航空公司注意。

    1.4 开发技术及工具

    本系统的开发除了需要一些常用的开发工具和技术,例如MyEclipse 10、Java、JSP。还需要微信公众平台、AJAX、Struts2、Hibernate、MySQL、Ngrok以及JavaScript、JavaScript 插件等技术和工具的支持。下面对一些平常开发不常用到的几种工具和技术进行简单的介绍。

    1.4.1 微信公众平台

    微信公众平台通俗来讲就是我们所熟知的微信公众号。曾命名为“官号平台”、“媒体平台”、“微信公众号”,从微信的命名可以发现,公众平台不只是官方、媒体使用的平台,而是对所有公众都开放的统一平台。微信公众平台公分4大板块:订阅号、服务号、企业号、小程序。其中前三者都属于公众号范畴,开发的方法基本相似。

    (1)订阅号

    为媒体和个人提供一种新的信息传播方式,构建与读者之间更好的沟通与管理模式[4]。适用于组织和个人。

    订阅号的作用就是媒体社交,订阅号最主要是自媒体或媒体为读者用户提供优质的和他们感兴趣或有价值的内容,从而与关注者建立关系或使用户对自身品牌的认可。

    (2)服务号

    连接商家和用户,提供相关服务。为企业和组织提供强大的业务服务与用户管理能力,帮助企业快速实现全新的公众号服务平台[4]。不适用于个人,只适用于组织。

    服务号最主要是商业(组织)为客户提供优质的服务,从而与关注者建立关系或购买更多的服务和商品。

    (3)企业号

    连接员工、上下游、最终用户与社会共享资源,帮助企业实现互联网化。为企业客户提供应用入口,帮助企业和组织建立员工、上下游合作伙伴与企业IT系统间的连接。

    利用企业号,企业或第三方合作伙伴可以帮助企业快速、低成本的实现高质量的移动轻应用,实现生产、管理、协作、运营的移动化[5]。不适用于个人,只适用于组织。

    企业号的应用场景包括员工出差移动办公、管理一线员工、连接合作伙伴、提升服务能力等。企业号更关注安全,应用可配置,消息无限制,使用更便捷,丰富的应用,开放的平台。

    1.4.2 AJAX

    AJAX是一种可以实现网页异步局部刷新的技术,是当下动态网页所采用的一种常见技术。具体应用如:网页上的验证码验证、注册的时候的用户名验证,天气预报的刷新等。AJAX的应用使得网页上的数据更新不再使用刷新整个网页的方法,服务器在用户打开网页的时候已经将网页内容发送给浏览器,网页局部刷新时服务器只需要向网页发送相关数据即可,这样大大降低了服务器的负担[6]。

    从AJAX的命名可以看出AJAX和JavaScript是紧密相连的,JQuery是在JavaScript 的基础发展而来,AJAX和JQuery二者想必有一定的关联[7]。JQuery官方的确是提供了AJAX的实现方法,所以,AJAX有原生的和JQuery提供的两种实现方法,两者对比来看,AJAX原生的实现方法显得繁琐呆板,而JQuery提供的方法就显得简洁灵活许多,后者可以大大提高开发者的开发效率。JQuery AJAX方法的设置有:type、URL、data、dataType、success、error。其中type为AJAX方法的请求类型(post或者get),URL 为AJAX方法的请求地址,data为AJAX方法传给服务器的数据,dateTpye为服务器返回的数据类型,success中为请求成功后的操作,error中为请求失败后的操作[8]。

    一般设置服务器返回给AJAX函数的数据格式为JSON(JavaScript Object Notation,JavaScript 对象标记语言)格式,这是因为JSON格式的数据比较好解析,这就要开发者在数据返回之前将数据封装成JSON格式。

    1.4.3 Struts2

    Struts框架至今已经发展至第二版,有Struts1和Struts2两个版本[9]。Strut1和Struts2虽然都是Struts框架,但是Struts2对Struts1并没有继承性,相对Struts1而言,Struts2几乎是一个新的框架。Struts2之所以不是Struts1的升级版,是因为Struts1有通用性差、与ServletAPI耦合严重等弊病,Struts1的种种缺点使得Struts2抛弃了Struts1的核心思想,在WebWork的基础上发展出了Struts2[10]。相对于第一代Struts框架,Struts2的XML 配置文件简洁许多并且都有默认值,并且Struts2大大降低了与ServletAPI的耦合,成为一款通用可靠的框架[11]。

    Struts2框架是一个控制层框架,它的功能与Servlet相似,但功能却远远强于Servlet。Struts2的主要功能与Servlet相似,接收来自网页的数据并进行处理,处理完后返回数据或者跳转到其他网页。除此之外,Struts2中的OGNL(Object-Graph Navigation Language,对象图导航语言)标签与传统的的JSP标签相比简洁了许多,而且功能也更

    加强大,使得JSP页面可以几乎没有Java代码,各个标签之间还可以嵌套使用。Struts2参数自动填充功能也非常实用,网页传给Action的各种参数不用开发者去手动填充,开发者只需要命名好与网页参数变量相同的Action属性变量并设置好get、set函数,在Action初始化时Action中的各个变量的值将会被自动填充。

    在开发过程中使用Struts2与传统的Servlet相比要方便许多,大大地提高了开发的效率。

    1.4.4 Hibernate

    Hibernate是一款免费开源的独立框架,它不需要其他框架的支持[12]。Hibernate的数据库操作主要由Session对象来完成,在需要操作数据时创建Session对象,在操作结束后销毁Session对象以防止数据库读脏数据[13]。

    通常,Hibernate框架在系统开发中主要在持久层做交互工作,功能相当于JDBC (Java Data Base Connectivity,java数据库连接),但Hibernate相对JDBC而言方便太多。Hibernate不用像JDBC那样使用代码连接数据库,Hibernate只需要在配置文件里面配置好连接参数就可以完成数据库的连接。Hibernate可以根据数据库中的数据表反向生成实体类,是一种真正的面向对象开发框架,而传统的JDBC就需要开发者手动创建实体类,逐个属性编写,当数据表中的字段非常多的时候,实体类的创建将会异常艰苦,很可能会出现属性错误或者属性名错误等问题。Hibernate中已经封装好了基本的增删改查方法,如果需要自定义增删改查的方法,使用HQL(Hibernate Query Language,Hibernate 查询语言)语句即可,HQL语句与SQL(Structured Query Language,结构化查询语言)语句的差异不是很大,开发者很容易掌握[14]。

    将Struts2与Hibernate整合起来会使系统的开发效率与单纯的Servlet,JDBC相比有很大的提高。

    1.4.5 MySQL

    MySQL作为一个小型关系型数据库管理系统,目前在很多网站都有使用。占用磁盘空间小、运行速度快、免费、开放源代码、性能快捷、优化SQL语言、容易使用、多线程和可靠性、多用户支持、可移植性和开放源代码、遵守国际标准和国际化支持、为多种编程语言提供API(Application Programming Interface,应用程序编程接口)等都是其特点[15]。当然他也有不足之处,不能直接处理XML数据、不能提供任何OLAP(Online Analytical Processing,联机分析处理)功能。但这些不足并不能掩盖它的缺点[16]。

    MySQL本身不提供图形化的操作界面,需要在命令行操作数据库,虽然命令行操作数据库可以提升开发者对于操作命令的掌程度,但是在实际开发中,使用命令行操作数据库并不是一件明智的的事情。相对图于形化的数据库操作界面,命令行显然不够友好,所有操作都以命令的形式进行,操作的效率显然不如图形化界面,所以,在开发过

    程中,我们需要使用一种第三方MySQL图形化界面的软件进行辅助开发。第三方的MySQL图形化界面的软件有很多,收费的、免费的,根据实际情况选择合适的软件进行开发,本航空售票系统使用的是MySQL Administrator。

    1.4.6 Ngrok

    在做Web开发的时候,有些情况下需要开发者在外网测试本机的Web程序,而正常情况下,外网设备是无法访问本机网络的,所以,这种情况下就需要将本机网络映射到外网上去[17]。

    Ngrok 是一个反向代理,通过在公共的端点和本地运行的Web 服务器之间建立一个安全的通道。Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

    简单来说,就是通过Ngrok建立一个隧道,让用户在外网也也可以访问自己的电脑,通常我们是自己的电脑访问外网,这就是所谓的反向代理。

    微信公众号开发的时候,需要接入一个外网的IP地址,由于我们在自己的电脑上需要开发,测试很不方便,不可能每次都把代码上传到服务器,测试一次,所以这时候就需要用到Ngrok。

    当网站调试都完成后,如果网站需要上线,我们可以在MyEclipse 10中导出项目的war包,利用SVN将项目部署到百度BAE、新浪ASE等云服务器上。

    1.5 开发环境介绍与搭建

    根据业务类型可知基于微信公众平台的航空售票系统属于服务号范畴,开发的第一步就是在微信公众平台申请一个服务号,由于个人不能申请服务号,所以我申请了一个订阅号,通过订阅号中的测试号也可完成系统的开发,测试号具备服务号的大部分权限,所以开发过程中并没有太多的差异。

    在申请测试账号之后就可以开始搭建本地的开发环境了,本地主要的地开发工具为Ngrok,MyEclipse 10、Tomcat服务器、MySQL数据库。新建一个Web工程,将Struts2和Hibernate框架搭建好,并将工程部署到Tomcat服务器上,然后新建一个数据库,并将数据库与Hibernate框架连接起来,连接过程中需要用到事先准备好的JDBC驱动。本次开发之所以选择MyEclipse 10是因为MyEclipse 10是在Eclipse的基础上发展来的,集成了大量的插件和框架[18]。MyEclipse 10的功能高度集成,所以MyEclipse 10不用像Eclipse那样去安装各种插件,找各种jar包。MyEclipse 10是一个很稳定的开发和工具,并且在不断地更新,现在已经更新到2017版本了,这说明MyEclipse是大多数开发人员选择的开发工具,总之,使用MyEclipse 10来做系统的开发工具会使开发环境的搭建变的简单许多。

    本系统的开发环境搭建最关键的一步就是网络映射,将本机的地址映射到外网上去,以便微信服务器能够访问本机的Tomcat服务器。

    网络映射完成后还需要将微信公众平台上的配置信息填写正确,将appID、

    appsecret、URL、Token等信息填写好,其中URL为映射后的服务器地址。

    开发环境如图1.1和图1.2所示。

    基于微信公众平台的航空售票系统的设计与实现

    图1.1 微信公众平台配置信息

    其中appID、appsecert为系统自动生成的,Token自己随意填写但要与服务器端的Token保持一致。appID、appsecert、Token这三个重要信息一定要保密,如果这三个信息泄露,那么意味着公众号的后台服务器就暴露给别人了,别人可以利用这些信息对公众号后台服务器进行攻击,轻者服务器崩溃,重者造成严重的经济损失。

    基于微信公众平台的航空售票系统的设计与实现

    图1.2 项目目录

    其中WebRoot文件夹下有css、images、js等自建文件夹。css文件夹里为微信公众平台官方提供的样式文件,images文件夹下为网站的一些背景图片,js文件夹下为微信公众平台官方提供的JQuery和JQuery官方提供的文件。在项目自动生成的WEB-INF 文件夹下,分别自建了两个文件夹computerWebPages和weixinPages,一个用于存放电脑网页,一个用于存放手机网页。将网页放在WEB-INF文件夹下是为了防止有人通过

    URL恶意访问网站的某些网页,做一些危害网站安全性的事情。

    第二章需求分析

    2.1 可行性分析

    2.1.1 市场可行性

    根据报道,在2014年中国手机网民达到5.56亿人,手机网购者达到2.36亿人,移动网购在整个网上零售市场中的比例已经超过30%。截止2015年3月31日,微信月活跃用户数达5.49亿,人均日启动微信次数达11.47次,微信成为移动端最活跃的移动应用之一。微信在用户数、数量、社会粘性、支付等方面的优势带动了微信购物的高速发展。京东微信购物是一个很好的例子,京东微信购物在充分融合微信优势的基础上,继承京东商品资源,物流资源,货到付款等优质服务,成为移动网购市场中的重要组成。京东微信购物的成功表明,微信购物逐渐发展成为一种主流的的购物方式。近十年来,人们的生活水平不断提高,飞机这种交通工具不再是“富人”专属,工薪阶层也可以享受这种交通工具了,人们对机票的需求越来越高,这时就需要一种更加便捷的购票方式。基于微信公众平台的航空售票系统,即微信购票将会是一个很好的选择。微信购票和微信购物一样,是一种人们比较常见的购物方式,用户不用去学习它、适应它,直接就可以使用。它给用户带去的是一种全新的、方便快捷的购票方式。

    2.1.2 技术可行性

    本系统前台以JSP结合OGNL标签进行开发,后台采用Java语言进行开发,Java 语言开发的系统具有比较优越的通用性、移植性和安全性,这种系统可以应用于手机终端、个人PC、服务器等各种各样的终端上[19]。Java开发技术具有世界上最大的开发者群体,并且Java语言是开源性代码开发语言,因此它在物联网的时代会具有更加光明的发展前景。

    当今时代最为广泛使用和流行的编程语言就是Java,操作简单、面向对象设计、程序稳定、多线程并行等是它的特点。Java编程语言具有下面的这些优点:(1)面向对象的编程方法;

    (2)内置对多线程的支持;

    (3)Java语言编写的代码具有较高的安全性,当开发人员从网上下载别人的程序时,开发人员可能会担心所下载的代码是否为一段恶意的代码、木马程序或者病毒程序,如果开发人员使用的浏览器支持Java,那么开发者就可以安心的将Java程序安装并在本机运行,不用担心下载的程序是否会删除或者修改本机的文件;

    (4)多个不同功能的类相互组合,就可以构成一个基本的Java应用程序,而这其中的大部分的类都是开发人员自己编写,少许的类是开发人员们从类库中调用,这样开

    发人员在编写Java程序时,就可以动态的维护类库和程序。

    综上所述,利用Java语言来开发航空售票系统是可行的。

    本系统的结构为B/S(Browser/Server,浏览器/服务器模式)结构。B/S 结构的优点有很多,具体概括有如下几点:

    (1)分布性。只要有网络,就可以随时随地进行查询、浏览、处理业务[20]。

    (2)功能扩展简单方便。通过修改网页,增加服务器功能即可实现功能拓展。

    (3)维护简单。系统的升级只需要后台升级即可。

    (4)可跨平台,移植简单。

    B/S 结构系统的“一次开发、全平台通用”的特点是本系统最需要的。Java和JSP 都已经非常成熟了,面向对象的特性使得它们成为B/S结构系统开发的首选语言。Hibernate和Struts2也是两种很成熟的框架,虽然它们出现的时间较长,新的框架层出不穷,但它们核心思想是一致的,所以Hibernate和Struts2并不落伍,很多大型企业的网站项目都还在采用Hibernate和Struts2作为底层框架,其稳定性是得到认可的。本系统采用的都是成熟技术,所以技术上是可行的。

    2.1.3 经济可行性

    本系统开发采用的技术和工具大部分都是开源免费的,所以,在开发工具和技术的购入与授权费用方面不会花费太多。对于航空公司的资金储备来说,开发一个售票系统不是一件很难的事情。由于本系统属于B/S结构,所以在后期系统的维护和升级都只需要在后台完成即可,省去大量的客户端的维护和升级费用。而微信公众号的推广也非常简单,只要在原有的售票平台做一些简单的推广,有时候甚至不用推广,用户也会主动关注,当公众号的用户量达到一定程度,开发成本将会收回。

    2.2 业务分析

    好的业务过程对提升用户体验有很大的帮助,用户的体验直接关乎系统的活跃用户量,如果一个系统有着非常糟糕的用户体验,相信在一段时间之后,大多数的注册用户会抛弃它,转而使用另外的体验更好的系统。所以设计出合理的、人性化的业务流程,对于一个系统是至关重要的。本系统在认真分析了航空售票的业务过程之后,根据实际需求,设计了用户和管理员的业务流程。

    (1)用户业务流程

    从用户的角度,分析航空购票的过程,绘制出用户的业务活动图,如图2.1所示。

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    (3)注销

    为了保证微信用户的账户的安全性,在必要的时候,微信用户可以注销账户,注销后需要再次登录,才能使用相关功能。管理员的注销功能与用户的相同。

    (4)查询机票

    乘客输入出发城市、抵达城市、出发时间后,系统将查询到的航班信息展示出来。

    (5)购买机票

    根据查询出来的航班信息,用户选择所需的机票进行购买。

    (6)退订机票

    用户可以通过该功能,将符合退票条件的机票进行退票操作。

    (7)改签机票

    用户可以通过该功能,将符合改签条件的机票进行改签操作。

    (8)添加乘客信息

    用户可以通过此功能,为自己的账户添加乘客,在购票活动中可以直接选择乘客进行购票。

    (9)修改乘客信息

    通过该功能,用户可以对乘客的信息进行修改。

    (10)删除乘客信息

    通过该功能,用户可以删除不需要的乘客信息。

    (11)修改个人信息

    通过该功能,用户可以对自己除密码外的注册信息进行修改。如果要修改密码,用户可以使用修改密码功能。

    (12)查看旅游资讯

    该功能可以为用户提供实时的全球精选旅游资讯,喜爱旅游的用户可以实时查看旅游资讯。

    (13)附近景点

    通过定位确定用户所在的城市,推送给用户城市附近的景点信息,并且能够为用户提供地址、线路等信息。

    根据用户的业务需求,绘制用例图,如图2.3所示。

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    退票、改签

    图2.3 用户用例图

    2.3.2 管理员的功能需求

    管理员的功能需求如下:

    (1)注册

    为了网站和管理员用户的安全性,管理员用户密码将被写在配置文件里,只有网站维护人员,有最高权限的人员才能给网站分配新的管理员。

    (2)登录

    通过管理员登录通道,管理员输入账号和密码进行登录。

    (3)添加航班信息

    通过该功能,管理员将新的航班信息添加到数据库中。

    (4)查询航班信息

    通过该功能,管理员可以查询到所需的航班信息。

    (5)修改航班信息

    对于一些信息发生改变的航班,管理员可以通过该功能对其进行更新。

    (6)删除航班信息

    对一些已经过期的航班信息,管理员可以通过该功能对过期航班信息进行删除。

    (7)查询用户信息

    通过该功能,管理员可以查询单个用户信息或者全部用户信息。

    (8)修改用户信息

    在合法的情况下,通过该功能,管理员可以修改数据库中用户的注册信息。

    (9)删除用户信息

    对于一些过期的用户信息,管理员可以对其进行删除,以保证系统数据库数据的有效性。

    (10)重置用户密码

    重置密码功能和用户修改密码功能是不同的两个功能。修改密码是用户自己对密码进行修改,前提是用户记得自己的密码,而重置用户密码是管理员的权限,是管理员对密码进行重新设置,该功能触发的前提是,用户向管理员发出密码重置的申请。在用户没有发出申请的情况下,管理员不能擅自对用户的密码进行重置。

    (11)导出用户信息

    当航空公司有导出用户信息的需求的时候,管理员可以通过该功能,将用户的信息以Excel格式导出。

    根据管理员的业务需求,绘制用例图,如图2.4所示。

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    查询航班信息

    注册

    图2.4 管理员用例图

    2.4 非功能性需求

    2.4.1 性能需求

    根据Ngrok工具记录显示,对管理员操作的平均响应时间为0.6秒,最长响应时间2.0秒。对用户操作的平均响应时间为0.5秒,最长响应时间1.5秒。更新处理方式应该为立即更新,业务处理时间在1-2秒。数据的处理和传输时间在1-3秒。系统对瞬时大量用户的访问要有一定的处理能力。

    2.4.2 适应性能力需求

    系统需要适应不同尺寸,不同分辨率的设备。系统需要有一定的拓展性,当出现新

    的需求,系统需要能够快速进行拓展。系统需要有适应不同运行环境的能力。系统在出现问题之后能够在较短时间内恢复到出现问题前的状态。

    第三章概要设计

    3.1 系统架构

    系统的架构设计对于整个系统的开发至关重要,也影响着系统的稳定性。系统架构中的每一层都有它自己的职能,分工明确,各个层负责本层的工作,不能身兼多职,体现出“高内聚、低耦合”的原则。如果系统没有一个好的架构,编码过程中可能会出现逻辑混乱,导致各种职责的类糅合在一起。这时,如果系统一旦出现问题,将是灾难性的,所有的类都有可能牵连其中。如果系统分层明确,异常或者错误将会被锁定在一块确定的、较小的区域,则问题的解决将会变得简单许多。

    根据系统的特性,对系统的架构进行了设计,系统架构如图3.1所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.1 系统架构图

    3.2 用例设计

    用例设计是对每个需求的详细分解,把用例细化到每一个步骤,为后续的编码做出规划。根据用户和管理员需求分析中的用例图和活动图总结分析可知,用户和管理员参与的用例基本一致。本系统的主要用例为增删改查、注册、登录、注销。下面以用户的主要功能用例为例,对用例的具体过程进行详细地描述。

    3.2.1 用户注册用例

    用户注册用例描述了用户注册的详细步骤和系统遇到异常情况的处理步骤,该用例的用例文档如表3-1所示。

    表3-1用户注册用例文档

    基于微信公众平台的航空售票系统的设计与实现

    3.2.2 用户登录用例

    用户登录用例描述了用户登录时的步骤以及验证情况,该用例的用例文档如表3-2所示。

    表3-2用户登录用例文档

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    3.2.3 用户注销用例

    用户注销用例描述了用户注销登录信息的步骤,该用例的用例文档如表3-3所示。

    表3-3用户注销用例文档

    基于微信公众平台的航空售票系统的设计与实现

    3.2.4 用户修改个人信息用例

    用户修改个人信息用例描述了用户修改个人信息时的步骤以及系统对异常情况的处理方式,该用例的用例文档如表3-4所示。

    表3-4 用户修改个人信息用例文档

    基于微信公众平台的航空售票系统的设计与实现

    3.2.5 用户修改密码用例

    用户修改密码用例描述了用户修改密码时的步骤以及一些必要信息,该用例的用例文档如表3-5所示。

    表3-5 用户修改密码用例文档

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    3.2.6 用户管理乘客信息用例

    用户管理乘客信息用例描述了用户对乘客信息的添加、修改、删除操作,该用例的用例文档如表3-6所示。

    表3-6 用户管理乘客信息用例文档

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    3.2.7 用户查询航班用例

    用户查询航班用例描述了用户查询机票时的查询条件、步骤、以及系统对异常情况的处理方法,该用例的用例文档如表3-7所示。

    表3-7 用户查询机票用例文档

    基于微信公众平台的航空售票系统的设计与实现

    3.2.8 用户预定机票用例

    用户预定机票用例描述了用户预定机票的流程,是本系统的核心流程之一,该用例的用例文档如表3-8所示。

    表3-8 用户预定机票用例文档

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    3.2.9 用户退票用例

    用户退票用例描述了已经购票的用户退票的流程,该用例的用例文档如表3-9所示。

    表3-9 用户退票用例文档

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    3.3 数据库设计

    数据库是整个系统绝大部分的数据来源和数据存储的地方,数据库设计的是否合理影响着系统整体的运行效率。数据库中每个表的设置要合理,既不浪费又不冗余。每个字段的设置既不太长,也不太短,要留有一定的扩充空间。

    (1)用户表

    用户表主要在数据库中存储用户的基本信息,根据前期的需求分析,设计出用户数据表。其中用户的密码是加密保存的,根据不同的加密技术,加密后的字段长度不一样,必须要根据实际情况去设置字段长度,保证字段长度够用。用户的数据表如表3-10所示。

    表3-10用户数据表

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    用户实体图如图3.2所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.2 用户实体图

    (2)航班表

    航班表主要在数据库中存储航班的基本信息。根据前期的需求分析,设计出航班数据表。其中,出发时间和抵达时间的字段数据格式为DATETIME格式。在存储时间数据的时候,要按照DATETIME数据格式存储,Java中对应的格式为TIMESTAMP格式。读取时间数据的时候,由于DATETIME格式的数据非常精确,所以,可以截取其中重要的部分来读取,读取之前要先将DATETIME格式数据转换成字符串类型的数据。航班的数据表如表3-11所示。

    表3-11航班数据表

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    航班实体图如图3.3所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.3 航班实体图

    (3)乘客表

    乘客表主要在数据库中存储乘客的基本信息。根据前期的需求分析,设计出乘客数据表。由于本系统采用实名制购票,所以,乘客姓名和乘客身份证号码为必填字段且必须都是真实的。乘客的数据表如表3-12所示。

    表3-12乘客数据表

    基于微信公众平台的航空售票系统的设计与实现

    乘客实体图如图3.4所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.4 乘客实体图

    (4)订单表

    订单表主要在数据库中存储订单的基本信息,根据前期的需求分析,设计出订单数据表。订单记录了用户的购票信息,是用户取票的凭据之一,系统会根据乘客的下单信息自动生成订单。订单的数据表如表3-13所示。

    表3-13订单数据表

    基于微信公众平台的航空售票系统的设计与实现

    订单实体图如图3.5所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.5 订单实体图

    (5)各数据表之间的关系

    各个实体之间的联系如图3.6所示。

    基于微信公众平台的航空售票系统的设计与实现

    图3.6 实体联系图

    与其他信息不同,出于安全考虑,管理员的信息将不会被存储在数据库中,所以在

    这里没有设计管理员的数据表,管理员包含用户名和密码这两个属性。

    第四章详细设计

    4.1 微信服务器端

    4.1.1 管理员登录

    为了网站的安全,管理员登录功能采用读取配置文件中的管理员的用户名和密码,与登录人员输入的用户名和密码进行匹配,匹配成功则允许登录,否则拒绝登录。读取配置文件的时候,需要注意文件的路径问题,注意区分相对路径和绝对路径。

    管理员的配置文件如图4.1所示。

    基于微信公众平台的航空售票系统的设计与实现

    图4.1 管理员配置文件截图

    4.1.2 菜单的创建与删除

    (1)创建菜单

    微信公众号创建菜单是采用JSON数据来传送菜单格式以及列表,创建菜单除了需要菜单数据,还需要appID、appsecret以及access_token三个参数。首先利用已知的appID 和appsecret两个参数访问微信服务器access_token接口地址,获取access_token。然后,利用获取到的access_token值和菜单JSON数据到微信服务器创建公众号的菜单。公众号的菜单创建一次即可,不用每次启动项目时都重新创建,所以,将公众号的菜单创建方法单独放在一个main方法里比较好。

    (2)删除菜单

    当现有的菜单不再满足需求的时候,可以将菜单删除,然后重新创建。菜单的删除方法相对菜单的创建方法而言较为简单,利用获取的access_token值访问微信服务器菜单删除接口地址即可。

    4.1.3 数据库操作

    航班信息、用户信息管理涉及的操作基本都为数据库的增删改查,本系统将大部分

    的数据库操作交给Hibernate框架实现。

    (1)添加航班信息。

    将制定好的航班信息添加到数据库中,使用Hibernate原生的save方法将航班信息插入到数据库中,核心代码如下所示:

    public String saveFlight() {

    FlightAction flightAction=new FlightAction();Flight flight=new Flight();

    flight.setEcPrice(ecPrice);flight.setEcTicketRemain(ecTicketRemain);

    flight.setEcTicketTotal(ecTicketTotal);flight.setFcPrice(fcPrice);

    flight.setFcTicketRemain(fcTicketRemain);

    flight.setFcTicketTotal(fcTicketTotal);

    flight.setFromCity(fromCity);flight.setFromTime(fromTime);

    flight.setToCity(toCity);flight.setToTime(toTime);

    flight.setFlightNumber(flightNumber);flight.setAirline(airline);

    FlightDAOImpl flightDAOImpl=new FlightDAOImpl();

    flightDAOImpl.saveObject(flight);

    return SUCCESS;

    }

    (2)查询航班信息

    根据飞机的出发城市,抵达城市和起飞时间进行条件查询。条件查询需要自定义HQL查询语句,查询航班信息核心代码如下所示:

    public List findFlightByCityAndTime(String fromCity, String toCity,

    Timestamp fromTime) {

    Listlist=null;

    try {String hql="from Flight where fromCity=""+fromCity+""

    and toCity=""+toCity+"" and fromTime like"%"+

    (fromTime.toString()).substring(2, 10)+"%"";

    Query query=session.createQuery(hql);list=query.list();

    } catch (Exception e) {

    e.printStackTrace();if (transaction!=null) {transaction.rollback();

    }}finally{session.close();}return list;

    }

    (3)删除航班信息

    先查找出需要删除的航班信息,然后使用Hibernate中的delete方法对其进行删除。其中航班信息界面的信息显示使用了OGNL标签的迭代器,没有使用传统的内嵌Java 代码,OGNL标签的使用,使JSP页面的编写更加简单,核心代码如下所示:public void deleteObjectById(Integer id) {

    try {Flight flight=(Flight)session.get(Flight.class, id);

    session.delete(flight);http://www.wendangku.net/doc/a4f7297642323968011ca300a6c30c225901f018.htmlmit();

    } catch (Exception e) {e.printStackTrace();if (transaction!=null) {

    transaction.rollback();}}finally{session.close();

    HibernateSessionFactory.getSessionFactory().close();}}

    该功能与删除航班信息类似,先查找出需要修改的航班信息,然后进行修改。其中修改航班信息时需要传递给Action一个隐含参数id,让Action利用id执行相关的操作。修改航班信息的界面与添加航班信息的界面类似,其中网页显示的数据就是根据上一张网页传过来的id查询出来的,核心代码如下所示:

    public String updateFlight() {

    FlightAction flightAction=new FlightAction();

    FlightDAOImpl flightDAOImpl=new FlightDAOImpl();

    Flight flight=new Flight(ecPrice, ecTicketTotal, ecTicketRemain,

    fcPrice, fcTicketRemain, fcTicketTotal, fromCity, fromTime, toCity,

    toTime, airline, flightNumber);flight.setId(id);

    flightDAOImpl.updateObject(flight);

    return SUCCESS;

    }

    (5)查询所有用户信息

    对数据库中的用户做一次全局查询,将查询的结果放在一个list里面,并利用迭代器iterator将list展示到网页上,其中用户信息的载体为一个table控件。

    (查询用户信息代码与查询航班信息类似,这里不再赘述,以下同理)

    (6)查询特定用户信息

    根据用户名查询用户信息,将用户的用户名拼接到HQL语句中,使用Hibernate的查询方法将用户信息查询出来。

    (7)删除用户信息

    删除用户信息与删除航班信息的逻辑处理过程一样,选定要删除的用户信息后利用用户的id,调用Hibernate原生的delete方法删除对应用户信息。

    (8)修改用户信息

    修改用户信息的处理过程和修改航班信息一样,但管理员对用户信息的修改必须获得相关的授权。

    (9)重置用户密码

    管理员作为网站的管理者,管理员可以在其职权范围内对网站进行管理。在用户发出重置密码的请求时,管理员可以依照规定对用户的密码进行重置,默认重置后的新密码为123456,核心代码如下所示:

    public String resetPasswordByUserName() throws NoSuchAlgorithmException, UnsupportedEncodingException {

    UserAction userAction=new UserAction();

    UserDAOImpl userDAOImpl=new UserDAOImpl();

    String md5Password=MyMD5Util.getEncryptedPwd(newPassword);

    userDAOImpl.changePassword(userName, md5Password);

    return SUCCESS;

    }

    实现导出用户信息需要用到Apache POI中的类和方法,在使用Apache POI中的类和方法之前,先把相关jar包放到项目的lib文件夹下。

    4.2 微信端

    4.2.1 获取微信账号信息

    开启网络映射,从命令程序中进入Ngrok所在文件夹,然后输入命令:ngrok -config ngrok.cfg -subdomain evan 8080,回车开启网络映射。网络映射开启成功后,效果如图4.2所示。

    基于微信公众平台的航空售票系统的设计与实现

    图4.2 网络映射截图

    访问微信服务器,获取关注本系统的微信用户的微信昵称、openid、头像URL地址等相关信息。访问微信服务器分为三个步骤:

    第一步,获取code,即微信网页的授权码;

    第二步,通过前面获取的code来获取网页授权接口调取凭证access_token和用户唯一标识openid;

    第三步,用access_token和openid来获取微信用户的基本信息。

    4.2.2 数据库操作

    微信端的数据库操作逻辑与服务器端管理员的操作逻辑相似,都是利用Hibernate 框架配合HQL语句来实现数据库操作。

    (1)登录

    根据用户名去查找数据库中已经加密过的密码,然后将用户输入的密码与数据库中

    查询出的密码进行校验。校验通过则允许登录,否则登录失败。其中验证码的校验是为了防止别人利用恶意瞬时大量登录来攻击网站。

    (2)注册

    用户注册的时候,系统会做一系列的验证来保证用户注册信息的合理性。验证主要分两种,一种是JavaScript验证、一种是AJAX验证,它们都是为了保证用户输入的信息的正确性。JavaScript使用正则表达式对用户输入的信息进行验证,AJAX在服务器端对用户输入的信息进行验证。验证规则设定如下:

    ●用户名为数字与字母的组合,长度不小于6个字符,不大于20个字符,且必须

    是未被注册的用户名。

    ●密码为任意字符的组合,长度不小于6个字符,不大于20个字符。如果用户名

    为空,则不允许输入密码,用户输入的用户名通过验证后,系统才允许用户输入密码。

    ●确认密码必须与密码的字符串相同。用户输入的密码通过验证后,系统才允许

    用户输入确认密码。

    ●真实姓名为汉字组合,必须为两个或两个以上的汉字。在用户输入的确认密码

    通过系统验证后,用户才可以在真实姓名栏进行填写。

    ●性别为用户的真实性别,用户在单选框上勾选,默认性别为男。

    ●身份证号为15位数字或者17位数字加字母x,身份证号必须要符合中华人民共

    和国居民身份证号码的规范。真实姓名验证验证通过后,系统才允许用户在身份证号栏填写信息。

    ●电子邮箱为用户正在使用的有效的邮箱,邮箱必须为……@…….com形式的字

    符串。用户身份证号验证通过后,系统才允许用户输入电子邮箱。

    ●验证码为中文提示右侧系统自动生成的四个字符,是为了防止别人使用恶意注

    册的方式攻击网站。

    AJAX在服务器端对用户输入的信息进行验证,核心校验代码如下所示:

    { $.ajax( {url : "checkCode",data : {verificationCode : $("#verificationCode").val()}, type : "post",dataType : "json",async: true,cache: false,success : function(result) {

    if ("true"==result.flag) {$("#lb").text("通过!");}

    else{$("#lb").text("验证码错误!");}},

    error : function() {alert("请求失败");}});

    return true;}

    }

    function refresh() {

    document.getElementById("image").src="VerificationCodeAction?+

    Math.random()"+new Date();

    }

    (3)注销

    用户登录之后可以选择注销登录,注销登录的实现原理比较简单,将用户登录后储

    存在Session中的用户名使用remove方法移除,即可实现注销登录。

    (4)修改个人信息

    修改个人信息与修改航班信息地处理逻辑相同,系统先根据Session中的用户名在数据库中查询出用户的个人信息,然后用户修改个人信息,最后系统使用拼接好的HQL 语句对用户的个人信息进行更新。

    (5)修改密码

    修改密码之前系统需要确认旧密码,旧密码校验成功后用户才能进行修改操作,校验算法为前文提到的MD5加密校验算法,核心代码如下所示:

    public String changePassword() throws NoSuchAlgorithmException,

    UnsupportedEncodingException {

    String pwdInDb=daoImpl.getMd5Password(userName);

    try {if(MyMD5Util.validPassword(md5Password, pwdInDb)){

    }else{return ERROR;}

    String newMd5Password=MyMD5Util.getEncryptedPwd(newPassword);

    daoImpl.changePassword(userName, newMd5Password);return SUCCESS;

    }

    (6)个人中心

    个人中心界面展示了机票订单、修改个人信息、修改密码功能选项,用户点击对应的按钮,系统根据用户点击的按钮内部的超链接,通过不同的Action进入不同的界面。进入个人中心之前,微信用户需要先登录航空售票系统。

    (7)管理乘客信息

    添加乘客信息的过程和用户注册的过程相同,删除乘客信息,修改乘客信息和管理员删除、修改用户信息的过程相同,都是使用Hibernate对数据库进行操作。

    (8)查询航班信息

    不管微信用户是否登录都可以对航班信息进行查询,查询航班的处理逻辑与管理员查询航班信息相同,根据查询条件拼接HQL语句对数据库进行查询,并将查询的结果用table控件展示出来。

    (9)预订机票

    用户需要先登录,然后查询出所需的机票,并勾选出即将购买的机票,最后选择乘客并提交订单。如用户没有注册,用户可以快速注册。如果用户没有添加乘客,用户可以在预定的时候添加乘客。预订机票时还涉及到选择航班和座位类型,在本系统中,选择航班是利用预订按钮超链接上的航班id实现的,超链接将航班id传到后台,系统通过查询数据库来确定用户选择的是哪一趟航班。选择座位类型是利用radio单选框实现的,radio的value值为座位的类型,form表单将radio的value的值传到后台,系统对座位类型进行判断并计算出票价。

    (10)退票改签

    退票操作即将微信用户订单删除,并将数据库中的机票剩余数量加一。改签操作即先退票然后根据条件去查询相关的票然后进行改签。

    4.2.3 网络功能

    (1)旅游资讯

    访问网易新闻API接口,获取游资讯JSON数据,解析出所需数据并展示出来。在解析JSON数据之前将JSON数据放到在线解析器里进行解析,观察一下它的数据结构,然后再一步一步地解析。

    (2)附近景点

    访问百度地图API获取定位,并将获取到的JSON数据中的经度、纬度解析出来,再用解析出来经纬度访问百度地图API查询附近景点。如果没有百度地图的APIkey,那么首先需要申请一个百度账号,百度账号是通用的,例如百度贴吧、百度网盘等,然后到百度地图API去申请一个APIkey,最后将APIkey填写到超链接上就可以使用百度地图API获取定位了。

    (3)智能客服

    微信公众平台中本身自带客服功能,但由于本系统目前并没有真正的客服值守,所以,利用图灵机器人暂时充当客服的角色。图灵机器人可以完成一些简单的回复工作,例如:天气预报、公交路线等。客服功能的实现步骤为:首先将微信用户输入的文字信息解析出来,并用这些信息去访问图灵API,然后将返回的信息封装成标准的微信XML 格式,再将信息返回给微信服务器,微信服务器将消息解析后返回给微信用户。

    第五章运行结果分析与展望

    5.1 运行结果

    5.1.1 服务器端运行结果

    (1)管理员登录

    管理员输入用户名和密码,系统校验正确后,即可登录,管理员登录界面如图 5.1所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.1 管理员登录界面

    (2)微信公众号菜单

    管理员创建的微信公众号菜单如图5.2所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.2 微信公众号菜单截图

    (3)管理员添加航班信息

    管理员按照规定输入需要添加的航班信息,点击添加航班按钮即可完成添加,管理员添加航班信息的界面如图5.3所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.3 管理员添加航班信息界面

    (4)管理员查询航班信息

    管理员输入查询条件、点击查询航班信息即可查询出所需的航班信息,管理员查询

    航班信息界面如图5.4所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.4 管理员航班查询界面

    (5)管理员删除航班信息

    管理员先查询出要删除的航班,点击删除按钮即可完成删除,管理员删除航班信息

    界面如图5.5所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.5 删除航班信息界面

    (6)管理员修改航班信息

    管理员先查询出需要修改的航班信息,然后修改并点击确认按钮即可完成修改,管

    理员修改航班信息界面如图5.6所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.6 管理员修改航班信息界面

    (7)管理员查询所有用户信息

    管理员点击查询所有用户信息按钮就可以查询出所有用户的信息,查询结果界面如

    图5.7所示。

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    图5.7 所有用户信息结果界面

    (8)管理员查询特定用户信息

    管理员输入用户的用户名并点击查询按钮即可查询出该用户的信息,查询结果界面

    如图5.8所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.8 查询特定用户信息结果界面

    (9)管理员重置用户密码

    管理员输入用户的用户名和新密码并点击确认重置按钮即可对该用户的密码进行

    重置,管理员重置用户密码界面如图5.9所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.9 重置用户密码界面

    5.1.2 微信端运行结果

    (1)微信用户登录

    微信用户输入用户名、密码、验证码,系统校验成功即可登录,微信用户登录界面如图5.10所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.10 微信用户登录界面

    (2)微信用户注册

    微信用户按照要求输入注册信息,系统校验成功后点击注册按钮即可完成注册,微信用户注册界面如图5.11所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.11 微信用户注册界面

    (3)微信用户查询航班信息

    微信用户输入查询条件、点击查询按钮即可查询出所需的航班信息,微信用户查询航班信息界面如图5.12所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.12 微信用户查询航班信息界面

    (4)微信用户预订机票

    微信用户先查询出所需航班信息列表,然后选择航班并选择座位类型和乘客,点击确认按钮完成预定,微信用户预订机票界面如图5.13所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.13 微信用户预订机票界面

    (5)微信用户个人中心

    微信用户点击用户名即可进入个人中心,微信用户个人中心界面如图5.14所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.14 微信用户个人中心界面

    (6)微信用户订单

    微信用户在个人中心点击机票订单按钮即可查看已订机票的情况,微信用户我的订单界面如图5.15所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.15 微信用户我的订单界面

    (7)微信用户修改密码

    微信用户修改密码,需要确认旧密码后才能进行修改操作,微信用户修改密码界面如图5.16所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.16 微信用户修改密码界面

    (8)微信用户旅游资讯

    微信用户在公众号菜单中点击旅游资讯按钮即可查看旅游资讯,旅游资讯界面如图5.17所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.17 旅游资讯界面

    (9)微信用户附近景点

    微信用户在公众号菜单中点击附近景点即可查看所在地附近的景点,附近景点界面

    如图5.18所示。

    基于微信公众平台的航空售票系统的设计与实现

    基于微信公众平台的航空售票系统的设计与实现

    图5.18 附近景点界面

    (10)微信用户智能客服

    微信用户直接在聊天输入框里输入信息即可与智能客服互动,智能客服运行效果如图5.19所示。

    基于微信公众平台的航空售票系统的设计与实现

    图5.19 智能客服运行效果图

    5.2 运行结果分析

    5.2.1 路径问题分析

    如果需要在在JSP页面引入自定义或者第三方的JavaScript文件时,需要在绝对路径前加上${pageContext.request.contextPath},例如:

    将网页放在WEB-INF下的文件夹下后,两个网页之间的跳转将不能通过超链接上的网页路径跳转,需要在Action的XML文件中配置跳转路径。

    5.2.2 中文乱码问题分析

    当Action传送的数据包含中文时,要设置传送方式为post。默认的传送方式为get,传送信息会出现在超链接上,中文变成乱码。为了保证中文的正常显示和传送,页面编码,request,response,数据库需要将格式设为“UTF-8”。

    5.2.3 Struts2问题分析

    自定义的过滤器要放在Struts2过滤器的前面。在使用Struts2自动装填功能的时候

    要先将Action初始化,若Action没有进行初始化,Action中的属性值将会为空,程序运行时会报空指针异常错误。

    5.2.4 Hibernate问题分析

    Hibernate中的Session在使用结束后要关闭,一般Session关闭才代表着事务提交,而且不关闭Session的后果是,随着系统的运行,数据库连接数将逐渐增多,最终导致数据库拒绝连接。数据库拒绝连接后,重新启动应用,原有连接将释放,此时应用又可正常运行。

    transaction需要提交,http://www.wendangku.net/doc/a4f7297642323968011ca300a6c30c225901f018.htmlmit(),如果不提交数据库的数据将不会更新。

    在拼接HQL字符串时,字符串类型的变量要加单引号,整型变量保持原样。例如:String hql=" from User where userName=""+userName+""and password=""+password+""";hql="update Flight set ecTicketRemain=ecTicketRemain-1 where id="+id。

    由于刚开始密码字段设置的长度不够,导致使用Hibernate插入数据时报错,经过MD5加密的密码长度为60,所以密码字段的长度至少为60个字符。

    数据库的设计上我觉得还可以优化,将数据表设计为可以多表连接查询的数据表,这样可以减少一些表的字段,避免信息重复存储,降低数据库占用的磁盘存储空间。

    5.2.5 调试问题分析

    在毕业设计的前期,我的调试方法是将程序中的变量的值在控制台输出,看变量的值是否为空,或者变量的值知否错误,最后我发现这种方式比较浪费时间,于是我重新去看了一下以前搁置的断点调试、debug。调试程序是一个开发者的必备技能,断点调试和debug是一个开发者必须学会的,它们可以让我们快速的找到程序中的问题。

    在有些情况下,打开网络映射的时候会提示8080端口无效,这个时候本机上的Tomcat服务器是运行状态,再关掉服务器等待一段时间后,网络映射可以开启成功。分析原因,应该是服务器占用了8080端口导致网络映射开启失败,应该先开启网络映射再开启服务器,两者顺序最好不要颠倒。

    使用MyEclipse 10自带的浏览器调试网页JavaScript文件十分的不方便,几乎无法调试,使用Google Chrome浏览器,F12调出控制台,调试起来就很方便了。

    网站在调试过程中突然崩溃,所有网页都无法访问,项目目录没有报错,网页报404的错误码。这个时候很可能是XML文件出现了问题,先查看控制台信息,在从XML 中查找问题。

    当新配置的Action在XML文件配置无误的情况下无法访问,这个时候可能是新添加的jar包出现了问题,可能是版本过低或者jar包冲突。这个时候需要查看error信息,找到相应的包,删除或者替换。

    项目包上有红色感叹号但项目运行正常,应该是项目中的jar包出现了问题,可以去error信息栏去查看错误信息。

    5.3 展望

    新的技术在不断地出现,现有的技术也在不断地更新。本航空售票系统不仅仅着眼于现有的技术,本系统会根据实际情况对现有的技术进行更新和采用新的技术。目前微信小程序和大数据是两种比较热门的技术,对于本系统来说也是两种可以使用的技术。

    微信小程序的用户体验更加接近手机APP,但是它并不需要下载、安装,它是在微信公众号的基础上发展而来的,可以看作是微信公众号的升级与强化,能给用户更加好的使用体验。微信公众号可以直接关联微信小程序,系统不需要额外的向用户推广小程序。目前,春秋航空已经发布了微信小程序,看来微信小程序很可能会引领下一个微信潮流。

    大数据这个名词已经火了很长一段时间,到现在也没有任何平静的趋势,那么大数据到的可以我们带来什么呢?正好,大数据将会是我研究生阶段的研究方向。立足本系统,下面分析下大数据能给航空售票系统带来什么。通俗说,大数据就是大量、海量的数据,从海量的数据中获取一些有价值的信息。航空售票系统涉及的信息有很多,如航班的制定、航线的制定、旅客信息、客流量、机票价格等。这些信息看似杂乱无章,但是如果用上大数据,用大数据去分析这些杂乱的信息,大数据可以从中分析出很多有用的信息,例如,客流量比较大的航线,航线中某个区域出现恶劣天气的概率,机票销售量较大的时间段,机票销售量较大的机型等信息。航空公司如果能够合理的利用这些信息,不仅能降低运营成本、保证系统的稳定性、提高利润和工作效率,也能减少航班延误,给旅客更加优惠的机票价格和更好的服务。本航空售票系统如果能够与大数据相关的技术相结合,那么系统的价值也将会成倍增长。

    综上所述,未来微信小程序和大数据将会是很多网络应用的发展方向,本系统会根据实际情况利用这两种技术进行完善和升级。

    总结

    从开始准备毕业设计到完成系统的编码差不多经历了两个月的时间,在这两个月的时间里,我的收获是巨大的,前所未有的。整个项目做下来,我走完了一个项目从构思到实施最后实现的全部流程,从最开始的无从下手到最后的思路涌现。

    刚刚确定毕业设计的题目的时候,我是迷茫的,我不确定自己能不能完成这个毕业设计,我对自己的能力产生了疑问,虽然心存疑问,但我并没有退缩。什么不会就学什么,无从下手就先看一看别人怎么做的。对于项目的搭建步骤与结构,我刚开始并没有太多的思路,于是我从网上搜集了一些项目,看别人是如何搭建项目的,弄清楚每一层的分工,怎样分层使得项目既结构合理又稳定高效。结合自己项目的实际情况,我对自己的项目的结构做出了规划。

    万事开头难,项目的架构解决后,接下来的工作按部就班的进行,根据前期设计的数据表,把数据库的表都建好,在建表过程中,表的字段名的命名规则应该规范,在以前的数据库编程中我并没有太在意这方面的细节,这次毕业设计的项目比较大,表和字段名都比较多,所以在命名上一定要规范。

    由于以前做过的课程设计大部分都是单机版的,没有涉及到网络、网络请求,加密等相关的操作,所以对于这部分,我的知识是匮乏的,既然不会那就要学习。根据自己的的疑问,我在网上搜索别人的解决办法,将多种解决办法都亲自测试一遍,弄懂实现原理并编写出能解决问题的代码。

    在毕业设计的过程中,我养成了看API文档的习惯,在以前的课程设计中,我几乎没有接触到新技术,都是一些课内知识,阅读API文档的机会很少,或者我没有阅读API文档习惯。本次毕业设计是基于微信公众平台的,所以开发主要是围绕微信公众平台来展开的,开发过程中需要多次用到微信公众平台提供的接口,这些接口的使用必须要先阅读微信公众平台开发者文档。本系统还用了网易API、百度API、图灵API接口,这些接口的使用都需要阅读相关文档。在不断发现问题的过程中去不断地解决问题,系统得以逐步的完善。通过这次API接口的使用让我开阔了视野,但我觉得我的视野还不是很开阔,在项目快要完成的时候我了解到了WebService,WebsService相对于API接口来说功能更强大,而且免费,再往后的研究生学习过程中,我一定会对WebService 做深入的了解。

    博客是一个很好的学习平台,学会读博客,利用互联网资源来学习很重要。本次毕业设计的很多知识都是我从博客上学习来的,自己不断地摸索,不断地调试,直到实现预定的功能。在查看别人博客之余我发现开发工具的选择也很重要,具体来说开发工具的版本选择很重要,本次开发用的MyEclipse 10的版本相对比较老,其中集成的框架的版本也比较老,虽然旧版本的框架和新版本的框架并没有特别大的差距,但是新版本对旧版本的一些类和方法做了一些更新或者删除,对一些漏洞进行了修复,所以使用版本新而且比较稳定的开发工具是很有必要的。

    系统的设计过程让我学习到了很多知识,也让我找到了学习的方法,解决问题的方法,也让我明白了,开发就是一个不断学习的过程,只要还在从事开发相关的工作就要不断的学习。由于我的知识水平和能力有限,系统做得比较粗糙,有很多不尽人意之处,还有一些功能没有实现,但我会记住这些不足之处,在以后的深造过程中,弥补自己的知识漏洞,提高自身的能力和知识水平。

    致谢

    这次毕业设计让我学习到很多新的知识的同时也让我巩固了以前所学的知识,让我从无从下手到自主的拓展系统功能,让我学会了将知识应用于实践,总之对我的程序开发能力有很大的提升。这次毕业设计总共经历了大概两个月的时间,一边上本硕连读的课,一边做毕业设计,在经历了不断编程和测试,我终于完成了系统的设计和初步实现,在这次毕业设计的两个月,我遇到了很多的些困难,一些我自己解决了,一些问题我尝试很多次后也得不到解决,这个时候,我向老师还有同学寻求了帮助,在老师和同学那里我的问题得到了解决。

    本次毕业设计最终能够完成,首先要感谢刘菲老师,刘菲老师既是我的班主任也是我的导师,刘菲老师帮助我找到了毕业设计的方向,不仅教会我专业方面的知识,还在这次毕业设计过程中对我认真负责,提出一些我在毕业设计过程中出现的问题和建议,还教会了我怎样规划一个系统,怎样提高编程能力。其次要感谢同学们的帮助,在编程过程中,同学们也给了很好的建议,通过互相交流也学到了各自的优点。最后要感谢相关文献、博客的作者和学校的支持,没有他们提供的“软件”知识和“硬件”条件,我也不能顺利的完成这次毕业设计。

    参考文献

    [1] 朱超峻. 基于微信的新型移动电子商务[J]. 科技资讯,2015(05):159-160.

    [2] 李满玲. 浅谈法院微信公众平台建设[J]. 通讯世界,2015(19):213-214.

    [3] 黄楚新,王丹. 微信公众号的现状、类型及发展趋势[J]. 新闻与写作,2015(07):7-11.

    [4] 郭娜,刘颖,沈焱萍. 浅议“微时代”如何利用微信搭建“大学计算机基础”学习

    平台[J]. 福建电脑,2014(05):167-168.

    [5] 李书钦,李敏,马时来. 基于微信企业号的移动教学服务平台设计与实现[J]. 计算机

    时代,2016,No.285(03):31-32.

    [6] Crane D,Pascarello E,James D. Ajax in Action[M]. America:Manning Publications Co.

    2005. 47-53.

    [7] 王建国. AJAX技术在网站开发中的应用研究[J]. 湖南城市学院学报(自然科学版),

    2016(1):155-156.

    [8] 张欣毅. JQuery Mobile移动网站开发[M]. 北京:清华大学出版社,2015. 118-129.

    [9] Struts 2.0:引领下一代Web开发趋势[N]. 计算机世界,2007-10-29(B23).

    [10] Ping L I. Dynamic Web Development Technologies based on JSP[J]. Microcomputer

    Information,2009:36-39.

    [11] Cheng H,Qian L,Shunxiong M A. Web Application Framework Composition Based on

    J2EE[J]. Computer Engineering,2005,31(20):96-98.

    [12] 欧阳宏基,葛萌. 基于Struts2与Hibernate框架的Java Web应用研究[J]. 自动化技

    术与应用,2016,35(2):48-52.

    [13] 孙卫琴. 精通Hibernate:Java对象持久化技术详解:let Java objects hibernate in the

    relational database. 第2版[M]. 北京:电子工业出版社,2010. 79-82.

    [14] 蒲子明. Struts 2 + hibernate + spring整合开发技术详解[M]. 北京:清华大学出版社,

    2010. 96-112.

    [15] 唐汉明,翟振兴,关宝军. 深入浅出MySQL:数据库开发、优化与管理维护[M]. 北

    京:人民邮电出版社,2014. 75-78.

    [16] 姜承尧. MySQL技术内幕[M]. 北京:机械工业出版社,2015. 59-68.

    [17] 李雷孝,邢红梅,王慧. Java Web开发技术[M]. 北京:清华大学出版社,2015. 26-36.

    [18] 吴育锋,周建东. Java面向对象编程[M]. 浙江:浙江大学出版社,2015. 62-78.

    [19] 李恩临. 基于JA V A的面向对象开发技术[M]. 北京:中国物资出版社,2016. 5-8.

    [20] 黄兴荣. 基于B/S架构模式的三层结构设计与实现[J]. 电脑知识与技术,2015,

    11(32):52-53.

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网