目 录
摘 要
随着社会的快速发展和人们生活水平的提高,旅游已成为人们生活的重要组成部分。然而,在信息技术广泛应用的背景下,用户获取旅游信息的渠道越来越多,导致大量未经过滤的信息给用户带来困扰,难以找到自己真正感兴趣的内容。为了解决这个问题,个性化旅游推荐系统应运而生。
个性化旅游推荐系统通过利用Hadoop、HTML、CSS等技术实现前端页面的美观和动态效果,符合用户审美观。后台主要采用Java编程语言、MySQL数据库和Ajax异步交互等技术,解决传统旅游推荐方式中的数据分析问题,提高推荐的准确性和效率。系统实现了基本功能,包括系统用户管理、景点信息展示与分类、通知公告发布等。
本系统研究的背景、作用和意义在于提供一个能够根据用户兴趣和需求进行个性化推荐的旅游信息平台。通过对需求和技术问题的分析,验证了系统的必要性和可行性。同时介绍了所使用的技术软件和设计思想。最终,该系统能够实现旅游推荐功能,并可部署和运行供用户使用。个性化旅游推荐系统的研究对于提高用户体验、提供精准的旅游推荐和促进旅游业发展具有重要意义。通过将信息技术与旅游行业相结合,可以为用户提供更加个性化和符合其兴趣的旅游体验,同时推动旅游市场的繁荣和创新。
关键词:Java;hadoop;旅游推荐系统;MySQL
Abstract
With the rapid development of society and the improvement of people's living standards, tourism has become an important component of people's lives. However, in the context of the widespread application of information technology, there are more and more channels for users to obtain tourism information, resulting in a large amount of unfiltered information that troubles users and makes it difficult to find the content they are truly interested in. In order to solve this problem, personalized tourism recommendation systems have emerged.
The personalized travel recommendation system utilizes technologies such as Hadoop, HTML, CSS, etc. to achieve the aesthetic and dynamic effects of the front-end page, in line with user aesthetics. The backend mainly uses Java programming language, MySQL database, and Ajax asynchronous interaction technology to solve the data analysis problem in traditional tourism recommendation methods, improve the accuracy and efficiency of recommendations. The system has implemented basic functions, including user management, display and classification of scenic spot information, and publication of notices and announcements.
The background, role, and significance of this system research are to provide a tourism information platform that can provide personalized recommendations based on user interests and needs. The necessity and feasibility of the system have been verified through analysis of requirements and technical issues. At the same time, the technical software and design pycharms used were introduced. Ultimately, the system is capable of implementing travel recommendation functions and can be deployed and run for users to use. The research on personalized tourism recommendation systems is of great significance for improving user experience, providing accurate tourism recommendations, and promoting the development of the tourism industry. By combining information technology with the tourism industry, users can be provided with more personalized and interesting travel experiences, while promoting the prosperity and innovation of the tourism market.
Keywords:Java; Hadoop; Tourism recommendation system; MySQL
1 绪论
联合国世界旅游组织2014年报告显示,旅游业占到全球GDP的 9%,为各国GDP增长和社会的发展做出了巨大贡献,是世界上领先的行业之一。此外,在过去的六十年,旅游业经历了持续扩张和多元化,成为世界上最大和增长最快的经济部门。世界旅游组织预测,世界范围内的旅游业也将会持续、快速的发展,到2020年旅游者的数量将会翻两倍。国家旅游局显示,我国已连续4年成为世界第一大出境旅游消费国,对全球旅游收入贡献平均超过13%。信息化作为新技术革命的主要内容,正在并将继续对人们的生产生活和社会交往发生重大而深远的影响。但旅游业是一个高度依赖信息资源的行业,信息化将是旅游业发展为现代服务业的主要技术支撑力量,计算机技术将会在旅游行业得到应用,加速旅游业的信息化。2011年7月,国家旅游局提出了我国将争取用10年左右时间,初步实现基于信息技术的“智慧旅游”,即智慧旅游区建设、智慧交通、智慧餐饮、智慧预订等,把旅游业发展成为高信息含量、知识密集的现代服务业,智慧旅游由此兴起。智慧旅游是传统旅游方式的延伸,是智能信息化的旅游服务,以先进的计算机技术为核心,为用户提供个性化的服务,给用户带来全新的服务体验。通信技术、物联网、人工智能、大数据以及云计算等技术都被应用到了智能旅游中,将旅游业推到了一个新的高峰。
我国大部分的旅游系统在开发初期,由于缺少对旅游行业和网络运营的全而了解,未能找准切入点,使旅游系统建成之后缺乏特色与“卖点”,往往照搬照抄其它旅游系统的现成模式,成为欧美等网络业发达国家网站的中文翻版,或者是大型网站的缩影。其结果是版而设计相似,内容雷同,重复建设问题严重,既没有形成具有一定规模的经营模式,也没有达到网上促销、预订的高成功率,使整个旅游业电子商务的销售额少得可怜。旅游产品交易的安全性问题是旅游网站发展的瓶颈。是否能够确保在动态、开放的旅游网站上,安全的完成旅游产品的整个交易过程,是旅游者选择网站上购买旅游产品首要考虑的问题之一。而我国大部分旅游网站在线支付手段不健全,缺乏统一的标准体系,在线交易的安全性更是令人担忧。恶意订购、交易出错的现象屡见不鲜,所以,消费者对旅游产品的网上交易信赖度不高。还有就是在智能旅游中,景点的智能推荐是旅游服务中重要的一部分,因为旅游者主要目的是参观景点。但关于景点的智能推荐并没有一个准确统一的定义,目前主流的智能推荐系统主要是根据用户浏览的景点信息,推算出用户的兴趣所在,然后将相关的景点推荐给用户。智能推荐系统能够在用户迷茫的时候,给用户推荐出适合当前兴趣的结果,满足用户的需求。因此,推荐系统的准确性将是一个评判系统性能的关键指标,如何能够推荐出更加符合用户兴趣的景点是非常关键的。
1.2研究开发现状分析
在国外,由于信息化比较早,互联网的出现就出现了推荐系统,因此在国家旅游信息系统方面的研究也比国内早,旅游推荐系统的研究也比国内深入。国外旅游网站的发展可划分为三个阶段。
(1)萌芽阶段:IBM和美利坚航空公司于1959年开发了世界上首个计算机订位系统(SABRE) ,这是旅游电子商务发展的萌芽。
(2)发展阶段:1978-1994年这段时间订购机票、预定酒店以及租车等业务可以通过网络完成,旅游网站进一步得到推广。
(3)繁荣阶段:1995年世界旅游组织、美国国家旅游局等机构举办了世界信息技术与旅游会议,体现了计算机技术对旅游业的重要性,进一步推动了旅游网站的发展进程。
国内旅游信息化从改革开放后才开始,起步比较晚,八十年代末才有关于旅游信息系统的研究,但主要还是对旅行社的信息进行管理,这是我国将信息技术用于旅游业的开始。国内旅游网站的发展大致可以划分为三个阶段。
(1)1998-2002年为孕育阶段,随着互联网技术的兴起,旅游网站也乘着这股热流开始建立,如今中国的主流旅游网站大都是在这个时期建立的。
(2)2003-2008年属于旅游网站快速发展阶段,随着互联网的快速发展,传统旅游服务行业都加入在线旅游模式,国内网上旅游吸引了大量的用户,得到了爆发式的增长。
2008年以后,旅游网站的发展进入成熟阶段,网上旅游成为旅游业的重要组成部分,但仍在逐步发展。
在旅游信息化的初级阶段,国内旅游网站大都定位于为用户提供酒店、机票等产品的预定服务,以及旅游景点相关信息的介绍方面,并没有个性化方面的推荐服务。创立于1999年的携程网是国内建立较早的一个旅游网站,主要定位于提供全方位的产品预订,但在推荐方面却只是简单的推荐一些当前比较热门的旅游景点和旅游路线,并没有起到推荐作用。2006年创立的途牛旅游网提供个性化的旅游服务,为用户定制旅游路线等服务,但该个性化服务并不是使用推荐技术实现的,而是通过人工客服实现的。
国内推荐算法的研究不是很早,因此旅游网站的推荐系统的研发也比较晚。2005年张晗等人利用Apriori算法产生关联规则,将形成的频繁项集以个性化旅游服务商品的形式展示给用户,这是国内较早实现个性化推荐算法的研究。次年,张晗等人提出一种综合信息检索、联机分析处理和数据挖掘等多种技术的智能旅游推荐系统。2009年张晗等人提出一种改进的Apriori算法作为旅游信息的推荐算法,同时用协同滤波对旅游信息进行推荐。王先飞等人提出一种基于约束的旅游推荐系统以会话式的交互方式逐步地启发用户的偏好和需要,利用多属性效用理论对推荐结果进行排序。谢海峰将用户建模技术和推荐方法结合起来,建立基于粗糙集理论的旅游产品推荐系统,为用户提供个性化的旅游服务。
1.3论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章为引言,此章节对所设计和实现的系统的背景和意义进行详细的论述以及说明,同时进行了论文整体框架的结构的简要介绍。
第二章为系统需求分析,章节所做的主要的工作是对系统进行了技术、经济和操作方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第三章为系统的设计,主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第四章就是对系统的实现,根据系统功能的划分,分别的对系统所需要实现的前台客户功能和后台管理员功能进行了分析和说明。
第五章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
2 旅游推荐系统系统分析
系统需求分析是系统开发的一个关键环节,它在系统的设计和实现上起到了一个承上启下的位置。系统需求分析是对所需要做的系统进行一个需求的挖掘,如果分析的准确可以精准的解决现实中碰到的问题。如果分析不到位会影响后期系统的实现。一个系统的优秀程度需求分析也是占据了非常大的比例,如果需求分析不到位,后面的系统设计要实现就是一个偏离导航的设计。
2.1 可行性分析
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。
2.1.1 技术可行性分析
旅游推荐系统存储所使用的mysql数据库以及开发中所使用的pycharm、Tomcat这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用hadoop框架进行开发,使系统的可扩展性和维护性更佳,减少java配置代码,简化编程代码,目前hadoop框架也是很多企业选择的框架之一。
2.1.2 经济可行性分析
从经济可行性上看项目在开发阶段需要一台开发PC,在生产阶段需要web服务器和数据库服务器。一台个人PC从经济上来看也不是太多问题,在后期的系统部署生产上来说,服务器的投入也不会过高,在经济层面上是一个比较可行的。
系统从法律层面上来没有对第三方有其他放有法律层面的问题,系统数据库采用的Mysql 开源社区数据库、框架采用的是开源的hadoop。系统资讯和相关内容也是法律层面的。在源码的管理上采用git开源进行管理,所以在法律可行性上是成立的。
2.2 系统功能分析
旅游推荐系统我划分为了普通用户管理模块和管理员模块这两大部分。
普通用户管理模块:
(1)查看旅游推荐系统的首页信息:旅游推荐系统的首页信息包含了首页、旅游资讯、通知公告、景点信息等。
(2)旅游资讯:用户点击“旅游资讯”菜单显示所有的旅游资讯信息,可以按照条件进行旅游资讯的筛选或者输入关键词进行局部搜索,点击可以进入旅游资讯详细展示界面,在此界面用户可以收藏、点赞和评论。
(3)通知公告:用户点击“通知公告”菜单显示管理员在后台发布的所有的通知公告信息,可以查看通知公告详情。
(4)景点信息:用户点击“景点信息”菜单可以查看所有景点信息,可以按照条件查看景点信息,或者输入关键词进行查询,点击可以进入景点信息详细展示界面,在此界面用户可以收藏、点赞和评论。
(5)我的账户:用户点击“我的账户”可以对个人资料以及密码进行更新。
(6)我的收藏:用户点击“我的收藏”,会显示出自己收藏的所有信息,点击某一条收藏可以查看信息详细介绍,同时删除收藏;
管理员管理模块:
(1)系统用户:管理员可以对旅游推荐系统中的管理员以及前台注册的用户进行审核管理。
(2)景点信息:管理员点击“景点信息列表”会显示出所有的景点信息,支持输入景点名称或者景点分类对景点信息进行查询,如果想要添加新的景点信息,点击“景点信息添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条景点信息,点击“删除”进行删除,也可以对用户提交的景点信息评论的信息进行管控;
(3)轮播图:管理员点击“轮播图”菜单可以对首页展示的轮播图进行增删改查。
(4)通知公告:管理员点击“通知公告”菜单可以查看到系统中的所有通知公告信息,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。
(5)资源管理:管理员点击“资源管理”菜单能够对其下子菜单旅游资讯和新闻的分类进行增删改查。
2.2.2 非功能性分析
旅游推荐系统的非功能性需求比如旅游推荐系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1旅游推荐系统非功能需求表
| 安全性 | 主要指旅游推荐系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
| 可靠性 | 可靠性是指旅游推荐系统能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。 |
| 性能 | 性能是影响旅游推荐系统占据市场的必要条件,所以性能最好要佳才好。 |
| 可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
| 易用性 | 用户只要跟着旅游推荐系统的页面展示内容进行操作,就可以了。 |
| 可维护性 | 旅游推荐系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
旅游推荐系统的完整UML用例图分别是图2-1和图2-2。
图2-1就是管理员角色的用例展示。

