




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
旅游信息系统的设计与实现目录TOC\o"1-3"\h\u第1章绪论 1第2章本旅游信息系统的分析 12.1可行性分析 12.1.1技术可行性 12.1.2经济可行性 12.2框架介绍 12.2.1SSM 12.2.2Bootstrap 2第3章本旅游信息系统概要设计 23.1系统功能和数据设计 33.1.1E-R图设计 33.1.2系统用例图设计 43.2系统数据库设计 6第4章本旅游信息系统的详细设计与实现 84.1用户模块的设计与实现 84.1.1用户注册邮件发送功能 84.1.2用户修改个人信息及密码功能 94.1.3用户头像图片上传功能 104.2旅游信息模块的设计与实现 114.2.1首页发布内容模块 114.2.2各个旅游信息模块的分页显示 124.2.3查询旅游信息 134.3管理员模块的设计与实现 144.3.1旅游信息管理 144.3.2首页信息发布管理 15第5章本旅游信息系统的系统运行效果分析 155.1用户模块运行效果 165.2旅游信息模块运行效果 185.3管理员模块运行效果 20总结 22参考文献 23第1章绪论在当今快速发展的社会中,随着经济的增长旅游业也逐渐变得多了起来。游客希望获取的旅游资源信息相比较以前得更加的多样化。随着游客的实际需求变化,游客对旅游网站信息化建设的要求也在逐渐增高。各地旅游部门为了加快本土旅游业的发展,正在通过各种途径积极探索旅游业发展的新模式。在互联网和电子商务蓬勃发展的大背景下,利用网络技术建设具有地方特色的旅游资讯网站,可以有效地推动本地的旅游资源。旅游资讯网站在整合各种旅游资源上,有其独特的优势,能有效地将过去分散的旅游资源,如酒店、景区、特产等进行有效的整合和归类。该网站承担着为游客提供全方位的信息服务,使使用者无需花太多的时间去搜寻各种旅游资源,并能专注于优质的旅游体验。该服务模式既方便了旅客的出行,又能最大限度地利用旅游资源。充分考虑用户的使用体验,完成了用户游记发布、特产购买、景点查询等功能。有效提升本地旅游资讯服务。第2章本旅游信息系统的分析2.1可行性分析2.1.1技术可行性本旅游信息系统使用SSM框架(Spring+SpringMVC+MyBatis)搭建,使项目设计开发更精简;使用MySQL数据库实现数据持久化,存储数据信息;使用Bootstrap前端框架实现简洁的页面布局;代码结构排版清晰,注释详细,便于之后的代码维护,具备技术可行性。2.1.2经济可行性本旅游信息系统运行只需要一台可联网可正常运行的电脑即可,开发条件也是如此,具备经济可行性。2.2框架介绍2.2.1SSMSSM框架就是:Spring+SpringMVC+MyBatis。通俗点说,在Spring中包含有控制反转(IoC)、依赖注入(DI)、AOP、事务等。控制反转(IoC)理解起来就好比在你的电脑上有USB接口和HDMI接口等,这些插入接口的输入设备是容器,电脑是对象,电脑用什么外置键盘不取决于电脑本身,而在于插入USB接口的外置键盘是什么,所以可以发现控制电脑用什么输入设备不是由电脑控制,而是由你插入接口的键盘来控制,这就是控制反转。依赖注入(DI)就是控制反转,计算机使用什么输入设备取决于插入什么键盘,插入机械键盘的输入设备是机械键盘,插入数字键盘的是数字键盘,从计算机的角度看是靠注入,插入什么键盘取决于注入的是什么键盘,从键盘的角度看是控制反转,插入键盘的计算机是控制什么输入设备。Java的开发过程中,我们要建立很多的对象,其中一些关键的对象,可以让Spring来创建,我们只要提供一个XML或Java自身的配置文件。就像Spring公司是一家工厂,只要按照图纸生产。AOP就像是一个公司有好几个销售部,所有的订购机票、出差酒店,都要行政来处理,报销、付款、送货等等由财务帮助处理,销售部的人只要做好自己的本职工作就可以了。在SpringAOP中,可以将这些公开的交易看作是一个切面,这样你就可以专注于核心业务的开发。事务呢就是我转钱给你,我账户少100你账户同时多一百,如果没有事务我账户少100但钱没有到你账户上,会出问题,Spring的事务(spring-tx)可以帮我们轻松实现。SpringMVC中的MVC分别是模型(Model)、视图(View)和控制器(Controller)。业务处理模型,接受Controller的调遣,处理业务;视图返回给客户看的结果,这里的客户可以是人、浏览器或者APP;控制器接受用户请求,调用Model处理,然后选择合适的View给客户。SpringMVC就是个MVC框架,和Spring天生集成。MyBatis可以帮助您将资料库中的表格转换为类别,将字段转换为类的字段,将记录转换为对象。开启JDBC,阻止SQL注入,MyBatis都能帮你搞定。2.2.2Bootstrap最开始,Bootstrap是由就职于Twitter的一个设计师和一个工程师创造的,目前Bootstrap是全球最受欢迎的前端开发架构和开放源码项目。Bootstrap制定了精美的HTML和CSS规范标准,它也是用动态的CSS语言来编写的。Bootstrap在GitHub上大受欢迎,它已经成为GitHub上最流行的开放源代码,其中就有NASA的MSNBC(微软全国广播公司)。目前国内的一些移动开发人员比较熟悉的架构,比如WeX5的前端开源架构,都是以Bootstrap源代码为基础,对其进行了性能优化。REF_Ref56199059\r\h第3章本旅游信息系统概要设计3.1系统功能和数据设计在对旅游信息系统进行设计与实现时,需要对旅游信息系统进行整体的分析。本网站前台和后台系统,每个系统又有若干个模块,前台后台系统的每个模块之间又一一对应。将项目分成若干个模块来实现,能使项目的架构井井有条,同时,为了方便以后的维护和扩充,本文对整个系统进行了功能的总体结构设计,并给出了整个功能的总体框架。如下图所示。图1整体功能结构图3.1.1E-R图设计通过本旅游信息系统的需求与系统设计的分析,设计出旅游信息系统所用的用户实体,景区实体,游记实体,评论实体,酒店实体,资讯实体,广告实体,订单实体,特产实体。本旅游信息系统的E-R图,具体如图2所示。图2E-R图3.1.2系统用例图设计通过对本旅游信息系统的需求分析,规定了适合本旅游信息系统的角色。(1)用户角色的用例图主要是用来搜索旅游信息、浏览旅游信息并进行评论、订购特产、发布游记、管理游记、修改个人信息,具体内容如图3所示。图3用户用例图(2)管理员角色的用例图主要具有景区、管理、首页信息发布、游记、酒店、评论、用户和订单管理操作,具体信息如图4所示。图4管理员用例图3.2系统数据库设计(1)本旅游信息系统设计的用户信息表,用于存储用户信息,如表1所示。表1用户信息表(user)字段类型备注约束userIdvarchar(255)用户编号主键,notnulluserNamevarchar(255)昵称passwordvarchar(255)密码notnullsexchar(255)性别addresstext地址birthdayvarchar(255)生日signaturetext个性签名userImagvarchar(255)头像stageint(11)用户状态emailvarchar(50)邮箱(2)本旅游信息系统设计的订单表,用于存储订单信息,如表2所示。表2订单表(userorder)字段类型备注约束idint(11)订单编号主键,自增,notnulluseridvarchar(255)用户编号pidint(11)特产编号ordernumvarchar(255)订单号tnamevarchar(255)特产名称tpricedouble(10,2)单价tnumint(11)订购数量totaldouble(10,2)总价timedatetime下单时间stageint(2)订单状态(3)本旅游信息系统设计的游记表,用于存储游记信息,如表3所示。表3游记表(userorder)字段类型备注约束idint(11)游记编号主键,自增,notnulluserNumvarchar(255)用户编号notnulltitlevarchar(255)标题ptimedatetime发布时间describle1text描述1pic1varchar(255)图片1describle2text描述2pic2varchar(255)图片2describle3text描述3pic3varchar(255)图片3readnumint(11)点赞数stageint(11)游记状态(4)本旅游信息系统设计的特产表,用于存储特产的详细信息,如表4所示。表4特产表(specialty)字段类型备注约束idint(11)特产编号主键,自增,notnulltNumint(11)区域编号notnulltCategoryvarchar(255)特产类型notnulltNamevarchar(255)特产名称notnulltPricedouble(10,2)价格notnulltPicvarchar(255)图片1notnullpic2varchar(255)图片2pic3varchar(255)图片3tDescribletext特产描述notnullstocknumint(11)库存stageint(11)特产状态第4章本旅游信息系统的详细设计与实现4.1用户模块的设计与实现4.1.1用户注册邮件发送功能(1)算法设计思路输入帐号、昵称、密码、邮箱,点击“登录”按钮,提交表格,将要求输入到后台,要求参数中包含了用户刚刚填写的帐号,然后由后台的Controller方式接受来自网页的参数,然后通过serviceImpl方式判定用户帐号是否存在,如帐号已经存在,请再输入,若帐号不存在,则调用mapper中的方法插入默认头像和刚刚用户填写的数据到数据库,然后返回结果1到controller方法,调用mailService中的发送邮件方法向用户邮箱发送普通欢迎邮件,返回到主页并进入登录后状态,实现邮件发送功能的时候需要在QQ邮箱的账户设置里面开启SMTP服务,然后在项目中配置属性,导入‘javax.mail’jar包后就能使用了。(2)实现代码@RequestMapping("/uusserrrrRegister")publicStringuusserrrrRegister(Modelmodel,HttpSessionsession,@ModelAttribute("user")UserWithBLOBsuwbbllllob){ uwbbllllob.setStage(1); intjiieguuoooooo=checkService.register(uwbbllllob); if(jiieguuoooooo==0){ model.addAttribute("uidExitcuowuuu","您将注册使用的账户已存在,请重新注册"); return"regiistter"; } else{ mailService.sendSimpleEMail(uwbbllllob.getEmail(),"欢迎来到湖南旅游网","欢迎来到湖南旅游网"); session.setAttribute("user",uwbbllllob); return"redirect:/"; }}publicvoidsendSimpleEMail(Stringto,Stringsubject,Stringcontent){simpleMailMessage.setTo(to);simpleMailMessage.setSubject(subject);simpleMailMessage.setText(content);javaMailSender.send(simpleMailMessage);}4.1.2用户修改个人信息及密码功能(1)算法设计思路用户进入个人中心,能看到登录用户的个人信息显示在输入框内,这是在controller方法中调用了service方法,在serviceImp方式中,mapper方法会根据当前登录用户的id来查询用户的信息,并通过controller方式将该用户的信息反馈给前台页面,用户可直接在输入框内重新填写个人信息,然后点击保存按钮提交表单,将请求参数发送到后台,调用服务中的修改方法,执行MySQL语句将数据重新覆盖并保存到数据库中;用户点击修改密码到修改密码的页面,需要输入旧密码、新密码并重复输入新密码,点击保存提交表单,页面得到用户的原始密码与用户输入的原始密码相匹配。如果匹配失败,则会显示“与原来的密码不符”,如果匹配成功,如果新的密码与原来的密码相符,那么新的密码与原来的密码相符,如果新的密码与原来的口令不相符,那么如果两次的密码不相符,就会出现“两次密码不相等”的情况。(2)实现代码@RequestMapping("/udttUsserTeeext")publicStringudttUsserTeeext(Modelmmmodd,@ModelAttribute("user")UserWithBLOBsuwbbllllob,HttpSessionsession)throwsException{ intj=userService.updateUserText(uwbbllllob); UserWithBLOBsxinddeUser=userService.searchUserMessage(uwbbllllob); session.setAttribute("xinddeUser",xinddeUser); return"redirect:/getUser/my_info";}@RequestMapping("/uptttPwwwdd")publicStringuptttPwwwdd(Modelmmooodd,PasswordVopwdddVvo,HttpSessionsess){ intjieguuuo=userService.updatePassword(pwdddVvo); if(jieguuuo==2){ mmooodd.addAttribute("pwwdErrorOne","与原来来的密码不一致"); } elseif(jieguuuo==3){ mmooodd.addAttribute("pwwdErrorTwo","与原来来的密码一致"); } elseif(jieguuuo==4){ mmooodd.addAttribute("pwwdErrorThree","两次输输入的密码不一致"); } else{ mmooodd.addAttribute("pwwdSuceesss","您的密码已修改成功,请返回重新登录!"); sess.invalidate(); } return"securriity";}4.1.3用户头像图片上传功能(1)算法设计思路用户进入个人中心点击我的头像,跳转到头像上传页面,点击“选择文件”从本地选择图片,点击保存后提交表单将图片文件信息请求发送到controller,在controller方法中调用service的方法返回上传的用户头像保存进数据库的路径(图片是保存在本地磁盘的,数据库里面存放的是图片路径),然后在controller方法中将图片路径保存到数据库中,再调用service方法根据用户id获取用户信息,更新头像。(2)实现代码@RequestMapping("/uppdtttUserIimmg")publicStringuppdtttUserIimmg(Modelmodel,@RequestParam("file")MultipartFilewenjiiaan,Useruuuse,HttpSessionsession)throwsException{ Stringtupianllujing=uploadService.uploadUserImag(wenjiiaan); uuuse.setUserimag(tupianllujing); userService.updateUserImage(uuuse); UserWithBLOBsexitUuuss=userService.getUserMessage(uuuse); session.setAttribute("uuuse",exitUuuss); return"my_hhead";}4.2旅游信息模块的设计与实现4.2.1首页发布内容模块(1)算法设计思路用户进入网站首页,首先看到的是用于广告推广的轮播图,再往下依次是湖南美景(景区)、湖南特产、大话湖南(游记)、旅游资讯,这些需要管理员在后台发布后将景区特产信息保存到content数据库中,在controller方法中调用service方法中的mapper获取数据信息显示在首页上,广告、游记和资讯则是通过各自的数据库获取数据限制排序显示。(2)实现代码 @RequestMapping("/requestAds") public@ResponseBodyList<Ads>requestAds(Modelmodel)throwsException{ List<Ads>adList=indexService.getAdsList(); returnadList; } @RequestMapping("/requestScenic") public@ResponseBodyList<Content>requestScenic()throwsException{ List<Content>contentList=indexService.getContentScenic(); returncontentList; } @RequestMapping("/requestSpecialty") public@ResponseBodyList<Content>requestSpecialty()throwsException{ List<Content>contentList=indexService.getContentSpecialty(); returncontentList; } @RequestMapping("/requestInformation") public@ResponseBodyList<Information>requestInformation(intvalue)throwsException{ List<Information>informationList=indexService.getInformationList(value); returninformationList; } @RequestMapping("/requestTravels") public@ResponseBodyList<TravelsVo>requestTravels()throwsException{ List<TravelsVo>TravelList=indexService.getTravelVoList(); for(TravelsVot:TravelList){ System.out.println(t.getUserimag()); } returnTravelList; }4.2.2各个旅游信息模块的分页显示(1)算法设计思路点击每个模块的页标签能跳转到指定模块,比如,在旅游景点资讯页面,在controller方法中,就可以使用分页查询中的PageHelper分页功能,在查询景区信息的步骤前传入当前的页码,然后记载几条数据,当前页默认为第一页,调用service中的方法获取景区信息,接着用PageInfo包装景区信息查询出来的结果,只用将PageInfo响应到页面,pageInfo封装了分页的详细信息,也可以指定连续显示的页数;在分页查询的右边有三个公共盒子,随机显示三个景区、特产、酒店信息。(2)实现代码@RequestMapping("/getSomeScenic")publicStringgetSomeScenic(Modelmod,@RequestParam(required=false,defaultValue="1",value="page")Integeryemaa){ PageHelper.startPage(yemaa,6); List<Scenic>list=scenicService.getSomeScenics(); PageInfo<Scenic>pif=newPageInfo<>(list,6); ppUuts.setCurrentPageNum(yemaa); mod.addAttribute("pif",pif); mod.addAttribute("ppUuts",pageUtils); List<Scenic>sccs=scService.getScenics(); mod.addAttribute("sccs",sccs); List<Specialty>sppcs=spService.getSomeSpecialty(); mod.addAttribute("sppcs",sppcs); List<Hotel>htts=htService.getSomeHotels(); mod.addAttribute("hotels",htts); mod.addAttribute("index_count",2); return"scenicc_sshow";}4.2.3查询旅游信息(1)算法设计思路用户在搜索框中可以选择景区、特产、游记和资讯四个标签中的一个,然后输入想要查询搜索的内容,点击搜索提交表单,请求参数发送到controller,判断选择的标签id是多少,id对应为0、1、2、3,再根据搜索内容进行模糊查询,查询出的内容分页显示出来。(2)实现代码 publicStringgetMag(Modelmod,Searchsousuuoo,@RequestParam(required=false,defaultValue="1",value="page")Integerppggg){ Stringclassiiid=search.getClassid(); Stringjiieguuo=null; if(classiiid.equals("0")){ PageHelper.startPage(ppggg,5); List<Scenic>scl=scenicService.getScenicByName(sousuuoo); PageInfo<Scenic>scPpifff=newPageInfo<>(list,5); ppUuts.setTotal(scPpifff.getTotal()); ppUuts.setPageNum(scPpifff.getPages()); ppUuts.setCurrentPageNum(ppggg); ppUuts.setBackPageNum(scPpifff.getPrePage()); ppUuts.setNextPageNum(scPpifff.getNextPage()); mod.addAttribute("scPpifff",scPpifff); mod.addAttribute("ppUuts",ppUuts); List<Scenic>sccss=scenicService.getScenics(); mod.addAttribute("sccss",sccss); List<Specialty>sppps=specialtyService.getSomeSpecialty(); mod.addAttribute("sppps",sppps); List<Hotel>hhtts=hotelService.getSomeHotels(); mod.addAttribute("hhtts",hhtts); result="scenicc_show"; } returnresult; }4.3管理员模块的设计与实现4.3.1旅游信息管理(1)算法设计思路管理员登录进入到后台页面后,可看到景区、特产、酒店、广告和资讯管理,在此举一个景区管理的例子进行讲解,其他管理与此类似,点击景区管理延伸出两个子选项,为查询景区和新增景区,在进项点击查询景点之后,controller调用service中的分页查询法,找出所有的景区的信息数据,点击“修改”会弹出一个模态框,更改了景点的信息后,点击“提交”按钮,controller中会调用service中的方法来进行数据的更新,点击新建景点就会出现一个模式框,输入信息后点击添加景点。controller中会调用service中的方法来新增数据,此外还有发布、上架、下架、全选、反选、不选和批量下架等操作。(2)实现代码@RequestMapping("/addSnnnccn")publicStringaddSnnnccn(@RequestParam(value="file")MultipartFile[]wenjjian,SnnnccenicWithBLOBssnnnccbs,Modelmoodl)throwsException{intsnnnccNuum=snnnccbs.getSnnnccenicnum();snnnccbs.setStage(1);List<String>bclj=uploadFileService.uploadSnnnccenicImag(wenjjian,snnnccNuum);if(bclj!=null){for(inti=0;i<bclj.size();i++){if(i==0){snnnccbs.setPic1(bclj.get(i));}if(i==1){snnnccbs.setPic2(bclj.get(i));}if(i==2){snnnccbs.setPic3(bclj.get(i));}}}try{snnncceenicServvice.addSsnnnccenic(snnnccbs);}catch(Exceptione){moodl.addAttribute("error","还有信息未填写");return"admminn/error7";}return"rediirrect:/bacckSnnncceenic/requuestAllSnnncccenics";}4.3.2首页信息发布管理(1)算法设计思路管理员登录进入到后台页面后,点击信息发布管理下的特产管理以及景区管理,点击特产管理后,controller调用service中的方法,根据类型分页查询出所有发布的特产信息或者景区的信息,点击“修改”按钮后会弹出一个模态框,仔细修改完信息点击提交修改,controller中会调用service中的方法来更新数据,此外还有上架、下架等操作,这是发布到首页显示的。(2)实现代码@RequestMapping("/downPublishContent")publicStringdownPublishSpecialty(intcid,intcategoryid,Modelmooddl){try{backContentService.downPublishContent(cid);}catch(Exceptione){mooddl.addAttribute("xiajError","首页信息下架发生错误");return"addmiin/error";}return"redirect:/backContent/getPublishContent?categoryid="+categoryid+"";}@RequestMapping("/upPublishContent")publicStringupPublishSpecialty(intcid,intcategoryid,Modelmooddl){try{backContentService.upPublishContent(cid);}catch(Exceptione){mooddl.addAttribute("shangjError","首页信息上架发生错误");return"addmiin/error";}return"redirect:/backContent/getPublishContent?categoryid="+categoryid+"";}第5章本旅游信息系统的系统运行效果分析5.1用户模块运行效果(1)用户注册用户进入注册页面,输入账号、昵称、密码和邮箱,若用户账号已存在则会注册失败,注册成功后会给用户邮箱发封欢迎邮件,如图5所示。图5用户注册示例图(2)用户登录用户进入登录页面,输入账号密码,在账号存在以及密码正确的情况下就能登录账户成功,如图6所示。图6用户登录界面示例图(3)用户发表评论用户只有在登录账号成功后才能对旅游信息进行评论,如图7所示。图7用户评论示例图(4)用户修改个人信息用户点击个人中心后,会直接跳转到到修改个人信息的界面,将原本的个人信息显示出来,在此基础上可进行修改,点击保存即可修改成功,如图8所示。图8用户修改个人信息示例图(5)用户修改头像用户登录“个人中心”后,点击“我的头像”,点击选中文件,选择想要的照片,单击“保存”即可完成头像的更改,见图9。图9用户修改头像示例图(6)用户修改密码用户登录个人中心后按一下更改密码,然后输入两次原来的密码和一个新的密码,所有的密码都正确后点击“保存”,见图10。图10用户修改密码示例图5.2旅游信息模块运行效果(1)首页信息首页上的旅游信息分为广告轮播图、推广景区、推广特产、热门游记、最新资讯这五个板块,这些板块都有按照条件排序,轮播图、推广景区、推广特产、最新资讯按发布时间降序排序,热门游记按点赞量降序排序,如下图所示。图11首页广告轮播图示例图图12首页景区发布示例图(2)查询旅游信息在搜索栏可以选择四个板块中的一个进行分页查询,输入关键字进行模糊查询,如图13所示。图13搜索旅游信息示例图(3)分区展示旅游信息列表点击页标签查看各个模块的旅游信息列表,旅游信息分页显示,如图14所示。图14景区信息示例图5.3管理员模块运行效果(1)景区管理列表管理人员可以浏览景点的相关资讯,并进行更新、发布、修改、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业节能减排的技术与方法探讨
- 工作室绿化对身体健康的促进作用研究
- 工业设计原理与创新方法探讨
- 工业设计的发展与创新
- 工业风环境设计的风格特点与实践案例
- 工作与生活平衡的职场发展策略
- 工程信息化背景下现代工程管理的新思路
- 工程数学实现工程项目的基石
- 工程机械中复杂结构的焊接工艺分析
- 工程建筑行业的安全管理实践
- 2025设备租赁合同版本范文
- 2025年全国高考数学真题全国2卷
- 2025年高考数学全国二卷试题真题及答案详解(精校打印)
- 2025年浙江杭州钱塘区和达能源有限公司招聘笔试冲刺题(带答案解析)
- 2025年衣物清洁多元化发展趋势白皮书-天猫家清第一财经商业数据中心
- 冷链物流园建设项目投融资与财务方案
- 酒店经销商合同协议书
- 转让钓场合同协议书
- 医院感染教学课件
- 叉车考试试题模拟100题及答案
- 《全球教育资源库》课件
评论
0/150
提交评论