《自助旅游平台的设计与实现》14000字_第1页
《自助旅游平台的设计与实现》14000字_第2页
《自助旅游平台的设计与实现》14000字_第3页
《自助旅游平台的设计与实现》14000字_第4页
《自助旅游平台的设计与实现》14000字_第5页
已阅读5页,还剩29页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自助旅游平台的设计与实现摘要在如今的这个时代里,我国的社会经济发展令各国世界赞叹,人民群众的生活品质也日益提升。因此,旅游便成为了当下人们进行休闲娱乐的不二选择,同时它也成为当下人们享受舒适生活的方式之一。在互联网快速发展的今天,各种旅游项目层出不穷,意味着旅游网站将成为未来发展的主要趋势。本系统采用JAVA为开发语言,对于项目构建和管理工具我们使用的是Maven。在此基础上我们结合了MySql作为本系统的数据库。我们主要的目的就是为了让游客和旅游管理人员对旅游项目有个更好的体验。我们的系统分为两个模块:前台用户模块与后台管理员模块。前台主要实现了用户的注册、登录、以及查询商品和下单购买商品等功能。后台包括对旅游项目和用户还有订单的管理,以及统计用户的在线时间和统计分类的点赞情况以及点赞前10的旅游项目。关键词:旅游网站;数据库;JAVA;Web目录TOC\o"1-3"\h\u143671引言 1281771.1研究背景 1220621.2国内外研究现状 2224471.2.1自助游 2242061.2.2旅游推荐系统研究现状 3156071.2.3国内外发展趋势 3187171.3目的和意义 4279631.4系统开发工具介绍 4110401.4.1技术介绍 499551.4.2开发工具 5140041.4.3Myeclipse 5214111.4.4Tomcat服务器 5221741.4.5数据库介绍 6172892旅游网站统计分析 7209032.1可行性分析 7177572.1.1技术可行性 7312222.1.2经济可行性 7120772.1.3社会因素可行性分析 7204722.2业务需求分析 8163702.2.1系统需求 8322232.2.2功能需求 8193842.2.3性能需求 8306543旅游管理系统设计 9280793.1系统总体结构设计 9117123.2系统结构图 1061553.3数据库设计 11269164系统详细设计 14224304.1界面设计与功能 14291344.2前台界面详细设计 1444994.2.1用户注册与登录模块 14188684.2.2用户退出登录 16296214.2.3分类展现 16298134.2.4商品详情代码设计 17215334.2.5用户收藏 18135264.2.6搜索功能 18254204.2.7购买 19140744.2.8数据可视化 22276284.2.9旅游项目管理 2355234.2.10收藏排行榜 25301655系统功能与测试 27228785.1测试过程 2735935.2测试结果 27198715.3测试实例 2717351总结 316533参考文献 321引言1.1研究背景如今的旅游行业有着一个“游行天下”的美好称呼。也是世界三大产业的其中之一。根据最近的大数据统计,旅游行业每年的产出收入约为5亿美金,所以旅游行业在无形之中为成千上万的人提供了良好的就业机会,同时它使数以万计的企业在它的引领之下得到了更好的发展。无论是国内还是国外,旅游行业都是一个热门的行业。目前世界的旅游人数每年都在以10%的速度进行增长。世界各地的出境游玩的人数增长率也增加了5%,世界旅游组织也将旅游行业成为“无形的出口业”。根据统计,每年接待游客总数超时5000万的国家有法国、英国、澳大利亚等等。当下旅游行业也成为了西方国家的非常重要的产业之一,尤其是北美旅游业发展尤为迅速。这些年来东南亚的旅游行业也在非常迅速的发展,其中泰国的发展尤其出色。近年来,我国的旅游行业以一种极快的速度在当今社会发展着。我国旅游行业的发展已经足够可以适应我们当下的经济发展以及国民的生活水平。我国的经济发展呈现出一种逐年上升的良好趋势,国民的生活水平体现出了质的飞跃。旅游行业在当下的国民经济发展中扮演着一个尤为重要的角色,旅游行业在社会上地位也变得越来越重要。因此,它已经成为了人们生活中不可或缺的一部分。但是,现在的旅游行业仍然存在不少的问题,有许多不够完美的地方,比如管理的方式还比较弱后,这样就会出现对信息的管理不够完善,企业的盈利较差的问题。缺乏信息化的管理手段和用户沟通不够方便等问题都是我们现在需要去面对和解决的。我们面对这些问题和困难,就要勇敢的迎接挑战,所以我们就必须改变旅游行业现有的传统观念,以信息化的新手段,整合各种资源,利用好互联网的技术从而实现对旅游行业的重大改变,让整个行业发生前所未有的变化。加强信息化管理,还需要提高各个部门的工作效率和工作水平,实现精简办公。这样不但降低了我们的工作成本,还可以通过互联网加大对旅游的宣传力度,使信息在社会上的传播速度变得更快、信息的时效性更高。线上旅游的购物方式的开通,不但能够更好的满足旅客的各种需求,而且还能够提高旅游产品的质量。通过改变传统的旅游经营模式,我们就可以做到减低成本,提高收入。还可以做到和用户的及时沟通,使得旅游行业的服务总质量得到一个整体性的提升。增强旅游行业的信息化,也是旅游行业的一个支柱。我们可以通过大数据的技术对用户进行分析,从而给用户推荐他们感兴趣的旅游产品。当我们做到旅游行业信息水平整体不断提高和产业链结构得到充分完善的时候,就会带动与更多与旅游相关的产业的发展,从而扩大就业,这对经济发展起着积极的推动作用。由于我国当前的旅游行业在信息管理方面做出的工作和投入较少,使得它限制了旅游行业更好的发展。因此,我们可以通过建立一个具有针对性的旅游网站,利用该旅游网站对各个地方的风土人情进行宣传,加强对旅游信息的有效管理,实现信息化,提高旅游网站的竞争能力。1.2国内外研究现状1.2.1自助游对自助游的研究始于十九世纪七十年代,以色列学者Cohen对制度化和非制度化旅游的差别进行了理论性描述[10],他认为每个游客在旅游中需要的体验不同且这种体验会对他们个人及所处的社会带来不同的意义,自助游的概念作为一种新的旅游形式被提出。在自助游模式中,游客需独立制定行程路线,旅行过程无导游人员陪同,旅游途中的衣食住行娱乐购可自主选择,虽然会花费一定的时间和精力,但却摆脱了传统跟团游中固定的线路安排,改变了“赶鸭子”式旅游,避免了商业化的束缚,重新定义旅行的意义[11]。自助游不仅面向年轻群体,而是不论老少,所有追求自由、个性、独立的人都可以选择的出行方式。它并不代表为了追求省钱而使旅游内容粗糙,而是按照游客自己的想法把对时间和金钱的支配变得灵活可调整。它使游客可深入了解出行地的风土人情和民俗特色,走最想走的路,看最想看的风景,使旅行更自由、更精致、更灵活、更深刻,带给游客更独特、更多元化的价值体验[12]。近年来,自助游逐渐发展为一种网红产业受到越来越多的追捧,很大程度上促进了旅游向多元化发展。按照游客在旅游过程中的旅行天数、旅行人数、出行目的、出行方式和消费支出情况对自助游的类别进行划分,如表1-1所示。随着自助游模式被越来越多人选择,这种模式的弊端随之显现,在游客对旅游出行目的地完全不熟悉的情况下,依靠个人在网上查找资料制定攻略将花费大量时间,同时还可能由于查找到未及时更新或错误信息导致制定的攻略不合理,极大影响旅行体验。目前,自助游与网络技术相结合的智慧旅游方兴未艾,作为“互联网+旅游”的热门话题,对其进行的相关研究也越来越多。Sondess等开发了一种用于旅游业的移动推荐系统LOOKER,考虑了诸如位置和时间之类的基本上下文信息,实现基于内容的过滤策略,帮助游客随时获得个性化建议[13];Leila等开发了在旅游景点和社会商业环境下社交混合推荐系统,根据用户需求、兴趣、信任、关系和社交社区的相似性,为每个游客提供个性化的旅游景点列表[14];David等提出了“游客愚蠢”矩阵作为概念框架,以表征游客对智能旅游的潜在反应,根据游客的意图和行为提出四种“愚蠢”类型,促进目的地的规划和管理,从而促进真正的“智能”旅游业[15];Lin通过对蚁群算法的研究,构建行程推荐与路线规划模型,以游客预计游玩时间和天数为条件,为其推荐游玩路线并提供游玩指导[16]。1.2.2旅游推荐系统研究现状早在二十世纪九十年代中期[5],推荐系统就已经被众多学者关注,并开始深入的研究。同时伴随着旅游信息化的发展,旅游信息化和推荐系统的关联也越来越密切,旅游推荐系统开始得到人们的广泛关注,此后国内外大量学者开始对各种旅游推荐算法进行研究和改进。Woerndl等人[6]研究在移动推荐系统中引入情景信息,这就使得推荐系统可以根据用户的实际位置进行有针对的推荐。Hsu等人[7]提出了一种基于模型的协同过滤算法,游客对景点的兴趣值利用贝叶斯网络获取,并将兴趣值用于景点的决策支持系统(OTAS)。再通过ROC曲线进行预测值准确度的验证,最终将推荐结果利用谷歌地图进行可视化展示。Kurashima等人[8]通过对图片分享网站Flickr上的图片信息进行分析,获取到图片中用户上传的地理位置与日期,计算出相关旅游内容。再根据用户此时的位置并通过建立的Topic-Markov的用户偏好模型,对用户可能感兴趣的景点进行预测。Hwang[9]通过对目的地选择方式进行建模,并针对目的地选择会受何种因素影响进行讨论,因为目的地直接影响着后续旅行的规划,因此目的地选择就成为旅游中的重要一环。Gao等人[10]提出旅游指导系统W2Go,它采用自动地标排名(ALR)算法来从旅游网站上自动获取景点属性和用户评价。该系统通过将自动拾取的旅游坐标进行排序,并将最终结果推荐给用户。Majid等人[11]通过对聚类算法进行改进,把Flick上的照片进行聚类,然后利用聚类后的标签来寻找相似景点。通过用户上传的照片建立用户-景点矩阵,再通过皮尔逊相关系数来计算相似性,最终通过基于用户的协同过滤算法来进行推荐。此外在国内YuxiaHuang等人[12]提出了陌生城市景点个性化推荐系统,它们通过对在线旅游信息进行整合,再对当前用户和其他用户进行行为分析时使用贝叶斯网络和层次分析法,改进传统推荐系统中的冷启动等问题。Lu等人[13]通过设计的旅游框架来对旅游游记和地理位置信息进行整合,使得用户可以实时的获取旅游计划。曾佩强[14]采用Unity3D引擎进行旅游推荐系统的构建,通过使用三维虚拟技术对景点的全貌进行展示,使用户未到景点就能有身临其境的感觉,提高了用户对景点的了解,最后再通过推荐算法帮助用户推荐旅游线路。1.2.3国内外发展趋势在全球化浪潮的影响下,年轻人的职业流动意识逐渐增强,崇尚能实现自我价值的择业观。由于自由职业可赋予年轻人更多权力而成为一种全球性趋势。据美国自由职业平台Upwork的数据报告显示[29],2019年,在美国自由职业的从事者约5730万人,已超过全美劳动力的1/3,累计收入近10000亿美元。2020年,全美自由职业者人数还将大幅增长,预计将达到8050万人。Upwork的前首席执行官预计,全球自由职业的市场规模在未来将达到30000亿美元。我国信息中心披露的数据也表明,在我国每12人中,便有一个人是自由职业从事者。受今年疫情的推动,我国在不久的将来,将进入自由职业的黄金时代[30]。1998年,我国应届高校毕业生82.98万人,2020年,这一人数已增长至874万人[31],就业形势越来越严峻复杂。由于岗位有限,国家政策很难解决所有人的就业问题。在此形势下,促进自由职业的发展,为自由职业者提供一个良好的平台,是缓解当前就业压力的有效途径。阿里研究院预测,2020年将出现首个交易额超过6万亿元人民币的平台经济体[32]。自我雇佣,个性化择业观是互联网平台经济的核心。现如今,90后已经走出校园,走向社会,成为社会工作的主体,他们追求热爱的行业,渴望个人价值在自己所擅长领域得到最大发挥,以互联网为基础,跨越地理距离,时间自由、工作效率高的自由职业将会成为一种越来越受青睐的工作模式,在此模式下,每个人的优势都能轻松的在市场兑现[33]。在互联网+时代,规律化、流水化的工作将会被逐步取代,人们的观念和习惯也在发生转变以适应这种时代的变化,自由职业者将成为颠覆市场模式的新浪潮,“大众承包,万众创新”以此来优化用工结构将成为主导国家经济发展的趋势。1.3目的和意义目前旅游市场前景十分宽广。高校的学生数逐渐加大,旅游市场的发展必会愈加宽广。面对社会上如此大的一个群体,要加快旅游市场的发展,对的消费行为研究以及出行需求研究是十分必要的。分析目前的出游特征,设计一个专为他们出游的平台是十分需要的。基于此,设计一款专门服务的交互自助旅游平台,它能给游客带来一种全新的交互性的旅游体验,是一个有景点浏览、景点论坛、旅游结伴和旅游动态等功能组成的平台。在旅游平台中,用户可以通过景点浏览发现自己想去的地方,然后通过论坛搜集一些自助旅游攻略等信息。从目前的高校来看,他们更喜欢和同学或者朋友搭伴去旅行。因此,平台可以提供给用户类似寻找旅行伙伴的功能,通过和有兴趣的人一起搭伴寻去旅游,从而增加旅行的体验。当然,旅途中还可以通过旅游动态功能去分享自己的旅游历程,让其他的旅游好友看到自己的旅游分享,获得旅游的满足感。微信、QQ等交流软件是目前十分常用的,他们喜欢用这些平台去分享自己的生活,游客也会因自助旅游平台的强大的交互性而被深深的吸引。在交互自助旅游平台上,不仅可以了解到自己所需要的旅行信息,还可以发布一些旅行经历或感悟供大家欣赏。通过发表旅游动态,回复论坛信息,获得点赞和评论,更增加了旅行的乐趣。平台强大的交互性,考虑到了的使用偏好,未来必定受到大多数人的喜爱。1.4系统开发工具介绍1.4.1技术介绍JSP技术是以java语言作为脚本的一种动态网页的标准。它具有其他技术所不具有的优点:一是只需要一次编写,就可以在各种主流的平台上运行;二是它的伸缩性很强;三是JSP拥有很多优秀的开发工具;同时它也支持服务器端的组件[1]。JSP技术所具有的优点,使得它功能异常强大,能够实现动态网页的所需要的效果。Spring是一个Java的开源框架,它具有轻量级的特点。对它来说有两个非常重要的核心:一个是面向切面编程,简称AOP。另一个则是控制反转,简称IOC。IOC不是什么技术,而是一种关于设计的思想。控制权由内部转移到了外部,因此也就叫做控制反转。这样做的好处主要是为了降低组件之间的依赖(解耦)。AOP就是使用动态代理解决业务代码中的事务问题就是AOP(AspectOreirtedProgram)面向编程。它解决的核心问题就是使业务代码和其他相关代码进行分离。就是对核心业务代码进行增强,而不需要修改源代码。[3]1.4.2开发工具IDEA的全称是IntelliJIDEA,它是Java的开发工具之一,因为它有着自动补全的特性,使得配置更加简单。因此,使用它的用户众多。它还通过插件提供了对其他语言的支持,比如Ruby和Php等。IDEA提供的重构功能被专业的程序员高效地利用。许多的印象深刻的重构功能都是由所有的现代IDEA所提供的。[1]Mybaits它是一个Orm持久层框架,具有半自动的特征。它有着相当高的Sql灵活性和Sql动态性,以及缓存、延迟加载等特性。它需要用手动的方式进行编写Sql语句,这与它较低的数据库无关性有关。它不像Hibernate,只要定义好映射的关系就可以不用手动编写Sql了。[4]1.4.3Myeclipse作为开发工具,Myeclipse性能极为优秀,一般情况下在开发javaee、java以及安卓时均会用到,对Myeclipse加以利用来实施项目的开发,能够在很大程度上让开发的效率得到提升。通过Myelipse,能够自动添加set以及get方法,这一方法的添加用Myeclipse自动生成的添加即可[2],一些重要的函数可以选择注释。同时,利用Myeclipse可以进行自动生成构造函数。Myeclipse工具为Java的编写提供了很大方面,于Myeclipse内能够用手动的方式对JDK以及Tomcat进行配置,也能够于其中运行Web程序。在java的web程序设计中,常使用MyEclipse做编辑工具,在Java当中我们与数据库相连接,并且在相应的服务器中进行整合。1.4.4Tomcat服务器Tomcat是个免费的WEB服务器。如果我们不使用Tomcat也是可以打开Html页面。但是它是通过打开本地文件的形式打开的,使用Tomcat后就可以像访问一个网站似的,访问一个Html文件了,它支持最新的Service和JSP。而且Tomcat的稳定性也是非常高的。[2]Tomcat服务器是目前世界上流行的免费的轻量级服务器。因为它功能非常强大而且是免费的,所以很多程序开发人员的第一选择。由于Tomcat是小型的轻量级的软件,运行Tomcat不占用很多内存[3],而且它的拓展性非常好,能够满足大部分程序开发者的功能需求。1.4.5数据库介绍SQL的全称是结构化查询语言,是由IBM开发,专门针对其关系数据库,属于查询语言的范畴[4]。在一系列的开发之后,SQL查询语言的结构方面并不困难、且具备强大的功能、而且比较容易学习。由于它的诸多优点,SQL程序语言得到了广泛的推广,许多出名的大型数据库管理系统、以及微机操作系统的数据库管理系统都支持SQL查询语言。Mysql简单易学,可以支持各种不同的操作系统的运行,还可以支持多线程,使Cpu资源能够得到充分的利用。同时它还可以对数据进行优化处理,从而大大的提高了查询的效率,给用户带来良好的操作体验。[5]

