其他项目,点击作者主页
目录
1 系统简介
2 系统相关技术
2.1开发语言以及环境
2.2Spring技术
2.3SpringMVC技术
2.4Mybatis技术
3 需求分析
3.1技术可行性分析
3.2操作可行性分析
2.3系统设计分析
3.3.1 角色分析
3.3.2 功能分析
4 系统设计
4.1详细设计
5 系统实现
5.1后台管理实现
5.1.1 权限控制实现
5.1.2 旅游项与旅游组的实现
5.1.3 旅游套餐的实现
5.1.4 旅游预约设置实现
5.1.5 图形报表实现
5.2旅游主页实现
5.2.1 快速登录实现
5.2.2 页面展示实现
5.2.3 旅游预约实现
1 系统简介
为解决现有的旅游信息管理系统涉及地点规模小,管理不规范以及传统的手写数据等问题,本次设计将开发一个旅游管理系统,系统主要基于SSM框架和MYSQL数据库技术实现。旅游管理系统Web页面能够实现人们对多个旅游套餐进行欣赏,可以查看旅游套餐的详细信息,以及通过邮箱在线预约。旅游管理系统的后端能够实现对旅游套餐的管理功能,预约日期的管理,还能通过图形报表直观的看出当前系统运营相关的信息。考虑到系统比较大,针对于后端管理系统,增加了Spring Security权限控制,加强对系统的安全保护,提高多人协作,使得该系统维护方便,多人进行管理系统。本系统将会改变以前靠手写数据进行统计信息的情况,提高系统管理人员的工作效率,通过景点信息美好的图片增强人们对旅游的向往。
2 系统相关技术
2.1开发语言以及环境
本系统采用JAVA语言进行开发,目前JAVA是最广泛的编程语言。JAVA作为面向对象编程的代表,极好的实现以及解释了面向对象理论,允许以优雅的思维方式进行复杂逻辑上的编辑。JAVA语言是分布式的,支持网络编程,还有多线程的、动态的。JAVA简单易学是本系统设计的核心基础。
本系统开发环境使用Maven进行管理。Maven是一个项目管理工具,核心功能是依赖传递。以往开发都是手动去下载安装工程所需要的Jar包,而Maven简化了这一操作,直接在pom文件中配置依赖所对应的坐标,自动下载安装。使用简单快捷又方便,又能方便快捷导入一些插件比如tomcat,本系统项目模块都交给Maven进行管理。
2.2Spring技术
Spring是一个开源框架,是轻量级的JAVA开发框架,Spring提供IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,可以有效避免硬编码所造成的重复耦合,IOC主要特点依赖注入,控制反转。本系统主要采用IOC以及声名式事务进行完成。
2.3SpringMVC技术
SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,为简化系统开发提供了良好的基础。通过注解方式能够快速的进行开发。本系统采用前后分离模式进行开发,前端页面代码通过VUE+AJAX来对后端进行请求,后端管理系统接受到请求进行响应。
2.4Mybatis技术
Mybatis是一个优秀的持久层的解决方案,支持自定义SQL、映射,本身很小并且简单,易于学习,还特别灵活。传统的JDBC代码太复杂了,Mybatis更容易上手,SQL语句和代码的分离,提高了系统的性能以及维护能力,提供XML标签。Mybatis是把连接数据库的信息都写在配置文件中,配置文件中有对应的约束,因此不存在硬编码问题,方便后期维护。本系统采用Mybatis,底层大量通过Mybatis对数据的查询。
3 需求分析
在开发设计之前,需要确定本次设计项目的规模和目标,了解模块对应的功能,对每种解决方案进行多次测试,得到最优的解决方案。
随着科技的飞速发展,改变了我们了解旅游的传统的方式,现在可以通过电子产品来了解旅游的相关信息。因此关于旅游的网站还有系统等随之出现。解决人们旅行不够直观的了解信息,往常都是通过人传人的口头说明,没有自己的判断,想象出来的画面跟实际有很大差异,因此,可以通过电子设备查看旅游的相关信息以及照片,满足我们的需求。
3.1技术可行性分析
从技术的方面讲,本系统采用SSM框架进行开发。采用JAVA语言进行编程,尤其适合WEB的开。采用Spring、SpringMVC、Mybatis框架进行简化开发,开发速度快,对管理系统的开发。数据库方面采用MySql,MySql是比较优秀的数据库,充分满足系统的存储数据的需求,负责数据库连接的Mybatis集成JDBC技术,极大的简化了对SQL和JAVA代码的分离,整体简洁。
本系统使用Maven进行管理,通过插件Tomcat启动服务,通过Dubb远程调用服务。采用七牛云的云端进行图片的上传操作,通过Redis进行清理云端垃圾图片。
3.2操作可行性分析
在B/S结构系统中,用户可以通过网站向后端发送自己的请求,后端对用户发送的请求进行及时的处理[1]。B/S极大结构简化了客户端的操作,将压力给到服务器上,数据库的访问等工作将在服务器上完成,返回到游览器的数据进行加工动态化。
本次设计的旅游管理系统界面清晰,操作方便,有统一的返回结果类型,以及对异常的处理机制,用户只要简单了解就可以操作自如,因此在使用、操作方面简单便捷,完全可行。
2.3系统设计分析
3.3.1 角色分析
旅游管理系统分为三种角色,临时用户,临时用户如果预约自动注册为会员,还有系统管理员,系统管理员不唯一,由于采用Spring Security,通过权限控制,次一级的系统管理员没有主要的管理员的全部操作。采用权限控制方便多人协同对管理系统进行维护,有更好的体验效果,如数据的实时更新,日历预约控件的预约人数设置,以及报表的统计数据。多人协作维护使得系统具有很有的可持续性。当用户对页面进行有游览,景点信息的查看,美图的欣赏,如果符合用户的需求,可以进行对景点景区预约,会检测是否时第一次预约,针对重复预约等操作进行阻止。当预约成功后、会自动成为会员。
3.3.2 功能分析
图2-1 用户用例图
使用Freemarker为减少对数据库的压力,对页面静态化。使得用户具有良好的体验效果。用户用例图如图2-1所示。
图2-2 系统管理员用例图
拥有管理员权限的用户,可以对网站页面进行以下操作。如管理员登录,退出登录,更新修改旅游套餐的信息,可以进行上传图片,根据表格导入日历预约人数管理,设置每天的预约人数,报表的信息,后台所有运营的信息,并且管理员可以查看所有旅游套餐景点信息,管理员的用例图如图2-2所示。
4 系统设计
4.1详细设计
图4-1 系统总体设计
图4-2 系统功能结构图
如图4-1系统总体设计以及如图4-2系统功能结构图所示,本系统设计到多个模块,分别为管理旅游项、管理旅游组、管理旅游套餐、管理旅游预约人数日期设置、图形报表的查看、权限控制、快速登录、页面展示、旅游预约多个模块结合起来的系统。
旅游项管理功能模块,通过Mybatis对Mysql数据库增删改查,旅游组管理模块与旅游项管理设计同理,对数据库进行的增删改查,增加了旅游组与旅游项之间的关联关系。
旅游套餐的实现,涉及到七牛云云端存储,以及定时任务组件Quartz。定时任务组件Quartz提供定时任务,主要设计于清理Redis中垃圾图片。由于考虑到这一上传图片过程可能会有垃圾图片。因此上传图片的设计,采用了Redis。在每次上传图片之后都会以Set集合的形式存储到Redis中,在每次新增套餐提交的过程中,会把图片的信息存储到另一个Set集合中[6]。进行差值运算,得到垃圾图片,然后删除七牛云中的垃圾图片。由于清理操作一般都采用自动清理,因此设置另一个服务Job工程,里面采用定时任务组件Quartz,指定触发的时间,基于Cron表达式,设置为10秒自动清理垃圾图片,这样就解决了垃圾图片问题。
预约设置页面采用日历控件的形式展示,方便管理员进行预约管理,页面简洁。预约设置的实现,采用了POI技术,该技术有具体操作表格文件,因此可以通过表格进行旅游预约设置。
ECharts缩写来自Enterprise Charts,商业级数据图表。图形报表的设计通过ECharts技术,系统管理人员可以通过图形报表有效的对信息进行管理。
完成了后台管理系统的功能,如旅游项管理、旅游组管理、报表信息等功能。考虑到系统没有安全可靠性,因此不同的用户可能拥有不同的权限,这就需要进行授权了,解决这些问题,就需要用到了Spring提供的安全认证服务的框架Spring Security,使用Spring Security可以帮助我们来简化认证和授权的过程。
快速登录功能模块采用了邮箱验证码的形式体现,增强用户的安全性,由于验证码没有必要存储到数据库中,因此存储到Redis中并设置有效期为5分钟。
前端系统设计采用Freemarker页面静态化技术,我们需要使用Freemarker页面静态化技术,来为数据库减少压力,并且提高系统的运行性能。使用Freemarker技术需要考虑到什么时候生成静态页面比较合适,将静态页面生成到什么位置。解决方案就是当套餐数据发生改变时,即我们通过后台系统修改套餐数据(包括新增、删除、编辑)时,直接将静态页面生成到项目工程中。
旅游在线预约功能的实现,采用了邮箱验证码,存储到Redis中,当信息提交时,取出Redis中的验证码进行校验。预约成功之后,后台管理系统将会对预约时的日期进行自动设置人数。
5 系统实现
5.1后台管理实现
5.1.1 权限控制实现
当访问管理系统时,将会自动查看是否登录,未登录会自动跳转到登录页面。如图5-1登录功能所示:
图5-1 登录功能
当登录成功之后,页面右上角会显示当前账户的用户名,如图5-2admin账户所示。
图5-2 admin账户
当前登录的账户拥有后台管理的所有权限。退出登录会自动跳转到登录界面,登录次级管理员sese,如图5-3 sese账户所示。
图5-3 sese账户
明显看出用户名已发生改变。次级管理员的权限有限,当前仅设置了不能删除旅游项为演示,当次级管理员要删除旅游项时,会弹出提示,如图5-4无权限所示。
图5-4 无权限
次级管理员没有该权限进行管理,权限控制的逻辑实现,通过当前登录的用户名查询数据库,获取管理员信息,动态为用户进行授权,首先为用户授予角色,系统管理员,次级管理员,根据所登录的账号进行授予,然后再根据角色,查找数据库中对应的权限,最后为当前账号授予对于应的权限。
权限控制对后台管理系统来说,提高了系统的维护以及管理,对系统的管理分为多个人进行管理,大大减轻了压力,以及精准性。
5.1.2 旅游项与旅游组的实现
旅游组与旅游项的管理,都有对应的增删改查功能,以及分页显示,可以看出整个页面比较简洁。如图5-5旅游项管理所示。
图5-5 旅游项管理
新增旅游项,就是比较简单的增加操作,把对应信息填写完整即可,项目编码以及项目名称为必填项如图5-6旅游项信息,填写之后会展示新增成功如图5-7旅游项新增成功所示。不填写将会新增旅游项失败。
图5-6 旅游项信息
图5-7 旅游项新增成功
新增旅游项成功之后,如果增加或者修改的信息有误,可以选择编辑功能,重新定义本次旅游项之后会编辑成功如图5-8所示。也可以选择删除功能,删除之后会提示出删除旅游项成功如图5-9所示。
图5-8 编辑旅游项成功
图5-9 删除旅游项成功
对于旅游组来说,实现了基本的增删改查功能。设计难点在与复选框以及旅游项的关联信息。
新增旅游组,填写基本信息即可如图5-10新增旅游组基本信息所示,根据需求进行选择所需的旅游项如图5-11选择旅游项所示。新增设计底层对数据库的操作是对旅游项与旅游组的中间关系表进行关联,即可新增旅游组成功如图5-12新增旅游组成功所示。
图5-10 新增旅游组基本信息
图5-11 选择旅游项
图5-12 新增旅游组成功
删除旅游组与编辑旅游组的功能,编辑旅游组更细对应信息提交将会显示如图5-13编辑旅游组成功所示。由于已经关联的旅游项,如果直接删除会报错,首先需要清楚组与项之间的关联关系,重新定义SQL语句,然后进行删除操作即可成功如图5-14删除旅游组成功所示。
图5-13 编辑旅游组成功
图5-14 删除旅游组成功
5.1.3 旅游套餐的实现
新增套餐,可以关联旅游组的信息,实现了上传图片功能如图5-15图片上传成功所示,直接存储到七牛云云端中。新增旅游套餐之后会提示如图5-16新增旅游套餐成功所示。
图5-15 图片上传成功
图5-16 新增套餐成功
对于删除旅游套餐来说,跟删除旅游组逻辑一致,数据库底层必须先清理旅游套餐与旅游组之间的关联关系,然后再删除套餐,删除成功之后如图5-17 删除套餐成功所示。
图5-17 删除套餐成功
5.1.4 旅游预约设置实现
预约设置的步骤,首先进行下载对应的模板文件,如图5-18下载上传所示。
图5-18 下载上传
模板文件可以填写相应的日期,以及预约数量。根据系统的需求,进行预约人数的设置,如图5-19表格文件所示。
图5-19 表格文件
然后进行上传即可,会进行自动导入该模板文件的设置。由于考虑到数据库中可能存在原有的日期,可能会冲突,因此服务实现添加了逻辑判断,避免发生异常,本次设计比较合理,当导入成功之后如图5-20文件导入成功所示。
图5-20 文件导入成功
并且还添加了当前日期预约设置功能,可以看出有设置按钮,如果需要修改,点击设置按钮即可完成。例如日期21日如图5-21日历控件所示。
图5-21 日历控件
将会弹出预约设置窗口,在次可以进行预约人数的设置如图5-18预约人数设置。
图5-22 预约人数设置
预约设置成功,明显看出21日原本为已满,经过修改预约人数,没有出现已满字样。如图5-23预约设置成功所示。
图5-23 预约设置成功
5.1.5 图形报表实现
后端管理系统中,统计分析可以直观看出数据的信息。
会员数量统计。如图5-24会员数量报表所示。
图5-24 会员数量报表
会员数量统计通过折线的形式展现出来,服务实现要获取当前日期与前12个月的信息,根据每个月份进行查询数据库统计会员信息。
针对于旅游套餐的统计,设计了预约人数最多的前5个套餐,也就是热门套餐。调用ECharts提供的饼形图来展示热门套餐,更能让系统管理员对于套餐的预约情况一目了然。如图所示5-25套餐饼形图所示。
图5-25 套餐饼形图
对于后台运营数据的管理,服务实现查询数据库中信息,如会员数据统计,预约到达数据统计,热门套餐等一些数据,在页面上进行详细显示。如图所示5-26运营数据所示。
图5-26 运营数据
明显看出所有数据信息,系统管理员对其信息有清晰的了解,方便系统后期运营。还有导出Excel功能如图所示5-27导出Excel所示。
图5-27 导出Excel
当点击之后,将所有运营数据通过表格的形式进行下载。如图所示5-28表格下载。
图5-28 表格下载
通过如图5-29运营数据表格所示的Excel效果可以非常清晰看到对应的数据情况,为我们系统运营管理提供了非常大的方便。
图5-29 运营数据
5.2旅游主页实现
5.2.1 快速登录实现
快速登录模块,通过邮箱,发送6位随机数字,用户进行输入邮箱提供的随机验证码即可登录。处理快速登录的逻辑:首先把Redis中存储的用户需要登录的验证码取出来,根据用户所输入的验证码进行逻辑判断,如果验证码输入有错误,如图5-30快速登录所示:
图5-30 快速登录
如果验证码输入成功,将会跳转到旅游的首页进行浏览,预约等服务。
5.2.2 页面展示实现
图5-31 旅游首页
登录成功之后自动跳转到旅游首页,如图5-31旅游首页。
图5-32 旅游套餐
页面展示出来所有旅游的景点图片,如图5-32旅游套餐所示。展示出预约信息,可以清楚看到所有的旅游套餐信息,根据用户需求进行操作。
根据需求点开之后会展示出相关的旅游套餐所有信息,包含旅游组,旅游项的详细信息,根据自己需求进行预约,如图5-33旅游套餐详情所示。
图5-33 旅游套餐详情
5.2.3 旅游预约实现
根据用户需求进行预约,当用户需要预约时将会进行信息填写,填写预约人、性别、邮箱、邮箱验证码、还要进行选择日期。具体预约流程为,在旅游网上点击自己喜欢的旅游套餐,在预约页面填写自己邮箱收到的4位随机验证码以及个人信息,填写并提交即可,完成旅游。
针对于邮箱验证码的设计,增强了用户成为会员的安全性,预约时发送的邮箱验证码为4位数的随机数,当发送成功后如图5-34预约验证码所示。本次设计运用到Redis,验证码没有必要存储到数据库中,这是临时用的因此没有必要。邮箱中会收到发送的4位数的随机验证码如图5-35邮箱验证码所示。设置有效期为5分钟。此时用户将会收到验证码信息。
图5-34 预约验证码
图5-35 邮箱验证码
整体设计思路是,首先获取用户所输入的邮箱验证码,再把Redis中存储的邮箱验证码拿出来进行逻辑上的判断。不成功将会提示验证码输入错误如图5-36输入错误所示。
图5-36 输入错误
考虑到预约失败不止验证码输入错误这一问题,还有如下情况:用户当前所预约的日期,后台管理系统没有进行设置,也就是当前日期可预约人数为0,将会提示如图5-37不能预约所示。
图5-37 不能预约
解决这一问题就是,查询数据库中,用户所选的预约日期是否提前进行了预约人数,增加了逻辑判断,如果没有则不能进行预约。
如果后台管理系统设置了当前日期预约人数,并且当前日期的预约人数已经预约满,则会提示出如图5-38预约已满所示。
图5-38 预约已满
此时还要考虑用户是否重复进行预约,根据条件进行查询数据库,如果存在重复,将会提示如图5-39重复预约所示。
图5-39 重复预约
预约成功之后将会显示如图5-40预约成功所示。
图5-40 预约成功
预约成功,将会为检测用户是否是会员,如果不是会员,将会自动注册为会员,此时会更新当日的预约人数,并且告诉用户预约成功,此时会收到预约成功的邮箱如图5-41收到信息所示,邮箱中对应的套餐、日期、预约人、预约的类型如图5-42预约旅游信息所示。
图5-41 收到信息
图5-42 预约旅游信息
源码+过程性文档+论文