图2-1 旅游推荐系统管理员角色用例图
图2-2就是普通用户角色的用例展示。

图2-2 旅游推荐系统普通用户角色用例图
2.4本章小结
本章主要通过对旅游推荐系统的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个旅游推荐系统要实现的功能。同时也为旅游推荐系统的代码实现和测试提供了标准。
3 旅游推荐系统总体设计
本章主要讨论的内容包括旅游推荐系统的功能模块设计、数据库系统设计。
3.1 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本旅游推荐系统中的用例。那么接下来就要开始对本旅游推荐系统的架构、主要功能和数据库开始进行设计。旅游推荐系统根据前面章节的需求分析得出,其总体设计模块图如图3-1所示。
图3-1 旅游推荐系统功能模块图
3.1.2用户模块设计
本系统的用户包括管理员和用户两种用户模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,用户模块结构图为例进行分析,如下图:

图3-2用户模块结构图
3.1.3 评论管理模块设计
旅游推荐系统是一个交流性质的公开平台,用户在平台上提交评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的评论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:

图3-3评论管理模块结构图
3.1.4旅游资讯管理模块设计
旅游推荐系统为用户提供了一个旅游资讯查询的平台,管理员在后台实现对旅游资讯的管理,具体的结构图如下:

图3-3旅游资讯管理模块结构图
3.2 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.2.1 数据库概念结构设计
下面是整个旅游推荐系统中主要的数据库表总E-R实体关系图。
图3-6 旅游推荐系统总E-R关系图
通过上一小节中旅游推荐系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表access_token (登陆访问时长)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
| 2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
| 3 | info | text | 65535 | 0 | Y | N | ||
| 4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表article (文章:用于内容管理系统的文章)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
| 2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
| 3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
| 4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
| 5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
| 9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
| 10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
| 11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
| 12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
| 13 | description | text | 65535 | 0 | Y | N | 文章描述 |
表article_type (文章分类)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
| 3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
| 4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
| 5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
| 6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
| 7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表attraction_information (景点信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | attraction_information_id | int | 10 | 0 | N | Y | 景点信息ID | |
| 2 | attraction_name | varchar | 64 | 0 | Y | N | 景点名称 | |
| 3 | classification_of_tourist_attractions | varchar | 64 | 0 | Y | N | 景点分类 | |
| 4 | scenic_spot_pictures | varchar | 255 | 0 | Y | N | 景点图片 | |
| 5 | location_of_tourist_attractions | varchar | 64 | 0 | Y | N | 景点位置 | |
| 6 | attraction_tickets | int | 10 | 0 | Y | N | 0 | 景点门票 |
| 7 | introduction_to_scenic_spots | text | 65535 | 0 | Y | N | 景点介绍 | |
| 8 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 9 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 10 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
| 11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表auth (用户权限管理)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
| 2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
| 3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
| 4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
| 5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
| 6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
| 7 | position | varchar | 32 | 0 | Y | N | 位置: | |
| 8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
| 9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
| 10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
| 11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
| 12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
| 13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
| 14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
| 15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
| 16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
| 17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
| 18 | option | text | 65535 | 0 | Y | N | 配置: | |
| 19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表classification_of_tourist_attractions (景点分类)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | classification_of_tourist_attractions_id | int | 10 | 0 | N | Y | 景点分类ID | |
| 2 | classification_of_tourist_attractions | varchar | 64 | 0 | Y | N | 景点分类 | |
| 3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表collect (收藏)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
| 3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 6 | title | varchar | 255 | 0 | Y | N | 标题: | |
| 7 | img | varchar | 255 | 0 | Y | N | 封面: | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表comment (评论)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
| 3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
| 4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
| 5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
| 6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表hits (用户点击)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表notice (公告)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表praise (点赞)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
表regular_users (普通用户)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
| 2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
| 4 | contact_information | varchar | 64 | 0 | Y | N | 联系方式 | |
| 5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
| 6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
| 7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表slides (轮播图)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
| 2 | title | varchar | 64 | 0 | Y | N | 标题: | |
| 3 | content | varchar | 255 | 0 | Y | N | 内容: | |
| 4 | url | varchar | 255 | 0 | Y | N | 链接: | |
| 5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
| 6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表upload (文件上传)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
| 2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
| 3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
| 4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
| 5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
| 6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
| 7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
| 8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
表user (用户账户:用于保存用户登录信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
| 2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
| 4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
| 5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
| 6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
| 8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
| 9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
| 10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
| 11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
| 14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
| 16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
| 3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
| 4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
| 9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
3.4本章小结
整个旅游推荐系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 旅游推荐系统详细设计与实现
旅游推荐系统的详细设计与实现主要是根据前面的旅游推荐系统的需求分析和旅游推荐系统的总体设计来设计页面并实现业务逻辑。主要从旅游推荐系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入旅游推荐系统的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是公告信息,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
旅游推荐系统的用户可以进行注册登录,当用户左上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号,选择身份,然后填写身份信息后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可注册成功。其用注册界面展示如下图4-2所示。
图4-2注册界面图
4.1.3用户登录界面
旅游推荐系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到旅游推荐系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
4.1.4通知公告界面
用户点击“通知公告”菜单显示管理员在后台发布的所有的通知公告信息,可以查看通知公告详情,通知公告界面如下图4-4所示。
图4-4通知公告界面图
4.1.5旅游资讯详情界面
用户点击“旅游资讯”菜单显示所有的旅游资讯信息,可以按照条件进行旅游资讯的筛选或者输入关键词进行局部搜索,点击可以进入旅游资讯详细展示界面,在此界面用户可以收藏、点赞和评论,景点信息详情展示页面如图4-5所示。
图4-5旅游资讯详情界面图
4.1.6景点信息详情界面
用户点击“景点信息”菜单可以查看所有景点信息,可以按照条件查看景点信息,或者输入关键词进行查询,点击可以进入景点信息详细展示界面,在此界面用户可以收藏、点赞、评论。景点信息详情界面如下图4-6所示。
图4-6景点信息详情界面图
4.1.7我的账户界面
当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料、登录系统的密码进行设置管理,我的账户界面如下图4-7所示。
图4-7 我的账户界面图
4.2管理员功能模块
4.2.1用户管理界面
管理员点击“用户管理”这一菜单会显示管理员和普通用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。界面如下图4-8所示。
图4-8用户管理界面图
4.2.2 景点分类管理界面
点击“景点分类”按钮会显示自己添加的景点分类,如果想要添加新的景点分类,点击“添加”按钮根据提示输入景点分类,点击“提交”后在景点分类界面就可以显示了,如果信息有错可以对景点分类进行更新维护,也可以直接删除某一景点分类,界面如下图4-9所示。
图4-9景点分类管理界面图
点击“景点信息”按钮会显示自己添加的景点信息,如果想要添加新的景点信息,点击“添加”按钮根据提示输入景点信息,点击“提交”后在景点信息界面就可以显示了,如果信息有错可以对景点信息进行更新维护,也可以直接删除某一景点信息,也可以对用户提交的景点信息评论的信息进行管控。界面如下图4-10所示。
图4-10景点信息管理界面图
管理员点击“通知公告管理”菜单可以查看到系统中的所有通知公告信息,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。界面如下图4-11所示。
图4-11通知公告管理界面图
资源管理主要管理员是对旅游资讯以及资讯所属的分类进行管控,包含了用户对旅游资讯提交的评论信息,界面如下图4-12所示。
图4-12资源管理界面图
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、旅游资讯展示功能测试、景点信息添加、景点信息搜索、密码修改、景点信息功能测试,如表5-1、5-2、5-3、5-4、5-5、5-6所示:
表5-1 用户登录功能测试表
| 用例名称 | 用户登录系统 |
| 目的 | 测试用户通过正确的用户名和密码可否登录功能 |
| 前提 | 未登录的情况下 |
| 测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
| 预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
| 实际结果 | 实际结果与预期结果一致 |
旅游资讯查看功能测试:
表5-2 旅游资讯查看功能测试表
| 用例名称 | 旅游资讯查看 |
| 目的 | 测试旅游资讯查看功能 |
| 前提 | 用户登录 |
| 测试流程 | 点击旅游资讯列表 |
| 预期结果 | 可以查看到所有旅游资讯信息 |
| 实际结果 | 实际结果与预期结果一致 |
管理员添加景点信息管理界面测试:
表5-3 管理员添加景点信息管理界面测试表
| 用例名称 | 添加景点信息测试用例 |
| 目的 | 测试景点信息添加功能 |
| 前提 | 管理员用户正常登录情况下 |
| 测试流程 | 1)管理员点击景点信息,然后点击添加后并填写信息。 2)点击进行提交。 |
| 预期结果 | 提交以后,页面首页会显示新的景点信息 |
| 实际结果 | 实际结果与预期结果一致 |
景点信息搜索功能测试:
表5-4景点信息搜索功能测试表
| 用例名称 | 景点信息搜索测试 |
| 目的 | 测试景点信息搜索功能 |
| 前提 | 无 |
| 测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
| 预期结果 | 页面显示包含有搜索关键字的景点信息 |
| 实际结果 | 实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
| 用例名称 | 密码修改测试用例 |
| 目的 | 测试管理员密码修改功能 |
| 前提 | 管理员用户正常登录情况下 |
| 测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
| 预期结果 | 使用新的密码可以登录 |
| 实际结果 | 实际结果与预期结果一致 |
景点信息功能测试:
表5-6景点信息功能测试表
| 用例名称 | 景点信息测试用例 |
| 目的 | 测试用户景点信息功能 |
| 前提 | 用户正常登录情况下 |
| 测试流程 | 1)搜索查看景点信息,点击景点信息。 2)填写景点信息,点击进行提交。 |
| 预期结果 | 景点信息成功 |
| 实际结果 | 实际结果与预期结果一致 |
5.2 系统测试结果
通过编写旅游推荐系统的测试用例,已经检测完毕用户登录模块、旅游资讯展示模块、景点信息添加模块、景点信息搜索模块、密码修改模块、景点信息模块功能测试,通过这6大模块为旅游推荐系统的后期推广运营提供了强力的技术支撑。
结论
本文介绍了一个旅游推荐系统的设计与实现过程。该系统使用了hadoop框架作为后台开发工具,Tomcat服务器作为中间件,Mysql作为数据库管理平台,前端采用了JQuery框架,并结合Validate校验框架来减少前端代码的输入量。
在开始开发之前,我们进行了大量的准备工作。通过阅读和学习相关文献资料,我们获得了许多宝贵的方法和设计思路,对系统的开发起到了重要的作用。在技术选型方面,我们选择了自己比较熟悉的Web、hadoop和MYSQL等技术。这些技术都是在之前的学习中积累的经验。虽然开发工作量较大,但正是由于之前的积累和准备,我们才能够顺利地完成这个项目。因此,经验的积累和充分的准备是非常重要的。
当然,在系统的设计与实现过程中,我们也离不开老师和同学们的帮助。正是由于他们的指导和帮助,我们才能够按时完成这个系统。在这个过程中,我们也收获了很多,并意识到系统还有改进的空间。由于专业知识的限制,我们无法做到完美,希望将来有机会能够真正投入使用并不断改进。
参考文献
[1]Yuan Y ,Zheng W . Your trip, your way: An adaptive tourism recommendation system [J]. Applied Soft Computing, 2024, 154 111330-.
[2]苏甜,罗梓铭,荣幸. 浅析旅游推荐系统的数智化发展——以图片预设情感为例 [J]. 产业创新研究, 2023, (24): 99-101.
[3]Yang S ,Yingwei H . Toward an intelligent tourism recommendation system based on artificial intelligence and IoT using Apriori algorithm [J]. Soft Computing, 2023, 27 (24): 19159-19177.
[4]请求不公布姓名. 一种基于JAVA语言的Excel表格导入方法和系统[P]. 四川省: CN116757170B, 2023-10-20.
[5]Liang C . School Vehicle Management System Based on JAVA Language [J]. Academic Journal of Computing & Information Science, 2023, 6 (9):
[6]王茸,李强,何颖等. 个性化旅游推荐系统的设计与实现 [J]. 福建电脑, 2023, 39 (09): 95-99.
[7]刘洋. 基于大数据旅游推荐系统及方法[P]. 江苏省: CN116561415A, 2023-08-08.
[8]姜发健,王金凤,招奕钧. 一种面向图自监督学习的旅游推荐系统[P]. 广东省: CN116108279A, 2023-05-12.
[9]杨佳鹏,俎毓伟,纪佳琪等. 基于Spark框架的瀑布型融合旅游推荐系统 [J]. 智能计算机与应用, 2023, 13 (04): 142-146.
[10]花维. 基于Hadoop框架与用户行为特征感知的智能图书推荐系统设计 [J]. 电子设计工程, 2022, 30 (24): 24-27+32.
[11]李志敏. 基于数字文化旅游系统的推荐算法研究[D]. 青海师范大学, 2022.
[12]张艳琴,张占领,郭怀宫. 基于Hadoop框架的镁合金航空零件压铸模快速设计 [J]. 铸造, 2021, 70 (06): 664-669.
[13]Liu S . Explore Java Language and Android Mobile Software Development [J]. International Journal of Frontiers in Engineering Technology, 2021, 3.0 (2.0):
[14]史睿瑶. 基于改进协同过滤算法的旅游推荐系统设计与实现[D]. 河北工程大学, 2020.
[15]Kline K . The Java Language Extension for SQL Server Is Now Open Source [J]. Database Trends and Applications, 2020, 34 (4): 31-31.
[16]YOU X ,XIONG C ,ZHANG P . Brief Discuss the Application of Object-oriented in Java Language Programming Course[C]// Advanced Science and Industry Research Center. Proceedings of 2018 3rd International Conference on Automation, Mechanical and Electrical Engineering (AMEE 2018). Computer Science of ZHIXING College of Hubei University;Electronics and Information Engineering of Huazhong University of Science and Technology;, 2019: 5.
[17]张玉婷. 基于Java语言和MySQL数据库的固体废弃物数据管理系统的创建[D]. 内蒙古师范大学, 2019.
致 谢
眨眼之间,大学生活就要结束了。在本文的最后,我要感谢我和蔼可亲的导师、团结有爱的同学的帮助和鼓励。此刻,我找不到感谢之词可以用来表达我最深切的感激之情。尤其感谢我的指导老师,在选题的过程中与我进行了深入的交流,在毕业设计期间给我提供了一些指导。四年的学习生活让我受益良多,老师们的丰富的学术知识、认真负责的学习态度让我受益匪浅。在此,我深深地感谢那些曾经给予我帮助和指导的老师!
我们的论文得益于许多学者的贡献,他们的研究成果为我们提供了宝贵的指导,使我们能够更好地完成这篇文章。感谢我的同学和朋友在我的写作以及排版过程中给予热情的帮助,才使得我比较顺利的完成了这篇论文。
感谢大学里遇见的朋友,你们在我这四年里留下无数的温暖和快乐,让我对这个校园多了一份留念。最后,感谢我的父母、辅导员、班长,以及室友们对我大学生活上的关心和理解,让我能保持乐观和追求我所热爱的。尽管我的能力有限,但我仍然尽力去完善这篇论文,并且诚挚地希望各位老师和学友能够给予宝贵的指导与意见!
请关注点赞+私信博主,免费领取项目源码
725

被折叠的 条评论
为什么被折叠?