2旅游网站统计分析2.1可行性分析在开发该系统之前通过对市场的调查,我们需要对系统的开发是否有必要以及是否可行做出谨慎的分析。这样不仅可以避免目标不明确,投资失误,还可以保证系统功能的完整性。我们需要进行可行性研究的目的就是尽可能少的去减少错误和风险,争取短时间内解决好当前需要我们去面对的问题。2.1.1技术可行性在技术上我们也做出了分析:根据现有技术是否可以能够顺利的完成这次的开发需求,以及硬件软件是否可以满足开发需求。我们的旅游网站系统采用Idea和Mysql和Tomcat这三种开发工具,这样可以很好的实现前后端分离技术,使得前端页面和后端技术的开发可以同步进行。使用了Java以及Jsp等技术,采用了Ssm的框架来帮助我们简化开发的流程,有助于提高工作的效率。使用Web方式,对用户的设备需求就没有限制了。如果使用软件开发,对用户的设备要求较高,我们只需要有互联网就可以实现所有的操作。所以在技术方面的问题有充分的可行性。2.1.2经济可行性在经济上我们主要对项目的经济效益进行可行性评估,首先如果不采用该旅游信息管理系统,我们的信息就会杂乱无章,且可能产生错误信息,这样就无法保证信息的准确性,从而将会影响到整个旅游行业,导致我们无法对信息进行分析。如果使用了我们的旅游系统,不仅可以节省管理信息的成本和时间,而且能够提高整个行业的经济效益。它使得我们不在需要人为的去管理信息而是采用自动化的方式去管理信息。旅游系统还可以对信息进行分析,提高信息的利用价值。运用旅游系统的经费对于旅游行业来说是完全可以承受的,在经济上也是完全可行的。2.1.3社会因素可行性分析我们在社会因素方面也做出了充分的分析,主要是根据该系统所处的社会状况以及项目对社会的影响进行分析。随着我国社会经济的不断前进,国民生活水平持续提高,人们对旅游产品的需求日益增加。但是,客户对旅游线路等一些与旅游相关的信息的了解不多。因此,旅游企业如果想要有足够的竞争力,就需要搞好管理,将旅游的详细内容展现给我们的客户,使用户可以根据热门的旅游路线去寻找自己喜欢的项目。这也在一定的程度上提高了旅游行业在社会上的竞争力。同时,还极大的提高了我们工作的效率,也给我们带来了经济效益,提高了客户对旅游行业的满意程度。因此,社会因素方面也充分可行。2.2业务需求分析2.2.1系统需求根据旅游行业的理念,该旅游系统必须满足一下需求:(1)对旅游项目进行分类,可以让用户更快的找到自己的需求。(2)搜索功能,用户输入关键字查询自己需要的旅游路线。(3)在线咨询。(4)支付,完成在线支付功能。(5)订单查询。(6)用户收藏。2.2.2功能需求根据旅游的相关业务流程,该旅游系统应具有以下功能:(1)旅游模块:提供旅游路线的搜索以及分类,用户可以查看旅游路线的详细信息,还可以对旅游路线进行收藏,在浏览的过程中还可以对心仪的旅游项目进行微信支付。(2)用户模块:用户可以先注册再登录,接着对个人的用户信息进行查看,以及修改个人信息。(3)后台模块:可以查看热门旅游行业的排行榜、每小时用户的在线情况,以及上下架旅游项目。2.2.3性能需求为了保证系统能够安全、稳定、可靠、长期运行,系统需满足以下对系统性能的需求:(1)系统的易用性。由于用户的面向群体比较多,他们可能对操作并不是很熟悉,所以我们在设计的时候必须遵循简单、方便的原则,这样才可以让用户有良好的用户体验。(2)系统处理的时效性和准确性。我们对系统处理的时效性和准确性的要求是相当严格的。所以,我们采用ajax的方法,异步刷新页面,这样能够减少用户的等待时间。(3)系统的开放性和可扩充性。系统在开发时还需要解决一个很重要的问题,就是系统未来的可扩充性。对于旅游的项目来说,情况是不断变化的。因此,我们在这里采用的是前后端分离系数,后端还特别采用了三层架构,这样在需要修改功能或者添加功能的时候,我们就可以在实现对单个功能的开发同时不会影响其他功能。

