文章目录
- 摘 要
- 目 录
- 1 概述
- 1.1 研究背景及意义
- 1.2 国内外研究现状
- 1.3 拟研究内容
- 1.4 系统开发技术
- 1.4.1 Java编程语言
- 1.4.2 vue技术
- 1.4.3 MySQL数据库
- 1.4.4 B/S结构
- 1.4.5 Spring Boot框架
- 2 系统需求分析
- 2.1 可行性分析
- 2.2 系统流程
- 2.2.1 操作流程
- 2.2.2 登录流程
- 2.2.3 删除信息流程
- 2.2.4 添加信息流程
- 2.3 性能需求
- 3 系统设计
- 3.1 设计原则
- 3.2 功能结构设计
- 3.3 数据库设计
- 3.3.1 数据库概念设计
- 3.3.2 数据库物理设计
- 4 系统实现
- 4.1 系统前台功能实现
- 4.2 后台用户模块实现
- 4.3后台管理员模块实现
- 5 系统测试
- 5.1 测试目的
- 5.2 功能测试
- 5.2.1 登录功能测试
- 5.2.2 修改密码功能测试
- 5.2 测试结果
- 6 总结
- 参考文献
- 致 谢
摘 要
当今社会进入了科技进步、经济社会快速发展的新时代。计算机技术对经济社会发展和人民生活改善的影响日益突出,人类的生活方式和思考方式也产生了变化。传统旅游信息管理采取了人工的管理方法,然而,这一种管理方式存在着诸多缺陷,包括但不限于效率低下、安全性不高以及信息传输的不精准等问题,同时由于旅游信息管理系统中会形成众多的旅游文档和信息系统数据,通过人工方法对旅游信息进行集中管理会形成检索、更改和维护等较为麻烦的管理问题,同时当下人民群众对旅游信息管理的需求也日益高涨。根据此问题,研发一套西南旅游论坛管理系统,既能够大大提高信息的检索、变更与维护的工作效率,也能够方便信息系统的管理运用,从而减少信息管理成本,提高效率。 该西南旅游论坛管理系统采用B/S架构、前后端分离以及MVC模型进行设计,并采用Java语言以及SpringBoot框架进行开发。该系统操作简单,界面设计简单,不仅能基本满足目前西南旅游论坛管理系统的日常管理工作,而且能有效降低人员成本和时间成本,为西南旅游论坛管理工作提供方便。
关键词:西南旅游论坛;Java;SpringBoot框架;B/S架构
目 录
1 概述 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.3 拟研究内容 2
1.4 系统开发技术 2
1.4.1 Java编程语言 3
1.4.2 SSM框架 3
1.4.3 MySQL数据库 3
1.4.4 B/S结构 3
1.4.5 MVC模式 4
2 系统需求分析 4
2.1 可行性分析 4
2.2 功能需求分析 6
3 系统设计 6
3.1 功能模块设计 错误!未定义书签。
3.2 系统流程设计 错误!未定义书签。
3.2.1 登录流程 错误!未定义书签。
3.2.2 添加信息流程 错误!未定义书签。
3.2.3 收藏信息流程 错误!未定义书签。
3.3 数据库设计 41
3.3.1 数据库系统 错误!未定义书签。
3.3.2 数据库概念设计 错误!未定义书签。
3.3.3 数据库逻辑设计 错误!未定义书签。
4 系统实现 18
4.1 系统前台功能实现 18
4.2 后台用户模块实现 29
5 系统测试 40
5.1 测试目的 40
5.2 测试用例 40
6 总结 43
参考文献 43
致 谢 46
1 概述
1.1 研究背景及意义
随着社会的进步、服务行业的服务水平不断发展与提高,宾馆、酒店、旅游等服务行业的信息量和工作量日益变大,而传统的人工管理方式已经远远不能满足现在旅游的服务方式[1]。21世纪以来,随着科学技术的飞速发展,计算机及其相关软件已经成为人们日常生活与工作中不可或缺的重要工具。在这个信息时代,人们对信息的要求日益增高,传统的信息处理方式已难以满足现代社会的需求。西南旅游论坛管理系统正是在这样的背景下应运而生,它通过先进的计算机技术来管理旅游信息,优化旅游论坛与用户之间的互动,旨在提高旅游信息交流的效率,同时也为旅游业的发展贡献力量。
本文研究的目标是通过对各种功能单元的最优整合,实现对论坛管理的具体要求,从而最大限度地提高旅游论坛管理系统的自动化和信息化水平。这不仅使得旅游信息更加清晰、透明,而且操作简单,管理方便。系统能够实现自动检测,减少信息错误,有效提升用户体验和服务品质。
西南旅游论坛管理系统的开发重点在于信息的处理,它需要处理大量信息,涉及多种类型和复杂的管理工作,使整个过程更加高效。该系统的特色在于它能够处理复杂的数据检索和分析,大大简化了传统旅游信息管理的繁琐流程。通过引进先进的计算机技术,我们可以更好地管理旅游信息,提高服务质量。
该系统满足了时代变化和用户需求,充分利用了网络的交互性和实时性,提供方便、快捷、舒适的服务。它使用户能够及时获取最新的旅游信息和数据,有效提升旅游论坛服务水平。本系统的优势包括:
(1)及时提供旅游论坛信息给用户,确保信息真实可信,保障用户权益。
(2)界面结构简洁,用户友好,便于用户使用。
(3)系统更新方便,成本低廉,能够与用户进行有效的双向信息交换,适应市场发展,吸引更多用户。
1.2 国内外研究现状
随着旅游业的迅速发展以及人们对旅游信息分享和交流需求的增长,旅游论坛作为一种新兴的信息交流平台受到了广泛关注。旅游论坛管理指的是通过在线平台为旅游爱好者提供信息分享、交流和管理的服务。
在国外,欧美等地区对于旅游论坛的研究较为深入。例如,一些知名的旅游网站如TripAdvisor、Lonely Planet等,已经建立了功能丰富的旅游论坛,并提供用户互动、信息共享等服务。此外,欧洲的一些旅游论坛平台如Wayn、VirtualTourist等也为用户提供了旅游信息交流的平台。
在国内,基于Java的旅游论坛管理系统的研究起步较晚,但近年来随着国内旅游市场的蓬勃发展,这一领域得到了快速发展。一些新兴的旅游论坛和社交平台,如马蜂窝、穷游网等,已经开始引入更为高效的论坛管理系统,提高用户体验并促进信息的高效交流。这些平台通过整合用户反馈、旅游日志和目的地信息,逐渐形成了具有特色的旅游论坛文化。
1.3 拟研究内容
针对传统跟团旅游已不能满足消费者日益增长的多样化旅游需求问题,采用Spring Boot+MyBatis+Bootstrap技术构建了一体化的桌面移动旅游平台[2]。本文使用SpringBoot+ MyBatis作为后端框架完成网站的逻辑判断和处理,使用模板引擎Thymeleaf当作前端页面,设计并实现了一个内容充实,简单易用的特色旅游资源管理网站[3]。具体研究内容如下:
用户登录系统,便可对个人信息进行修改,对首页、商品信息、公告信息、商品出租、留言板进行查看,对个人中心、后台管理、旅游路线、论坛信息管理、个人信息管理等进行操作。
管理员登录系统,便可对个人信息进行修改,对用户管理、个人中心、旅游路线管理、板块分类管理、论坛信息管理、基本数据管理、轮播图管理、评论管理等方面的管理。
1.4 系统开发技术
1.4.1 Java编程语言
Java语言成为现今主流编程语言之一,是基于其独特特点和众多优势。首先,Java语言编写的程序,在不同操作系统、不同浏览器下使用相同的字符集和语法,可以大大提高代码可读性和可维护性。其次,Java有完善的面向对象编程规范和语法。此外,Java还提供了丰富的类库。另外,Java语言对于开发工具要求不高,有专业的编程工具IntelliJ IDEA会更顺利编程,但是,没有专业的编程软件,用记事本也能进行编辑。
1.4.2 vue技术
在动态网站的兴起之初,作为高级编程语言的Java自然不会放弃这个领域的蛋糕。Sun公司推出了Servlet作为输出动态网站的一种技术标准,虽然不怎么受当时程序员的喜爱,但是当初也没有太多的选择,随后几个月java语言问世,不考虑性能和效率如何,起码在书写网页所需要的动态代码块和静态代码块方面进行了区分,让书写效率和可读效率大大的提升,所以很多Java程序员以及刚入行的初级程序员都选择了java语言作为自己职业的发展方向,Sun公司为了维护Java语言在高级编程语言上的江湖地位,防止java继续抢走市场份额占有率,Sun公司联合Apache基金会研发了一个关于Java动态网页的一个新型的技术标准,这就是vue技术。vue吸取了java语言在页面书写上面的所有优点,但是又背靠Java EE的庞大后台,又能实现很多通过Java组件就能实现的功能,在vue页面上可以直接引用那些组件,让vue更加的强壮丰富。保证了Java技术纵向的可持续发展,并且在动态网站开发领域终于站稳了脚跟,其他java开发人员可以很快的转移到vue进行开发,不考虑一些特殊组件或者功能的开发,只从动态页面的开发上来讲,完全实现了java程序和vue程序的几乎无成本的转换,vue技术就这样的发展了起来。
1.4.3 MySQL数据库
本课题所开发的应用程序在数据操作方面是不可预知的,是经常变动的,没有办法直接把数据写在文档里,这样不仅仅不安全,也不能实现应用程序的功能。如果要能实现应用程序所需要的数据存储功能,就避免不了要进行专业数据库存储软件的选择。基本上应用程序实现的功能不算太复杂,市面上任何一个关系型数据库软件都可以实现。参考自己的学习进度和操作习惯来讲,Oracle数据库是适合的,但是所需要的的安装软件很大,并且有好多不需要的功能都是开启的状态,十分消耗电脑资源,所以没有选择Oracle数据库,而SQL Server数据库虽然学过,但是安装的时候因为电脑上可能有其他的软件存在,经常性的出问题,而安装问题不好解决就需要重新安装操作系统,这样对已经存在的软件来讲又是一种时间上的浪费。只有MySQL数据库,安装包小,安装速度快,操作简单,哪怕安装出问题也好解决,不用重装操作系统,也不影响电脑上运行的其他软件,消耗资源也少,最重要的是在功能方面完全的符合设计需要,所以最后选择了MySQL数据库作为应用软件开发需要的数据库。
1.4.4 B/S结构
B/S结构目前广泛应用于绝大部分系统搭建中,这种结构摒弃C/S结构客户端服务端不分离的缺点,具有更多的优势:
(1)跨平台性:B/S的标准由标准化组织确立,适用于绝大多数的系统搭建,通用于应用之间。
(2)低维护成本:系统升级只需将服务端应用升级便可完成系统升级,此方式降低系统升级的难度和成本[8]。
1.4.5 Spring Boot框架
SpringBoot是由Pivotal团队提供的全新的Java框架,该框架的提出是为了简化Spring应用的开发及搭建过程[4-5]。该框架实现了自动配置免去了原本Spring的种种繁琐的配置文件,使SpringBoot可以快速简便的开发一个应用,同时SpringBoot内嵌了Tomcat服务器让部署更加简单[6]。
SpringBoot应用系统开发模板的基本架构设计从前端到后台进行说明:前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它们都是用Java语言编写的。
Thymeleaf是一款渲染html/xml的模板引擎,并且可以很简单地进行SpringBoot集成。
2 系统需求分析
需求分析是开发西南旅游论坛管理系统前的关键准备工作。它是信息系统设计中不可或缺的一部分,对基于Java的交互式旅游论坛系统的开发成败起着决定性作用。需求分析的首要任务是深入理解和识别用户的需求。在互联网技术日益普及的今天,利用网络和大数据技术对于提高系统性能和用户体验至关重要。当前,针对西南地区的旅游论坛管理系统面临多项挑战和需求。针对这一背景,开发一个有效的旅游论坛系统显得尤为必要。该系统旨在解决用户和管理者在旅游信息交流、分享和管理方面的需求。系统中用户数据的管理至关重要,因此数据应当被有效组织和存储。该系统预计将采用结构化的方式在数据库中存储和管理数据。数据库管理系统(DBMS)将用于存储、检索、更新和维护论坛数据。为了确保数据管理的高效性,系统将采用高性能的处理器,同时确保即使非专业人员也能轻松管理数据。在数据库系统设计中,预计将使用MySQL来实现数据的集中管理,并确保系统在各方面的高效运行。
2.1 可行性分析
面对即将开发的系统,进行提前的分析是必要的。这也是开发流程中必须有的环节。通常分析系统期间,主要涉及的内容包括系统开发可行性问题,对系统功能和性能的分析等问题。
(1)经济可行性
本系统采用Java语言编写,结合B/S架构,数据管理采用MySQL数据库。这种技术选择意味着系统对硬件要求不高,能够在多种低配置硬件上运行,有效降低了硬件成本和维护成本。所有使用的软件均为免费或开源,减少了软件成本并避免了潜在的法律风险。由于Java语言的普及和易于上手的特点,开发过程中的人力成本也相对较低。综合来看,从经济角度考虑,该旅游论坛管理系统具有较高的实施可行性。
(2)技术可行性
本平台采用的MVC模式的三层架构[7-13]。通过层次分明的架构和模块化的代码设计,既保证了代码的清晰性和可维护性,又便于功能扩展和代码重构。这种设计有利于系统的日常维护,同时降低了模块间的耦合度。此外,Java作为一种成熟的编程语言,有着丰富的库和框架支持,这也为系统的技术实现提供了坚实的基础。
(3)操作可行性
考虑到用户体验,本系统无需下载客户端,用户可直接通过浏览器访问旅游论坛。论坛界面设计简洁直观,操作便捷,用户可以轻松地浏览信息、发表帖子和互动,无需长时间的学习和适应。这种设计使得系统对于各类用户来说都是易于上手和使用的,增强了系统的普及性和用户黏性。
2.2 系统流程
流程图这样的工具可以直观反映出系统内部的操作逻辑,可以帮助用户更好的理解系统。
2.2.1 操作流程
进入本系统需要访问者提供验证信息。验证合格的访问者才能获取访问资格。其具体的操作流程见下图。访问者根据登录界面设置的信息项如实填写,待信息通过验证后,访问者可以进入指定的页面享受本系统提供的服务和阅读本系统的相关信息。
图3.1 操作流程图
2.2.2 登录流程
本系统的登录模块,其内部的流程见下图。主要对访问本系统的人员提供的验证信息进行逐个判断,系统面对录入错误的信息会给出提示,比如,提示账号不对,或提示密码不匹配等提示信息。总之,在登录页面填写的所有信息都符合要求,访问者就登录成功了。
图3.2 登录流程图
2.2.3 删除信息流程
本系统在经常性的使用后,会产生很多失去价值的信息,因此就需要及时清理数据,腾出系统的空间。对这些数据进行清理时,其对应的流程见下图。先选中要清理的数据,通过反复确认需要清理的数据,避免操作人员误删。已经删除的数据就不会出现在系统里面。
图3.3 删除信息流程图
2.2.4 添加信息流程
本系统主要用于显示信息,提供服务,其中,数据添加功能就是其中的服务之一,具体流程见下图。让操作者在信息添加的页面录入数据,待这些数据被提交检验合格后,就会在系统指定页面显示出来。
图3.4 添加信息流程图
2.3 性能需求
进行需求分析,包括了根据用户实际需求制定功能,也涵盖了对即将设计的系统进行性能上的需求分析。所以一般分析系统时,一方面要分析系统功能,另一方面也要分析系统的性能。毕竟设计开发出一个好性能的系统可以确保系统的质量可靠。
接下来分析系统的性能,还要从界面友好性,系统的时间特性,系统的可靠性等方面来分析说明。
(1)时间特性要求:系统处理数据都有时间要求,这也是系统的时间特性。通常都会把数据处理的时间进行分析,也会设置用户请求的响应时间,还有系统在满负荷运行时可以偏离的范围数值等都需要提前分析确定。
(2)界面友好性:除了功能上需要考虑用户需求外,在人机交互界面的设计上,也需要考虑用户的使用习惯,包括界面的布局,界面基调选择以及颜色搭配等。尽量做到用户在接受简单的培训之后,可以对系统进行独立操作。
(3)系统可靠性:对于初学者而言,很容易出现一个问题,就是设计开发的系统,因为人为的误操作出现崩溃,有些也会导致电脑死机。这样的现象也说明这种容错能力低下的系统是不可靠的。完全不能作为生活中处理信息的系统。当下,系统开发要保证可靠性,设计时,把模块化和结构化的设计理念也考虑进来。如果遇到对时效性要求比较严格的系统,也需要采取其它的措施,比如双机系统,还有磁盘阵列等方式。还有就是一个可靠性的系统,对设备的供电能力也有要求。
3 系统设计
目前,我国旅游业信息化的进程缓慢,传统的城市旅游宣传和管理方式大多采用人工完成,造成了人力和物力资源的浪费[14]。一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专业。
3.1 设计原则
本系统在设计过程中需要依照一定的设计原则进行,目的就是为了让开发的系统具备高质量,齐全完备的功能,方便简单的操作,如此才可以最大限度的满足使用者的要求。系统设计原则除了基本的易操作原则外,还有安全性原则,准确性原则。
第一个设计原则:易操作原则,针对本系统设计的功能要完备齐全,编码时,设计的各个接口要具备友好性,使用者一旦使用本系统时,要能够轻松上手,操作本系统处理数据时,要具备便利性。此外,也需要设计一些必要提示,引导使用者操作系统。
第二个设计原则:安全性原则,本系统在登录模块要对各个访问者进行身份验证,系统会通过访问者输入的信息进行判断,使用提前编写的安全验证代码进行数据比对,引导匹配成功的访问者进入指定的操作界面。这样可以避免无关性访问者窃取系统的数据。
第三个设计原则:准确性原则,为了保证使用者登记的数据是正确的,需要提前设计数据纠错机制,让使用者可以通过系统的报错提示,仔细检查登记的错误信息,并及时纠正错误,填写规范正确的信息。比如设置密码时,要求密码的长度不能低于6个字符,且数据类型要求不能全部是数字等都能进行规范。
3.2 功能结构设计
在前面分析的管理员功能的基础上,进行接下来的设计工作,最终展示设计的管理员结构图(见下图)。管理员增删改查旅游动态
3.3 数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。
3.3.1 数据库概念设计
这部分内容需要借助数据库关系图来完成,也需要使用专门绘制数据库关系图的工具,比如Visio工具就可以设计E-R图(数据库关系图)。设计数据库,也需要按照设计的流程进行,首先还是要根据需求完成实体的确定,分析实体具有的特征,还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法,绘制本系统的E-R图。不管是使用亿图软件,还是Visio工具,对于E-R模型的表示符号都一样,通常矩形代表实体,实体间存在的关系用菱形符号表示,实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形,菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。
(1)下图是论坛实体和其具备的属性。
图4.1 论坛实体属性图
(2)下图是旅游路线实体和其具备的属性。
图4.2 旅游路线实体属性图
(3)下图是用户实体和其具备的属性。
图4.3 用户实体属性图
(4)下图是公告信息实体和其具备的属性。
图4.4 公告信息实体属性图
(5)下图是字典表实体和其具备的属性。
图4.5 字典表实体属性图
(6)下图是景点留言实体和其具备的属性。
图4.6 景点留言实体属性图
(7)下图是旅游动态实体和其具备的属性。
图4.7 旅游动态实体属性图
(8)下图是景点信息实体和其具备的属性。
图4.8 景点信息实体属性图
(9)下图是公司简介实体和其具备的属性。
图4.9 公司简介实体属性图
(10)下图是用户表实体和其具备的属性。
图4.10 用户表实体属性图
3.3.2 数据库物理设计
本数据库是关系型数据库,因此对二维表的结构设计也比较关键。毕竟二维表格模型就是关系型数据库中的关系模型。而一些常用的关系模型中的概念也需要了解,才可以对关系模型进行设计。下面就简单介绍关系,元组,属性,域,关键字等常用概念的含义。
关系:关系就是数据库中的一张数据表,每张数据表都有命名,也就是每个关系也有名字,那就是数据表名;
元组:元组就是数据表中的一行记录;
属性:属性就是数据表中的字段,也就是数据表中的一列;
域:域就是对数据表中属性的取值进行限定;
关键字:关键字就是数据表中的主键;
在了解了表结构设计的常用概念后,接下来就需要使用前面绘制的E-R模型完成表结构的设计工作,并在数据库中创建数据表,并为各个数据表进行命名。以下就对设计的结果通过表格形式进行展示。
表4.1字典表表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 dic_code String 字段 是
3 dic_name String 字段名 是
4 code_index Integer 编码 是
5 index_name String 编码名字 是
6 super_id Integer 父字段id 是
7 beizhu String 备注 是
8 create_time Date 创建时间 是
表4.2论坛表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 forum_name String 帖子标题 是
3 yonghu_id Integer 用户 是
4 users_id Integer 管理员 是
5 forum_content String 发布内容 是
6 super_ids Integer 父id 是
7 forum_state_types Integer 帖子状态 是
8 insert_time Date 发帖时间 是
9 update_time Date 修改时间 是
10 create_time Date 创建时间 是
表4.3景点信息表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 jingdian_name String 景点名称 是
3 jingdian_types Integer 景点类型 是
4 jingdian_photo String 景点图片 是
5 jingdian_content String 景点详情 是
6 insert_time Date 发布时间 是
7 create_time Date 创建时间 是
表4.4景点留言表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 jingdian_id Integer 景点 是
3 yonghu_id Integer 用户 是
4 jingdian_liuyan_text String 留言内容 是
5 reply_text String 回复内容 是
6 insert_time Date 留言时间 是
7 update_time Date 回复时间 是
8 create_time Date 创建时间 是
表4.5旅游动态表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 lvyoudongtai_name String 动态标题 是
3 lvyoudongtai_types Integer 动态类型 是
4 lvyoudongtai_photo String 动态图片 是
5 yonghu_id Integer 用户 是
6 lvyoudongtai_content String 动态详情 是
7 insert_time Date 发布时间 是
8 create_time Date 创建时间 是
表4.6旅游路线表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 lvyouluxian_uuid_number String 路线编号 是
3 lvyouluxian_name String 路线标题 是
4 lvyouluxian_types Integer 路线类型 是
5 lvyouluxian_photo String 路线图片 是
6 lvyouluxian_content String 路线详情 是
7 insert_time Date 发布时间 是
8 create_time Date 创建时间 是
表4.7公告信息表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 news_name String 公告标题 是
3 news_types Integer 公告类型 是
4 news_photo String 公告图片 是
5 insert_time Date 公告时间 是
6 news_content String 公告详情 是
7 create_time Date 创建时间 是
表4.8公司简介表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 single_seach_name String 名字 是
3 single_seach_types Integer 数据类型 是
4 single_seach_content String 内容 是
5 create_time Date 创建时间 是
表4.9用户表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 yonghu_name String 用户姓名 是
3 yonghu_photo String 头像 是
4 yonghu_phone String 联系方式 是
5 yonghu_id_number String 用户身份证号 是
6 yonghu_email String 邮箱 是
7 yonghu_delete Integer 假删 是
8 create_time Date 创建时间 是
表4.10用户表表
序号 列名 数据类型 说明 允许空
1 Id Int id 否
2 username String 用户名 是
3 password String 密码 是
4 role String 角色 是
5 addtime Date 新增时间 是
4 系统实现
4.1 系统前台功能实现
注册登录后才能使用系统的其他功能,用户注册登录界面如图4.1所示:
(a)
(b)
图4.1 注册登录界面
登录注册功能主要代码如下所示:
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = “/login”)
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper().eq(“username”, username));
if(yonghu==null || !yonghu.getPassword().equals(password))
return R.error(“账号或密码不正确”);
else if(yonghu.getYonghuDelete() != 1)
return R.error(“账户已被删除”);
String token = tokenService.generateToken(yonghu.getId(),username, “yonghu”, “用户”);
R r = R.ok();
r.put(“token”, token);
r.put(“role”,“用户”);
r.put(“username”,yonghu.getYonghuName());
r.put(“tableName”,“yonghu”);
r.put(“userId”,yonghu.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody YonghuEntity yonghu){
// ValidatorUtils.validateEntity(user);
Wrapper queryWrapper = new EntityWrapper()
.eq(“username”, yonghu.getUsername())
.or()
.eq(“yonghu_phone”, yonghu.getYonghuPhone())
.or()
.eq(“yonghu_id_number”, yonghu.getYonghuIdNumber())
.andNew()
.eq(“yonghu_delete”, 1)
;
YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
if(yonghuEntity != null)
return R.error(“账户或者联系方式或者用户身份证号已经被使用”);
yonghu.setYonghuDelete(1);
yonghu.setCreateTime(new Date());
yonghuService.insert(yonghu);
return R.ok();
}
系统首页。系统的主界面风格要结合该项目的目的、性质、种类进行设计, 直接展现了设计者的实力[15]。
包括查看旅游论坛、景点信息、旅游板块与类型信息、旅游路线信息、公告信息、推荐帖子信息。页面如图4.2所示:
图4.2 系统前台首页界面
在论坛页面可以进行帖子的发布,并且可以查看最近的时间内所有的帖子信息。页面如图4.3所示:
图4.3 商品信息详细页面
并且,用户进入到帖子详情页之后,可以查看帖子的想起信息,以及其他用户的评论信息。页面如图4.4所示:
图4.4 商品出租页面
论坛相关功能的核心代码如下:
/**
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug(“page方法:,Controller:{},params:{}”,this.getClass().getName(),JSONObject.toJSONString(params));
if(params.get(“orderBy”)null || params.get(“orderBy”)“”){
params.put(“orderBy”,“id”);
}
PageUtils page = forumService.queryPage(params);
//字典表数据转换
List<ForumView> list =(List<ForumView>)page.getList();
for(ForumView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ForumEntity forum = forumService.selectById(id);
if(forum !=null){
//entity转view
ForumView view = new ForumView();
BeanUtils.copyProperties( forum , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(forum.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//管理员用户表做特殊处理,防止和用户表账户姓名字段冲突
UsersEntity users = usersService.selectById(forum.getUsersId());
if(users != null){
view.setUsersId(users.getId());
view.setUusername(users.getUsername());
view.setUpassword(users.getPassword());
view.setUrole(users.getRole());
view.setUaddtime(users.getAddtime());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ForumEntity forum, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,forum:{}",this.getClass().getName(),forum.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
forum.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
else if("管理员".equals(role))
forum.setUsersId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<ForumEntity> queryWrapper = new EntityWrapper<ForumEntity>()
.eq("forum_name", forum.getForumName())
.eq("yonghu_id", forum.getYonghuId())
.eq("users_id", forum.getUsersId())
.eq("super_ids", forum.getSuperIds())
.eq("forum_state_types", forum.getForumStateTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ForumEntity forumEntity = forumService.selectOne(queryWrapper);
if(forumEntity==null){
forum.setInsertTime(new Date());
forum.setCreateTime(new Date());
forumService.insert(forum);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
在景点信息页面可以查看所有的经典,并且可以点击景点上面的板块按钮来快速切换到对应的板块,并且,支持按照名称的方式快速的查找某些感兴趣的景点。页面如图4.5所示:
图4.5 景点信息页面
旅游板块页面可以查看查看西南地区各个比较火热的旅游地区信息。如图4.6所示:
图4.6 旅游板块页面
旅游路线可以查看各个火热旅游地区的旅游路线图,帮助用户快速的了解各个旅游地区的景点方位以及如何行走。页面如图4.7所示:
图4.7 旅游路线页面
旅游线路功能核心代码如下:
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug(“page方法:,Controller:{},params:{}”,this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute(“role”));
if(false)
return R.error(511,“永不会进入”);
else if(“用户”.equals(role))
params.put(“yonghuId”,request.getSession().getAttribute(“userId”));
if(params.get(“orderBy”)null || params.get(“orderBy”)“”){
params.put(“orderBy”,“id”);
}
PageUtils page = lvyouluxianService.queryPage(params);
//字典表数据转换
List<LvyouluxianView> list =(List<LvyouluxianView>)page.getList();
for(LvyouluxianView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
LvyouluxianEntity lvyouluxian = lvyouluxianService.selectById(id);
if(lvyouluxian !=null){
//entity转view
LvyouluxianView view = new LvyouluxianView();
BeanUtils.copyProperties( lvyouluxian , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
公告信息可以查看网站公告,快速了解各个地区的旅游公告信息,帮助用户避免一些不必要的麻烦。如图4.8所示:
图4.8 公告信息界面
推荐帖子的内容来自于官方管理员,官方可以设定推荐帖子,帮助用户快速了解一些西南地区的特色,比如了解西南地区有那些著名公司,有那些著名的旅游景点等。如图4.9所示:
图4.9 推荐帖子界面
个人中心页面,在这里用户可以快速的查看自己的个人信息,并且进行一定的处理,比如进行个人信息的修改,头像的上传等功能,如下图4.10所示:
图4.10 个人信息界面
4.2 后台用户模块实现
用户进入后台主页面,主要包括对个人中心、论坛管理、景点信息管理、旅游种类和板块管理、旅游路线管理、公告信息管理功能等进行操作。如图4.11所示:
图4.11 用户后台主界面
点击租论坛管理,可以查看当前网站所有的论坛的帖子信息,并且查看到所有的发布帖子的用户信息,帖子的主要内容信息,帖子的发布时间等关键信息。并且,可以查看当前论坛下面某个帖子的回复信息。如图4.12所示:
图4.12 论坛管理界面
同时,论坛管理支持基于帖子标题以及用户姓名的搜索功能。如下图4.13所示:
图4.13 论坛管理搜索功能
点击景点信息管理,可以查看当前系统的所有的发布的景点信息,并且查看景点的详情信息,同时,也支持基于景点名称和景点类型的搜索。如图4.14所示:
图4.14 景点信息管理界面
同时,为了帮助用户快速的了解景点景点的情况,景点信息管理下还有景点信息留言管理,用户点击景点信息留言管理功能,就可以查看对某个景点的留言信息,帮助用户快速的了解景点的全貌,如图4.15所示:
图4.15 景点信息留言管理界面
点击旅游种类与板块管理,可以快速的查看当前系统已经支持查看的板块以及景点种类信息,帮助用户快速的了解西南地区的某些热门的旅游板块。同时也支持基于板块和种类的搜索,如下图4.16所示:
图4.16 景点信息留言管理界面
点击旅游路线管理,可以快速的查看旅游路线图,帮助用户快速的了解某个景点的路线走势,如图4.17所示:
图4.17 旅游路线管理界面
点击公告信息管理,用户可以快速查看系统的公告信息,并且进行相关信息的搜索检索,如图4.18所示:
图4.18 公告管理界面
4.3后台管理员模块实现
管理员可通过登录页面进入操作系统进行操作。如图4.19所示:
图4.19 管理员登录界面
管理员进入主页面,可对基础数据、论坛、景点信息、旅游路线、帖子、轮播图等进行管理。如图4.20所示:
图4.20 管理员主界面
管理员点击个人中,可对信息和密码进行修改。如图4.21所示:
图4.21 修改密码界面
管理员点击用户管理,可以查看、修改不正确信息或删除不合规用户信息。如图4.22所示:
图4.22 用户管理界面
管理员点击基础数据管理,可进行基础数据的管理,比如景点的类型、板块的类型、路线类型、公告类型的管理等操作。如图4.22所示:
图4.22 基础数据管理界面
管理员点击论坛管理,可进行论坛信息的管理,包括新增某一条论坛的帖子、删除不合理的论坛帖子、修改论坛帖子的内容、查看论坛帖子的所有回复等。如图4.23所示:
图4.23 论坛管理界面
管理员点击景点信息管理,可以对景点的信息进行管理,包括进行增删改查等功能。如图4.23所示:
图4.23 景点信息管理界面
管理员点击景点信息留言管理,可以管理对景点信息的留言,帮助用户正确的对景点进行了解,如图4.24所示:
图4.24 景点留言信息管理界面
管理员点击旅游种类与板块管理。可进行旅游景点板块、种类的管理。如图4.25所示:
图4.25 旅游种类与板块管理界面
管理员点击旅游路线管理,可以对旅游的路线图进行管理,快速纠正更新后的路线图,修改不正确的路线图,删除那些废弃的路线。如图4.26所示:
图4.26 旅游路线管理界面
管理员点击公告管理,可进行平台的公告管理,帮助用户更加正确的快速的了解当前西南地区的旅游景点的情况。如图4.27所示:
图4.27 公告管理界面
管理员点击推荐帖子管理,管理员可以在这里发布推荐的帖子,帮助用户快速了解一些大家都推荐的旅游景点,或者了解西南地区的知名场景。如图4.28所示:
图4.28 推荐帖子管理界面
管理员点击轮播图信息,可以修改系统的前台的轮播图信息,来快速展示那些希望用户了解到的信息。如图4.29所示:
图4.29 轮播图管理界面
5 系统测试
5.1 测试目的
进入这个环节就代表着系统已经结束了编码实现功能阶段,接下来要做的事情,就是对该系统进行检测,也就是系统测试,这个环节是很有必要进行的,原因是开发本系统的人员,其自身具备的开发技术以及开发思维是有限的,在面对具有复杂性操作逻辑的系统,都会出现大大小小的错误,并且这样的错误还都是不可避免的。通过及时的测试,可以尽早排除程序中的错误,这样也可以减少实际运行中产生的问题,从而真正避免在后期使用中为修复这些问题所付出的高昂代价。及时测试,及时发现问题并解决,也是提高开发过程的效率的一种表现形式。总而言之,在软件开发生命周期的每个阶段都需要加以重视,并做好每个阶段需要做的任务,从开始到结尾都需要保证开发软件的质量。
5.2 功能测试
通过设计一些数据检验旅游网站的功能是否根据预定进行数据输出,以此检验系统功能是否合格。接下来就选取部分功能进行检测。
5.2.1 登录功能测试
旅游网站提供的服务是给规定的用户使用的,其他无关用户是无法进入的,登录功能就是检验访问者是否是符合要求的用户,及时将不符合要求的用户拒之门外。以此保证系统安全。这里以管理员身份进行检测,测试的内容见下表。
表6.1 登录功能测试表
账号 密码 身份 结果
guanliyuan guanliyuan 管理员 提示成功,进入系统后台
user guanliyuan 管理员 提示失败,停留在登录页面
guanliyuan user 管理员 提示失败,停留在登录页面
旅游网站在面对正确的账号,不匹配的密码时,会有相应的反馈,其反馈结果见下图。
图6.1 登录错误反馈提示
5.2.2 修改密码功能测试
这个功能的设置也是出于对系统的保护,让操作人员的密码可以一直变化,减少泄露的几率。测试的数据见下表。通过验证旧密码,确认操作者是本人,然后开始对新密码进行登记。一般修改完密码后,需要再次登录。
表6.2 修改密码功能测试表
旧密码 新密码 密码修改结果
guanliyuan gly 成功
user gly 失败
guanliyuan 失败
本系统在面对登记错误的旧密码信息时,有相应的反馈提示,见下图。
图6.2 旧密码错误提示
5.2 测试结果
经过测试,从旅游网站功能的角度来看,本系统各个功能在符合用户要求的情况下,也能保持运行正常。从旅游网站性能的角度来看,本系统可以保持24小时不间断运行,而且面对用户的误操作行为,有提前设置的错误反馈机制应对,另外,本系统界面布局考虑用户阅读习惯,可以让用户短时间内获取需要的内容。总之,本系统可以投入生产,帮助用户解决实际问题,发挥其应用价值。
6 总结
该系统主要采用SpringBoot、MyBatis-plus、Vue等技术进行开发[16]。后台数据库使用MySQL数据库来实现数据管理。方式设计制作的旅游网站,在功能上可以满足管理人员对于信息的管理需求;在界面的设计上,尽最大努力用自身的美工知识做到界面美观简洁。在操作方面上,让系统可以方便操作,同时对用户常见的误操作行为进行分析总结,并尽力在系统中避免同样的由于用户的误操作所带来的错误现象。
作为毕业设计,分配给本系统的设计与制作时间还是不足的,所以,旅游网站还有许多需要完善的地方。
第一个就是本系统的编程代码问题,各个程序文件的代码存在冗余的地方非常多,导致代码不够简洁,同时对代码的注释也比较麻烦。编码期间,对于很多页面可以共享的函数与方法都没有单独列出来,而是在需要用到函数和方法的页面上都重新编写了代码,通过后期的技术学习,以及对编码过程的分析总结,发现可以把共用的函数或方法编写在同一个页面上,在之后的页面中,需要使用此函数的页面,则可以直接调用函数,无需再编写代码了,这样可以简化代码,也能节省时间和存储空间。
第二个就是对数据库的设计不够好,在数据处理中,影响程序运行速度。因此需要对数据库的性能进行优化。通过这方面知识的学习,在某个开发技术类的博客中,发现可以用数据库连接池技术来解决数据库的性能问题,另外还需规范数据库里面的关系模式,降低数据库的冗余率,提高运行速度。
如果说平时的作业也是检查对知识的掌握情况,那么制作毕业设计,将是对自身所有知识的一个全面检测。因为系统能够制作完成则是经历了很多阶段,正如文中所展示的那样,先有可行性分析,对功能的分析,对功能的设计,对数据库的设计,对程序功能的编码实现,对完成编码程序的测试等,这些环节缺一不可,而且还都需要认真对待,大学学到的所有知识在制作系统时,才会发现不够用。所以这个项目制作,在检测自身能力的同时,也对问题分析,资料搜集,问题解决等能力进行了培养。
我通过制作本系统,熟悉了程序开发的流程,提高了对程序的编码能力,培养了独立分析与解决问题的能力;但也让我明白自身的不足之处,所以在接下来的时间,我还是要加强对技术知识的学习,去逐渐完善本系统。
‘
参考文献
略
致 谢
制作毕设项目这段时间,忙碌又充实。从最开始选题的不知所措,到现在毕设项目完成时的淡然,两种完全不同的心境,也意味着我这段时间在不断成长。项目制作是一个很耗费时间与精力的任务,如果说仅仅依靠自己的话,那肯定达不到毕设的标准。所以,这一路走来,导师给予我的帮助也是非常大的。不管我处于哪个阶段,比如选题阶段,比如分析系统功能阶段,设计系统结构阶段,系统编码阶段等,都有导师参与指导,他提出的建议和技术上的指导让我可以更快地完成这个毕设项目。此刻,我非常感谢导师,感谢他提供的帮助。
毕设项目制作期间,我身边的同学也及时指出了我系统的错误,并帮助我完善已开发的系统,还提供了很多文档撰写的技巧,所以,我也非常庆幸能和他们一起努力制作项目,也非常感谢他们一直以来的陪伴。
大学短短几年,能够得到成长,也离不开授课老师们,他们一直在校园为广大学子传授知识,用他们毕生所学,教出一批批优秀的学生,我这几年的成熟与成长也得益于他们的教导。所以我也非常感谢校园的各位老师。
即将离开校园,回想这几年的时光,还真挺不舍。安安静静在校园走了一圈,发现我的大学校园真的很美,我也感谢学校给我们提供这么美好的学习环境,以及给了我上大学的机会。感谢母校!