爬虫-基于大数据环境下智能旅游个性化推荐算法的研究与设计---附源码70330
此智能旅游个性化推荐采用了Django框架进行开发,采用Python语言,使用了MySQL这一数据库,主要实现用户对酒店信息的查询、景点信息、旅行社的管理以及管理员管理的功能。
摘 要
本文旨在探讨智能旅游个性化推荐的潜力和优势。首先,智能技术可以根据用户的兴趣、偏好和历史数据,快速准确地筛选出最适合的旅游目的地和活动。其次,智能旅游个性化推荐可以提供实时的旅游信息,包括酒店信息、景点信息等,帮助用户做出更好的决策。此外,智能技术还可以提供个性化的行程规划和路线推荐,节省用户的时间和精力。综上所述,智能旅游个性化推荐具有巨大的潜力,将为用户提供更便捷、高效和满意的旅行体验。
此智能旅游个性化推荐采用了Django框架进行开发,采用Python语言,使用了MySQL这一数据库,主要实现用户对酒店信息的查询、景点信息、旅行社的管理以及管理员管理的功能。
关键词:Django;Python语言;智能旅游个性化推荐 ;MySQL
Abstract
This article aims to explore the potential and advantages of personalized recommendations for intelligent tourism. Firstly, intelligent technology can quickly and accurately filter out the most suitable tourist destinations and activities based on user interests, preferences, and historical data. Secondly, personalized recommendations for intelligent tourism can provide real-time travel information, including hotel information, scenic spot information, etc., helping users make better decisions. In addition, intelligent technology can also provide personalized itinerary planning and route recommendations, saving users time and energy. In summary, personalized recommendations for intelligent tourism have enormous potential, providing users with a more convenient, efficient, and satisfactory travel experience.
This intelligent personalized tourism recommendation is developed using the Django framework, Python language, and MySQL database. It mainly realizes the functions of users querying hotel information, managing scenic spots, travel agencies, and administrators.
Key words :Django; Python language; Personalized recommendations for intelligent tourism; MySQL
目 录
1 绪论
1.1 研究背景
旅游行业是全球经济中增长最快的部门之一,越来越多的人选择旅游作为休闲和娱乐方式。然而,面对日益增长的旅游目的地选择和信息过载,用户往往感到困惑和不确定,难以找到适合自己的旅游目的地。
在传统的旅游推荐系统中,通常只基于用户的地理位置或简单的偏好进行推荐。这种通用化的推荐方法无法满足用户个性化需求,导致推荐结果缺乏准确性和满意度。
因此,研究人员开始关注智能旅游个性化推荐的问题。借助大数据技术,可以从海量的旅游数据中提取用户兴趣和旅游目的地特征,构建个性化的推荐模型,为用户提供精准的旅游推荐。
此外,智能旅游个性化推荐也有助于推动旅游行业的发展和创新。通过深入了解用户需求和喜好,旅游从业者可以根据推荐结果优化产品和服务,提高用户满意度,并在市场竞争中取得优势。
因此,智能旅游个性化推荐的研究具有重要的背景意义。通过利用大数据和智能算法,为用户提供个性化、精准的旅游推荐,可以提升用户体验、促进旅游行业的发展,并满足人们对旅游多样化和个性化需求的追求。
1.2研究意义
“互联网+”旅游应用范围的逐渐扩大,海量数据信息一方面给我们的生活带来了极大的便利,同时信息过载也给我们的生活带来了一定的困扰。故只有研发出针对性更强、精确性更高的推荐系统,才能更好的满足用户的偏好,保持数据旅游的可持续发展。从理论上看,基于用户偏好的各项旅游推荐研究是数据挖掘这一大方向的理论提升。通过对该问题的研究,能够进一步完善文本挖掘与文本关联技术,验证数据挖掘理论在文本信息挖掘中的可行性与实用性。从现实上看,算法的研究将助力商家在智能推荐方面的发展进步,为用户提供更恰到好处的旅行服务。个性化推荐系统一方面通过大数据分析避免了人工繁杂的计算,可以提高工作效率;另一方面可以帮助游客避免繁杂信息的打扰,改善旅游体验,增加出行机会甚至拉动全国乃至世界经济发展。
因此,智能时代正急需更规范、更高效、更便捷的现代旅游指导,而基于用户偏好的个性化旅游推荐的研究是一个十分重要的研究课题。当推荐结果对用户旅行起到决定性作用时,就会给景区带来更多的游客、更广的旅游区域与更全面的发展策略,从而使地区经济发展更平衡、景点宣传更全面,甚至推动整个旅游业更上一层楼。
2 智能旅游个性化推荐系统分析
2.1 可行性分析
可行性分析是系统分析的第一步,通过可行性分析我们可以得出系统是不是值得开发,如果系统的开发是不可信的,那么就没有必要再进行下面的操作,对于本智能旅游个性化推荐,在可行性方面进行了技术、经济以及操作的分析。
2.1.1 技术可行性分析
智能旅游个性化推荐设计与实现是一个基于Web的交易、管理平台,我们在实现这个系统所采用的技术方案是基于Python语言,Django框架,MYSQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到Python和MYSQL,在技术上实现自己的自主开发是可行的。
2.1.2 经济可行性分析
开发智能旅游个性化推荐并不需要投入太多,开发工具、服务器、数据库等,都可以通过网络搜索、下载、安装,只需要一台普通的计算机就可以完成操作,而且在系统功能规划上通过走访调查目前用户对智能旅游个性化推荐的需求,了解它们对系统具体实现的功能需求,然后进行设计开发,不存在任何开销,因此系统的开发在经济方面是可行的。
2.1.3 操作可行性分析
操作方面主要考虑的是用户在使用以及管理人员在管理的时候,是否简单可行,没有任何计算机基础的用户能否使用,开发的智能旅游个性化推荐在设计的时候秉承简单易学的理念,在用户进入系统后都会有固定的导航按钮,只要认字就可以操作完成,而且管理员在管理方面也只需简单的增删改查即可完成,因此在操作上也是可行的。
2.2 系统性能分析
系统的性能方面主要是从系统的安全性、存储性、可靠性、易学性、稳定性等方面进行分析:
(1)安全性:智能旅游个性化推荐系统需要确保用户数据的安全性和隐私保护。合理的安全措施和加密技术应用可以防止用户数据被恶意访问或泄露。
(2)储存性:智能旅游个性化推荐系统需要处理大量的用户和旅游数据,因此具备高效的数据储存和管理能力是必要的。合适的数据库选择和优化策略可以提高系统的储存性能。
(3)可靠性:智能旅游个性化推荐系统应当具备高可靠性,即在面对异常情况或故障时仍能保持正常运行。采取容错机制和备份策略可以提高系统的可靠性,避免数据丢失或服务中断。
(4)易学性:智能旅游个性化推荐系统应具备良好的易学性,使得用户可以轻松上手并熟悉系统的操作和功能。直观的界面设计、清晰的指导说明和友好的用户体验都是提高系统易学性的关键因素。
(5)稳定性:智能旅游个性化推荐系统需要保持稳定的运行状态,避免系统崩溃或频繁故障。合理的系统架构设计、错误处理和监控机制可以提高系统的稳定性,减少中断和异常情况的发生。
(6)可拓展性:随着用户数量和数据量的增长,智能旅游个性化推荐系统需要具备良好的可拓展性,即可以根据需求进行横向或纵向扩展。采用分布式架构和弹性计算等技术可以提高系统的可拓展性,应对不断增长的用户和数据规模。
2.3 系统功能分析
智能旅游个性化推荐中采用了Python的Django框架进行开发,在数据库上选择MYSQL,在功能上智能旅游个性化推荐我划分为了普通用户管理模块和管理员模块这两大部分。
用户管理模块:
(1)用户注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现酒店信息的收藏评论等,就必须有这个系统的账号,如果没有账号的话,可以注册成会员用户进行相关的操作,同时用户还可以对个人信息以及操作的信息进行管控。
(2)查看智能旅游个性化推荐的首页信息:智能旅游个性化推荐的首页信息包含了首页、公告消息、旅游资讯、景点信息、酒店信息、旅行社。
(3)公告消息:用户点击“公告消息”菜单显示管理员在后台发布的所有的公告消息信息,可以查看公告消息详情。
(4)旅游资讯:用户点击“旅游资讯”菜单显示所有的旅游资讯信息,可以按照条件进行旅游资讯的筛选或者输入关键词进行局部搜索,点击可以进入旅游资讯详细展示界面,在此界面用户可以收藏、点赞和评论。
(5)景点信息:用户点击“景点信息”菜单可以查看所有景点信息,可以按照条件查看景点信息,或者输入关键词进行查询,点击可以进入景点信息详细展示界面,在此界面用户可以收藏、点赞和评论。
(6)酒店信息:用户点击“酒店信息”菜单可以查看所有酒店信息,可以按照条件查看酒店信息,或者输入关键词进行查询,点击可以进入酒店信息详细展示界面,在此界面用户可以收藏、点赞和评论。
(7)我的账户:用户点击“我的账户”可以对个人资料以及密码进行更新。
管理员管理模块:
(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。
(2)系统管理:管理员点击“系统管理”菜单可以对首页展示的轮播图进行增删改查。
(3)公告消息:管理员点击“公告消息”菜单可以查看到系统中的所有公告消息信息,对已经存在的公告消息,管理员可以修改,也可以添加新的公告消息或者删除公告消息。
(4)资源管理:管理员点击“资源管理”菜单能够对其下子菜单旅游资讯和旅游资讯的分类进行增删改查。
(5)系统用户:管理员点击“系统用户”菜单可以对系统中存在的用户进行管理,包含了管理员用户和普通用户。
(6)景点数据:管理员点击“景点数据”菜单可以对景点数据进行增删改查。
(7)景点信息:管理员点击“景点信息”菜单可以对景点信息进行增删改查。
(8)酒店信息:管理员点击“酒店信息”菜单可以对酒店信息进行增删改查。
(9)旅行社:管理员点击“旅行社”菜单可以对旅行社进行增删改查。
2.4 系统用例分析
系统的用例展示的是系统功能与用户之间的关系,通过用例的方式能够直观的展示出来,本智能旅游个性化推荐的完整UML用例图分别是图2-1、图2-2。
图2-1 智能旅游个性化推荐前台用户角色用例图
3 智能旅游个性化推荐总体设计
本章主要讨论的内容包括智能旅游个性化推荐的功能模块设计、数据库系统设计。
3.1 系统功能模块设计
3.1.1整体功能模块设计
本智能旅游个性化推荐是一个集信息查询、发布、管理为一体的平台,在功能上实现了前台和后台两部分的功能,根据第三章的系统功能分析,得出本智能旅游个性化推荐的功能模块图,如图3-1所示。

图3-1 智能旅游个性化推荐功能模块图
3.1.2用户管理模块设计
本智能旅游个性化推荐是一个通过浏览器自主查询的平台,用户想要参与进来,必须有账号和密码,登录后方可交流,管理员则实现对用户的管控,如下图:
图3-2用户管理模块结构图
3.1.3旅游资讯模块设计
智能旅游个性化推荐为用户提供了一个旅游资讯查询的平台,管理员在后台实现对旅游资讯的管理,具体的结构图如下:
图3-3旅游资讯管理模块结构图
3.1.4景点信息模块设计
智能旅游个性化推荐是中需要存储不少景点信息,其模块功能结构,具体的结构图如下:
图3-4景点信息模块结构图
3.2 数据库设计
3.2.1 数据库概念结构设计
在数据库概念模型设计的时候,一般都采用E-R实体图进行展示,在实体图中可以展示出数据库表中的所有字段名称,本智能旅游个性化推荐中的主要的数据库E-R模型图如下图所示。
图3-5普通用户E-R关系图
图3-6 酒店信息E-R关系图
图3-7 评论信息E-R关系图
图3-8 景点信息E-R关系图
图3-9 景点数据信息E-R关系图
下面是整个智能旅游个性化推荐中主要的数据库表总E-R实体关系图。
图3-10 旅游信息系统总E-R关系图
3.2.2 数据库逻辑结构设计
通过上一小节中智能旅游个性化推荐中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表attraction_data (景点数据)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
attraction_data_id |
int |
10 |
0 |
N |
Y |
景点数据ID |
|
2 |
tourist_attraction_star_rating |
varchar |
64 |
0 |
Y |
N |
景点星级 |
|
3 |
scenic_spot_rating |
varchar |
64 |
0 |
Y |
N |
景点评分 |
|
4 |
attraction_name |
varchar |
64 |
0 |
Y |
N |
景点名称 |
|
5 |
attraction_address |
varchar |
64 |
0 |
Y |
N |
景点地址 |
|
6 |
attraction_prices |
varchar |
64 |
0 |
Y |
N |
景点价格 |
|
7 |
selling_quantity |
varchar |
64 |
0 |
Y |
N |
卖出数量 |
|
8 |
introduction_to_scenic_spots |
text |
65535 |
0 |
Y |
N |
景点简介 |
|
9 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
10 |
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 |
types_of_attractions |
varchar |
64 |
0 |
Y |
N |
景点类型 |
|
4 |
attraction_cities |
varchar |
64 |
0 |
Y |
N |
景点城市 |
|
5 |
attraction_address |
varchar |
64 |
0 |
Y |
N |
景点地址 |
|
6 |
admission_price |
int |
10 |
0 |
Y |
N |
0 |
门票价格 |
7 |
opening_hours |
varchar |
64 |
0 |
Y |
N |
开放时间 |
|
8 |
ticket_purchase_notice |
text |
65535 |
0 |
Y |
N |
购票须知 |
|
9 |
cover_photo |
varchar |
255 |
0 |
Y |
N |
封面图片 |
|
10 |
introduction_to_scenic_spots |
longtext |
2147483647 |
0 |
Y |
N |
景点简介 |
|
11 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
点赞数 |
12 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
13 |
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: |
表hotel_information (酒店信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
hotel_information_id |
int |
10 |
0 |
N |
Y |
酒店信息ID |
|
2 |
hotel_name |
varchar |
64 |
0 |
Y |
N |
酒店名称 |
|
3 |
hotel_type |
varchar |
64 |
0 |
Y |
N |
酒店类型 |
|
4 |
hotel_address |
varchar |
64 |
0 |
Y |
N |
酒店地址 |
|
5 |
hotline_number |
varchar |
64 |
0 |
Y |
N |
热线电话 |
|
6 |
per_capita_price |
int |
10 |
0 |
Y |
N |
0 |
人均价格 |
7 |
hotel_pictures |
varchar |
255 |
0 |
Y |
N |
酒店图片 |
|
8 |
hotel_introduction |
longtext |
2147483647 |
0 |
Y |
N |
酒店简介 |
|
9 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
点赞数 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表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 |
user_age |
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 |
更新时间: |
表travel_agency (旅行社)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
travel_agency_id |
int |
10 |
0 |
N |
Y |
旅行社ID |
|
2 |
travel_name |
varchar |
64 |
0 |
Y |
N |
旅行名称 |
|
3 |
travel_type |
varchar |
64 |
0 |
Y |
N |
旅行类型 |
|
4 |
travel_duration |
varchar |
64 |
0 |
Y |
N |
旅行时长 |
|
5 |
travel_location |
varchar |
64 |
0 |
Y |
N |
旅行地点 |
|
6 |
per_capita_price |
int |
10 |
0 |
Y |
N |
0 |
人均价格 |
7 |
cover_photo |
varchar |
255 |
0 |
Y |
N |
封面图片 |
|
8 |
travel_introduction |
longtext |
2147483647 |
0 |
Y |
N |
旅行简介 |
|
9 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
点赞数 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表types_of_attractions (景点类型)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
types_of_attractions_id |
int |
10 |
0 |
N |
Y |
景点类型ID |
|
2 |
types_of_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 |
更新时间 |
4 智能旅游个性化推荐详细设计与实现
4.1用户功能模块
4.1.1 前台首页界面
当进入智能旅游个性化推荐的时候,可以看到系统中的导航栏,搜索框,轮播图等信息,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现酒店信息、收藏、评论等,就必须有这个系统的账号,如果没有账号的话,可以注册成用户进行相关的操作。其用用户注册界面展示如下图4-2所示。
图4-2 前台用户注册界面图
注册代码如下:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
4.1.3 用户登录界面
当用户注册完成后就可以登录了,输入用户名+密码,通过滑动图片验证后,点击“登录”按钮进行登录,登录界面如下图4-3所示。
图4-3用户登录界面图
登录代码如下:
def Login(self, ctx):
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
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.1.8酒店信息详情界面
用户点击“酒店信息”菜单可以查看所有酒店信息,可以按照条件查看酒店信息,或者输入关键词进行查询,点击可以进入酒店信息详细展示界面,在此界面用户可以收藏、点赞和评论。其界面如下图4-8所示。
图4-8酒店信息详情界面图
4.1.9旅行社详情界面
用户点击“旅行社”菜单可以查看所有旅行社,可以按照条件查看旅行社,或者输入关键词进行查询,点击可以进入旅行社详细展示界面,在此界面用户可以收藏、点赞和评论。界面如下图4-9所示。
图4-9 旅行社详情界面图
4.2管理员功能模块
4.2.1公告消息管理界面
管理员点击“公告消息管理”菜单可以查看到系统中的所有公告消息信息,对已经存在的公告消息,管理员可以修改,也可以添加新的公告消息或者删除公告消息。界面如下图4-10所示。
图4-10 公告消息管理界面图
公告消息管理关键代码如下:
def Del(self, ctx):
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
4.2.2 资源管理界面
管理员点击“资源管理”菜单能够对其下子菜单旅游资讯和旅游资讯的分类进行增删改查。界面如下图4-11所示。
图4-11资源管理界面图
资源管理关键代码如下:
def Set(self, ctx):
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
result = self.service.Set(ctx.query, ctx.body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
4.2.3 系统用户管理界面
管理员点击“系统用户”菜单可以对系统中存在的用户进行管理,包含了管理员用户和普通用户。界面如下图4-12所示。
图4-12系统用户管理界面图
用户管理关键代码如下:
def Add(self, ctx):
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
result = self.service.Add(body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
4.2.4景点数据管理界面
点击“景点数据”按钮会显示自己发布的所有的景点数据信息,如果想要添加新的景点数据,点击“添加”按钮根据提示输入景点数据信息,点击“提交”后在景点数据界面就可以显示了,如果信息有错,点击“编辑”按钮可以对景点数据信息进行更新维护,也可以直接删除某一景点数据。界面如下图4-13所示。
图4-13景点数据管理界面图
4.2.5 景点信息管理界面
点击“景点信息”按钮会显示自己发布的所有的景点信息,如果想要添加新的景点信息,点击“添加”按钮根据提示输入景点信息,点击“提交”后在景点信息界面就可以显示了,如果信息有错,点击“编辑”按钮可以对景点信息进行更新维护,也可以直接删除某一景点信息,同时设有查看管理评论的功能,对用户提交的评论进行管控。界面如下图4-14所示。
图4-14景点信息详情界面图
景点信息管理代码:
def Get_obj(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
if obj:
self.interact_obj(ctx, obj)
return {"result": {"obj": obj}}
5系统测试
5.1 测试目的
系统测试的目的就是为了找错,从开发好的系统当中通过各种手段、方法进行找错,看看系统是不是存在乱码的现象,是不是用户功能混乱,通过各种纠错,保证系统能够正常的运行,在测试中我们通过采用的是黑盒测试和白盒测试两种测试方法,通过黑盒测试,我们可以了解系统各项功能是不是能够实现,界面是不是美观,操作是不是方便,通过白盒测试,我们可以了解到某一条的具体编程代码是不是运行路径正确,能不能达到预期,从错误中不断完善,想尽一切办法找到系统中存在的错误,然后找到出错的具体原因,然后对系统进行修改,达到我们所要实现的功能,进而提高了系统的各种性能(安全性、可靠性、稳定性等)。
系统测试不是程序开发完以后才开始的,他贯穿了开发的整个过程,在开发的过程中我们都会对实现的代码进行一点一点的测试,从而完成系统,再对系统进行整体测试,保证每个用户在使用的时候都能做到系统运行流程,满足信息增删改查等主要功能。
5.2 系统测试用例
表5.1 登录模块功能测试表
测试名称 |
测试功能 |
操作过程 |
预期结果 |
测试结果 |
登录模块测试 |
登录成功的情况 |
管理员可以通过浏览器进入到智能旅游个性化推荐后台的登录界面,输入用户名:admin和密码admin后,点击“登录”按钮。 |
成功登录到管理员管理的界面 |
正确 |
登录模块测试 |
登录失败的情况 |
管理员可以通过浏览器进入到智能旅游个性化推荐的后台登录界面,输入用户名:admin和密码111后,点击“登录”按钮。 |
系统提示“用户名和密码不匹配” |
正确 |
旅游资讯信息添加功能测试:
表5.2 旅游资讯信息添加功能测试表
测试名称 |
测试功能 |
操作过程 |
预期结果 |
测试结果 |
旅游资讯添加模块测试 |
旅游资讯添加成功的情况 |
在“资源管理”菜单中选择“旅游资讯”点击 “新增”,输入旅游资讯相关信息,输入正确的信息后,点击“提交”按钮。 |
提示添加成功 |
正确 |
旅游资讯添加模块测试 |
旅游资讯添加失败的情况 |
在“资源管理”菜单中选择“旅游资讯”点击 “新增”,不输入标题,其他信息正常填写后,点击“提交”按钮。 |
提示“添加失败,新闻标题不能为空” |
正确 |
查看景点信息功能模块测试:
表5.3 查看景点信息功能测试表
测试名称 |
测试功能 |
操作过程 |
预期结果 |
测试结果 |
查看景点信息功能测试 |
景点信息显示成功的情况 |
用户在首页点击“景点信息”进入景点信息列表,任性一条景点信息,查看详情 |
景点信息显示成功 |
正确 |
表5.4 查看酒店信息功能测试表
测试名称 |
测试功能 |
操作过程 |
预期结果 |
测试结果 |
查看酒店信息功能测试 |
酒店信息显示成功的情况 |
用户在首页点击“酒店信息”进入酒店信息列表,任性一条酒店信息,查看详情 |
酒店信息显示成功 |
正确 |
5.3 系统测试结果
通过编写智能旅游个性化推荐的测试用例,已经检测完毕登录、旅游资讯添加、景点信息查看、酒店信息查看,通过这4大模块为智能旅游个性化推荐的后期推广运营提供了强力的技术支撑。
结论
在开发本智能旅游个性化推荐之前,首先通过网上查询现有的智能旅游个性化推荐功能、线下通过问卷调查的方式,了解用户对旅游景点方面的具体需求,对系统的开发背景的研究意义进行研究,设计了本智能旅游个性化推荐具体实现的功能;确定好功能后,第二步就是开发工具的选择,在设计本智能旅游个性化推荐的时候,采用了现下比较流程的Pythong语言,采用Django框架,数据的存储方面采用的是开源的MYSQL,接下来就是对系统需求的分析,在文中主要通过对智能旅游个性化推荐进行可行性、性能、功能、用例四个方面进行分析,确定了本智能旅游个性化推荐的具体功能,功能确定后就是对系统的设计以及,包括前后台、数据库等方面,最终完成系统的开发,对系统进行测试总结。
在开发本智能旅游个性化推荐的过程中我成长了很多,学习到了很多书本上没有的知识,目前系统虽然已经完成,但是还有许多地方需要改进,比如界面布局方面,代码的编写方面,都可以进一步完善,由于自己专业知识的浅薄,系统做的并不是十分完美,以后我会不断进行学习,对系统进行完善,希望有机会能够投入到现实的使用当中,给旅游者提供便利。
参考文献
[1]王茸, 李强, 何颖, 郭娅, 吴小敏, 杨政林, 黄贻望. 个性化旅游推荐系统的设计与实现[J]. 福建电脑, 2023, 39 (09): 95-99.
[2]刘洋. 基于大数据旅游推荐系统及方法[P]. 江苏省: CN116561415A, 2023-08-08.
[3]王廉之, 张岳, 汤倩, 刘妍. 基于标签的个性化旅游推荐及情感分析[J]. 信息与电脑(理论版), 2022, 34 (21): 98-101.
[4]Lin Yan, Hu Guofeng. Design and Communication of City Brand Image Based on Big Data and Personalized Recommendation System[J]. Journal of Function Spaces, 2022, 2022
[5]Huiling Yang, Jing Jiang. A Personalized Recommendation Technique for Travel Route Based on Fuzzy Consistent Matrix[J]. Mobile Information Systems, 2022, 2022
[6]瞿祥涛. 宜昌市智慧旅游“精准推荐”:满足游客个性化需求[N]. 中国文化报, 2022-01-25 (007).
[7]杜继明. Python语言的Web开发应用分析[J]. 数字通信世界, 2022(001):000.
[8]阮耀民. 基于Django的Python Web快速开发[J]. 2021.
[9]李晓雨. 利用python实现对存储在Mysql数据库的日志文件的分析和保存[J]. 科学技术创新, 2021(29):3.
[10]丁宇, 李瑞祥. 在Python中实现类似MySQL数据库中数据关联的操作方法[J]. 网络安全和信息化, 2021(10):2.
[11]李沁颖, 谢抢来, 金玲. 新工科视域下高校计算机科学与技术专业课程思政的路[10]径探究--以《Python基础》课程为例[J]. 江科学术研究, 2022, 17(3):4.
[12] Shah S , Patel Y , Panchal K , et al. Python and MySQL based Smart Digital Retail Management System[C]// 2021 6th International Conference for Convergence in Technology (I2CT). 2021.
[13] Kumar D , Joseph A P , Junghare P S , et al. Fitness Nama Using Python Language, MYSQL, SQLyog And Anaconda Software[J]. IJIRT(www.ijirt.org), 2021(10).
[14]王家兰. 基于大数据环境下面向智能旅游服务机器人的个性化推荐算法研究[J]. 普洱学院学报, 2020, 36 (03): 32-34.
[15]廖旺宇. 基于游记图文信息的个性化旅游路线推荐应用[J]. 计算机应用与软件, 2020, 37 (06): 108-113.
[16]段治州. 基于社交网络的个性化旅游推荐算法研究[D]. 西北大学, 2020.
[17]吴军. 基于协同过滤的个性化旅游推荐系统的研究与实现[D]. 北京交通大学, 2020.
[18]文益民, 史一帆, 蔡国永, 缪裕青, 龙刚. 个性化旅游推荐研究综述[A] 2020中国旅游科学年会论文集[C]. 中国旅游研究院, 中国旅游研究院, 2020: 12.
致 谢
“时光荏苒,岁月如梭”,四年的大学生涯在这里即将结束,我也即将离开我的母校,踏入社会,在这离开之际,借此机会,我首选要感谢的就是我的老师们,在这四年的学习、生活中,他们给了我很多的帮助,在我消极的时候鼓励我,帮助我走出困境,学习遇到困难的时候,每位老师都孜孜不倦;其次我要感谢我的指导老师,在开发本智能旅游个性化推荐的时候遇到了很多困难,比如前期调查不仔细,功能模块设计的有问题,导师通过细心的沟通、讲解,慢慢让我对系统有了更进一步的了解,在系统开发框架的选择上,导师给我推荐了Django,让我在系统的设计上更加省力,在这期间我对这两个框架还不够熟悉,都是导师耐心的讲解、指导,无论多晚,导师有多忙,总是第一时间为我答疑解惑,可以说没有导师的帮助,我是没有办法完成这个智能旅游个性化推荐的,在这里我还要感谢我的同学们,他们无论在学习还是在生活中都给予了我很大的帮助,我相信我们的友谊会天长地久。
最后向所有关心我、帮助我的老师及同学们表示衷心的感谢!祝愿我的母校越来越辉煌,祝愿老师们桃李满天下,祝愿同学们前程似锦!
点赞+收藏+关注 →私信领取本源代码、数据库
更多推荐
所有评论(0)