3旅游管理系统设计3.1系统总体结构设计旅游管理系统部分实体属性、E-R图如下所示:(1)用户登录到系统的首页时,可以在网站上进行注册和登录,注册和登录模块的实体属性图如图3-1所示:图3-1登录模块属性图(2)我们的系统主要由旅游项目的名称、价钱、分类、图片以及简介组成,旅游模块实体属性图如图3-2所示:图3-2商品模块属性图(3)我们在用户注册时需要填写用户名和手机号,在购物时,会显示出订单、旅游时间以及具体的旅游项目,用户与旅游关系实体E-R图如图3-3所示:图3-3用户旅游关系实体E-R图(4)用户可以在此网站上浏览旅游项目,如果对本网站感兴趣,就可以进行用户注册,这个时候我们会保存用户的信息。如果用户进行登录我们会判断用户的密码是否正确,当登录成功之后我们可以对旅游项目收藏,修改个人信息,进行购物、查看订单、以及修改密码。当用户是否完成时候还可以进行系统的退出,系统的整体E-R图如图3-4所示:图3-4系统整体E-R图3.2系统结构图我们的旅游系统分为前台和后台。前台主要是用户部分和旅游项目部分。用户部分为登录、注册、退出、查看我的收藏,个人信息修改、密码修改、查询订单,商品还包括商品列表分类、收藏、取消/收藏、商品简介、下单支付。后台部分包括商品和数据报表。其中商品包括商品的上架、下架以及修改、图形报表包括了用户在线时间折线图,商品收藏排行榜前10的条形图、以及分类点赞统计的饼图。旅游系统的结构图如图3-4所示:图3-4系统结构图3.3数据库设计(1)分类表:分类表用来对旅游进行具体的分类,比如港澳游、出境游、国内游。表3-1tab_category表字段的名称数据的类型主键/是否为空字段含义cidVARCHAR(20)PRIMARYKEY分类idCnameVARCHAR(20)NOTNULL分类名称(2)收藏表:收藏表用来保存用户的对旅游的收藏记录。每当用户对商品进行收藏的时候,我们就会在该表进行添加数据,每当用户取消收藏的时候,我们就会对该表删除数据。表3-2tab_favorite表字段的名称数据的类型主键/是否为空字段含义RidINT(11)NOTNULL旅游路线idDateDATENOTNULL收藏时间UidINT(11)NOTNULL用户id(3)时间表:该表没有实际记录的内容,存储的是00-23用来连表查询显示时间,具体是和用户在线时间表联合使用。表3-3tab_online_info表字段的名称数据类型主键/是否为空字段含义A1VARCHAR(20)NOTNULL时间00-23(4)订单表:用来保存用户的下单信息,例如用户的id、商品的id、用户旅游时间、支付状态和订单的创建时间以及商品价钱和微信支付地址。表3-4tab_order表字段的名称数据的类型主键/是否为空字段含义oidBIGINTNOTNULL订单iduidINT(11)NOTNULL用户idridINT(11)NOTNULL商品idrouteTimeDATENOTNULL旅游时间codeINT(11)NOTNULL支付状态0未支付1支付成功2订单关闭creationTimeDATENOTNULL订单创建时间priceDOUBLENOTNULL价钱urlVARCHARNOTNULL微信支付连接(5)旅游路线表:用来保存旅游路线的详细信息,包括了路线名称、价钱、路线介绍、是否上架、上架时间、是否为主题旅游、收藏的数量、分类以及图片。表3-5tab_route表字段的名称数据的类型主键/是否为空字段含义ridINT(11)NOTNULL路线idrnameVARCHAR(11)NOTNULL路线名称priceDOUBLENOTNULL价格routeIntroduceVARCHAR(11)NOTNULL路线介绍rflagVARCHAR(11)NOTNULL是否上架rdateVARCHAR(11)NOTNULL上架时间isThemeTourVARCHAR(11)NOTNULL是否为主题旅行countINT(11)NOTNULL收藏的数量cidINT(11)NOTNULL分类rimageVARCHAR(11)NOTNULL图片(6)图片表:用来保存旅游路线的所有图片。表3-6tab_route_img表字段的名称数据的类型主键/是否为空字段含义rgidINT(11)NOTNULL图片idridINT(11)NOTNULL旅游路线idbigPicVARCHAR(11)NOTNULL旅游大图smallPicVARCHAR(11)NOTNULL旅游小图(7)用户表:用来保存用户的信息。其中包括用户名、密码、真实姓名、生日、性别、电话、邮箱和状态。表3-7tab_user表字段的名称数据的类型主键/是否为空字段含义uidINT(11)NOTNULL用户idusernameVARCHAR(11)NOTNULL用户名passwordVARCHAR(11)NOTNULL密码nameVARCHAR(11)NOTNULL真实姓名birthdayDATENOTNULL生日sexVARCHAR(11)NOTNULL性别telephoneVARCHAR(11)NOTNULL电话emailVARCHAR(11)NOTNULL邮箱statusVARCHAR(11)NOTNULL状态(8)用户在线时间统计表:用来统计用户的在线时间数据,每次用户登录就会在该表进行数据的插入、它和tab_online_info表联合一起使用。表3-8tb_user_time表字段的名称数据的类型主键/是否为空字段含义tidINT(11)NOTNULLidTimeDATANOTNULL用户在线时间4系统详细设计4.1界面设计与功能经过之前的分析,完成数据库之后。我们接下来要完成的是:页面的设计和后端功能的设计。该旅游系统的前台部分包括一下部分:(1)用户注册(2)用户登录(3)用户的信息修改(4)旅游路线分类(5)旅游路线详细信息(6)用户收藏旅游路线(7)用户下单功能(8)用户查看订单(9)在线咨询(10)搜索后端功能包括:(1)添加旅游路线(2)修改旅游路线(3)删除旅游路线(4)用户在线时间折线图(5)收藏旅游路线TOP10条形图(6)旅游分类收藏饼图4.2前台界面详细设计4.2.1用户注册与登录模块注册部分用户注册的功能的主要用于保存用户的信息。当用户登录到该网站的时候,我们首先就需要让用户进行注册,然后再进行用户的登录。当用户进行注册时,必须将用户密码利用md5方法进行加密处理,这样才能更有效的去保护用户的密码。具体的核心后台代码如下:if(user==null){returnnewResultInfo(false,"参数不合法");}Stringtelephone=user.getTelephone();if(StringUtils.isEmpty(telephone)){returnnewResultInfo(false,"用户电话不能为空");}if(!RegexUtils.isPhone(telephone)){returnnewResultInfo(false,"电话号码格式错误");}Useru2=userDao.findUserByTelePhone(telephone);if(u2!=null){returnnewResultInfo(false,"手机号已经被注册");}Stringusername=user.getUsername();Useru3=userDao.findUserByUserName(username);if(u3!=null){returnnewResultInfo(false,"用户名已经被注册");}StringpwdMd5=Md5Util.encodeByMd5(user.getPassword()); user.setPassword(pwdMd5); user.setStatus("1"); userDao.registUser(user);returnnewResultInfo(true);下面为用户注册的注册页面,需要用户填写用户名、手机号和密码、注册页面如图4-1所示:图4-1注册页面登录部分用户登录功能,当用户完成了注册之后就可以进行用户登录了。只有登录成功后,用户才可以进行购物和收藏商品等的操作。UserloginUser=userService.findUserByUsernameAndPwd(user);ResultInforesultInfo=newResultInfo();if(StringUtils.isEmpty(loginUser)){resultInfo.setSuccess(false); resultInfo.setMessage("用户名和密码不匹配");}else{inti=userService.findUserStatusByUserId(loginUser.getUid());if(i==1){request.getSession().setAttribute("user",loginUser);resultInfo.setSuccess(true);}else{resultInfo.setSuccess(false);resultInfo.setMessage("该用户已被冻结无法登陆");}}returnresultInfo;用户登录,用户填写用户名和密码,如果账户和密码正确,即登录成功,否则登录失败,填写用户名登录页面如图4-2所示:图4-2登录页面4.2.2用户退出登录用户退出登录功能是在用户不使用账户的时候可以进行退出账户,退出之后必须删除用户保存在网页上的Session信息。request.getSession().removeAttribute("user");returnnewResultInfo(true,"退出成功");4.2.3分类展现显示旅游路线的分类列表,由于分类可以是变化的,我们的导航栏不应该使用固定的内容,而是应该从数据库里进行查询之后显示在页面上。(1)controller层returncategoryService.findAllCategory();(2)service层returncategoryDao.findAllCategory();(3)dao层SELECT*FROMtab_category分类显示如图4-3所示:图4-3分类显示4.2.4商品详情代码设计当点击商品的时候显示商品的具体内容,包括价钱、名称图片、咨询电话等等。还需要显示出用户是否收藏过该商品。Routeroute=routeDao.findRouteDetailById(rid);List<RouteImg>list=routeImgDao.findImgById(rid);route.setRouteImgList(list);Categorycategory=categoryDao.findCategoryById(route.getCid());route.setCategory(category);intcount=favoriteDao.findFavoriteCount(rid);route.setCount(count);returnroute;select*fromtab_categorywherecid=#{cid}selectcountfromtab_routewhererid=#{rid}select*fromtab_routewhererid=#{rid}select*fromtab_route_imgwhererid=#{rid}商品的详情页面包括:路线的名称、路线的介绍,旅游图片的展现、商家的信息和旅游项目的价钱,以及用户是否收藏过该商品和商品被收藏的次数。商品详细如图4-4所示:图4-4商品详细页面4.2.5用户收藏用户可以对自己喜欢的旅游项目进行收藏,我们应该在用户点击到详情页面之前就要显示出用户是否收藏过该商品。如果收藏过,显示取消收藏按钮,否则显示收藏按钮。用户操作点击收藏和取消收藏时,都要将信息保存到数据库里。if(userFavorite==1){intresult=favoriteDao.userFavorite(rid,uid);routeDao.setAddCount(rid);if(result>0){returnnewResultInfo(true,"收藏成功");}else{returnnewResultInfo(false,"收藏失败");}}elseif(userFavorite==2){intresult=favoriteDao.userNoFavorite(rid,uid);routeDao.setSubCount(rid);if(result>0){returnnewResultInfo(true,"取消收藏成功");}else{ returnnewResultInfo(false,"取消收藏失败");}}returnnewResultInfo(false,"参数错误");如果用户收藏了该商品,我们需要显示取消收藏的按钮,如果用户没有收藏该商品,我们需要显示收藏按钮。收藏如图4-5所示:图4-5收藏页面4.2.6搜索功能由于旅游路线具有多样化的特征,我们不应该让用户一个一个的去寻找直到找到令自己满意的商品。而是应该通过关键的搜索的功能进行针对性浏览,帮助用户能够高效的找到自己喜欢的产品。利用搜索功能用户只需要输入关键字就可以快速找到自己需要的旅游产品。PageInfopageInfo=routeService.routeList(page,size,cid);request.setAttribute("page",pageInfo);return"route_list";PageHelper.startPage(page,size);List<Route>routeList=routeDao.routeListByCidOrRname(cid,rname);returnnewPageInfo(routeList,5);select*fromtab_routeandcid=#{cid}andrnamelike'%${rname}%'我们需要对商品信息进行分页的显示,不应该一下查询出全部商品,这样对用户的体验就会显得很差。分页查询旅游路线如图所示4-6所示:图4-6旅游路线页面4.2.7购买用户下单当用户找到自己喜欢的商品就可以进行下单操作了,这时用户必须为登录的状态,我们需要对用户的信息进行校验,旅游日期不应该提前于当期日期。Useruser=(User)request.getSession().getAttribute("user");if(user==null){returnnewResultInfo(false,"登录已经超时请刷新后重新登录");}DateFormatdf=newSimpleDateFormat("yyyy-MM-dd");Datetoday=df.parse(df.format(newDate()));DaterouteTime2=df.parse(routeTime);if(today.getTime()>routeTime2.getTime()){returnnewResultInfo(false,"预约的时间必须大于当前时间");}if(today.getTime()==routeTime2.getTime()){returnnewResultInfo(false,"必须提示一天预约");}Orderorder=newOrder();IdWorkeridWorker=newIdWorker(0,0);Routeroute=routeService.findRouteDetailById(rid+"");order.setPrice(route.getPrice());StringpayUrl=orderService.createPayUrl(order);生成支付地址用户下单成功之后,后台的系统应该自动生成一个订单号,然后我们就可以通过这个订单号和订单信息调用微信系统生成一个支付的地址。最后通过这个支付地址形成一个支付二维码。StringparamXml=WXPayUtil.generateSignedXml(paramMap,partnerkey);HttpClienthttpClient=newHttpClient("/pay/unifiedorder");httpClient.setHttps(true);httpClient.setXmlParam(paramXml);httpClient.post();StringresultXml=httpClient.getContent();Map<String,String>resultMap=WXPayUtil.xmlToMap(resultXml);order.setUrl(resultMap.get("code_url"));orderDao.save(order);returnresultMap.get("code_url");我们通过订单的信息,调用微信支付系统,生成一个支付地址。然后前端通过这个支付地址创建出一个微信支付二维码,微信支付如图所示4-7所示:图4-7微信支付处理超时订单在旅游商品出售时,可能会遇到故意下单而不去支付的情况。所以我们需要开启定时处理超时订单的功能,即为如果用户未支付订单超过了30分钟,该系统将自动识别并清理超时的用户订单信息。List<Order>orderList=orderService.findNoPayALL();for(Orderorder:orderList){DatecreationTime=order.getCreationTime();Datedate=DateUtil.addDateMinutes(creationTime,30);if(newDate().getTime()>date.getTime()){orderService.updatOrderCode(order.getOid());}}select*fromtab_orderwherecode=0updatetab_ordersetcode=2whereoid=#{oid}验证支付我们需要在前端编写一个定时框架,不断地去调用微信的支付系统去获取用户是否已经完成了支付。如果用户已经成功的支付,我们就可以返回支付成功的信息,否则返回支付失败的信息。orderService.payResult(oid);StringxmlParam=WXPayUtil.generateSignedXml(paramMap,partnerkey);

HttpClienthttpClient=newHttpClient("/pay/orderquery");

httpClient.setHttps(true);

httpClient.setXmlParam(xmlParam);

httpClient.post();

StringxmlResult=httpClient.getContent();

Map<String,String>resultMap=WXPayUtil.xmlToMap(xmlResult);

orderDao.update(oid);

returnnewResultInfo(true);

查询全部订单用户可以查看自己已经下单的信息:包括支付成功和支付失败的订单信息。支付失败的订单信息可以重新进行支付操作。Useruser=(User)request.getSession().getAttribute("user");PageInfopageInfo=orderService.findOrderListByUserId(user.getUid(),page,size);request.setAttribute("pageInfo",pageInfo);return"orderList";PageHelper.startPage(page,size);List<Order>orderList=orderDao.findOrderListByUserId(uid);for(Orderorder:orderList){intrid=order.getRid();Routeroute=routeDao.findRouteDetailById(rid+"");order.setRoute(route);}returnnewPageInfo(orderList,3);用户的订单列表显示里订单号,商品的图片,商品的标题和价钱还有下单时间和旅游时间以及是否支付成功等信息,用户的订单列表如图4-8所示:图4-8用户订单列表4.2.8数据可视化分类点赞系统用来统计每个旅游的分类点赞次数,使用扇形图可以更好的显示出每个分类点赞的百分比。selectcnamename,sum(count)valuefromtab_categoryc,tab_routerwherec.cid=r.cidgroupbyc.cid统计出所有商品分类的点赞情况,然后根据我们的统计结果生成一个扇形图,这样可以非常直观的展现出每个分类的显示情况,分类点赞的扇形图如图4-9所示:图4-9分类点赞扇形图商品收藏排行榜用来统计每个旅游项目的收藏情况统计出排行前10的旅游项目。selectrnamename,valuefromtab_router,(selectrid,count(rid)as点赞人数fromtab_favoritegroupbyridorderbycount(rid)descLIMIT1,10)twhereR.rid=t.rid显示出被点赞次数最多的前10条商品,并把他们做成条形图,可以很直观的显示出热门商品的名称和点赞次数,商品排行榜条形图如图4-10所示:图4-10商品点赞排行榜条形图用户在线时间统计图用来统计每次用户上线的时间形成柱状图。selectA1name,IFNULL(t.num,0)valuefromtab_online_infooleftjoin(selectDATE_FORMAT(time,'%H')hours,count(0)numfromtb_user_timegroupbyhours)tont.hours=o.A1orderbyA1记录每次用户的上线时间,这样可以很好的体现出用户每次的上线情况,我们可以根据用户的上线情况,来分析用户的行为,用户在线时间折线图如图4-11所示:图4-11用户在线时间折线图4.2.9旅游项目管理旅游项目添加后台管理人员可以对旅游项目进行添加填写关系的信息内容即可完成添加。Stringsyimg=UUID.randomUUID().toString()+rimage.getName()+".jpg";route.setRimage("img/"+route.getCid()+"/"+syimg);routeDao.save(route);saveDetailedImg(route,routeImgList1,routeImgList2);Upload.upload(rimage,syimg,route.getCid());后台管理人员添加旅游详情信息的时候,需要对旅游的路线做出详情的填写,例如路线的名称,价钱,路线介绍,是否上架,是否为主题旅行,分类,还有图片的详情信息。添加旅游路线如图4-12所示:图4-12添加旅游路线旅游项目修改后台管理人员可以对旅游项目进行修改填写关系的信息内容即可完成修改Router=findRouteDetailById(route.getRid()+"");Upload.deleteImg(r);Stringsyimg=UUID.randomUUID().toString()+rimage.getName()+".jpg";route.setRimage("img/"+route.getCid()+"/"+syimg);routeDao.updateRouteByRid(route);routeImgDao.deleteRouteImg(route.getRid());saveDetailedImg(route,routeImgList1,routeImgList2);Upload.upload(rimage,syimg,route.getCid());我们在点击修改旅游路的时候,需要将旅游路线的详情信息先显示在页面上,然后在进行修改,和添加一样,我们需要保证修改信息的完整性。修改旅游路线如图4-13所示:图4-13添加旅游路线删除旅游项目对已经不需要的旅游项目,后台管理人员可以对其进行删除。Routeroute=findRouteDetailById(rid);Upload.deleteImg(route);routeImgDao.deleteRouteImg(Integer.parseInt(rid));routeDao.deleteRouetById(rid);当旅游路线不需要的时候,管理员可以对其进行删除,我们需要删除旅游路线的详情信息,以及图片信息。修改旅游路线如图4-14所示:图4-14删除旅游路线4.2.10收藏排行榜用户可以在页面上看热门的旅游项目。PageInfopageInfo=favoriteService.favoriteList(page,size);request.setAttribute("page",pageInfo);return"favoriterank";我们应该查询出点赞最多的5条旅游路线,然后显示在页面上给用户进行推荐。旅游热门推荐如图4-15所示:图4-15旅游热门路线

5系统功能与测试5.1测试过程该旅游系统通过使用IDEA和MYSQL创建。后台代码的开发,使用了当下非常流行的JAVA语言,前端的代码开发使用了HTML技术。该旅游系统包括几大部分,例如路线分类,路线查询,支付系统等等。通过阅读本文您可以了解到旅游有关的内容,以及如何使用该系统。该旅游管理系统是基于用户体验进行设计的,界面友好清晰,方便用户的快捷操作。对于该系统的测试主要分为三个阶段:(1)首先我们要对每一个页面,每一个功能都进行测试。最初需要检查系统是否可以正常的运行,背景的颜色会不会太乱,按钮的位置是否正确,页面的内容是否正确。然后对每个功能进行单独的测试:测试功能是否正确,是否可以满足用户的需求,并对测试结果加以分析,判断是否还需要进行修改。(2)每个页面的功能测试完成之后,我们还要对整体的系统再进行一次测试。主要是检查各个功能是否可以实现,每个页面的跳转是否流畅,页面是否正常,以确保系统的整体性和完整性。(3)在测试完成之后,就要根据实际将系统全面的应用起来。查验在线上的高并发情况下,代码是否还可以正常的运行,是否会出现一些错误,是否存在其他的漏洞。这些问题都是需要我们去记录和定期的去进行维护的,这样才能更好的增强系统的实用性和完整性。5.2测试结果最后,我们对本系统进行了测试,主要是性能的测试和功能的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论