摘要
本系統是一個基于Java, SpringBoot, Vue, Python爬蟲, Hadoop大資料技術的旅遊推薦管理系統。該系統旨在為使用者提供個性化的旅遊推薦服務,通過分析使用者的旅遊曆史資料和行為模式,為使用者推薦合适的旅遊目的地、景點等。
系統采用SpringBoot作為後端架構,負責處理使用者請求、資料分析和推薦算法的實作。前端使用Vue.js建構使用者界面,提供友好的使用者互動體驗。Python爬蟲用于爬取網絡上的旅遊資訊,為推薦算法提供資料支援。Hadoop大資料技術用于存儲和處理海量的旅遊資料,提高系統的資料處理能力。
通過本系統,使用者可以更友善地擷取個性化的旅遊推薦服務,提高旅遊體驗。同時,系統可以為旅遊相關企業提供有價值的使用者行為分析和市場洞察,幫助企業優化産品和服務。
功能介紹
本系統的功能應該包括:注冊登入、遊客統計、輿情分析、旅遊推薦、使用者管理等功能。
注冊登入:新使用者可以填寫相關資訊進行注冊,使用者使用賬号和密碼登入網站,方可使用相關功能;
遊客統計:根據職業或者景點展示旅遊熱度綜合指數,使用者也可以釋出對景點的評價;
輿情分析:爬取資料并分析後,使用柱狀圖等展示熱門景點實時熱度等資訊;
旅遊推薦:使用爬取并分析後的景點或者城市相關資料進行推薦,友善使用者擷取實時的旅遊推薦資料;
使用者管理:管理者可以對使用者的資訊進管理,也可以手動新增使用者。
技術介紹
後端:Java語言、Spring Boot架構、MuSQL資料庫、maven依賴管理等;
前端:Vue、Element ui等;
爬蟲:Python;
大資料分析:Hadoop。
部分代碼展示
<template>
<div class="layui-card" id="app">
<el-container class="margin-t">
<el-header class="main-view" height="10vh">
<el-form :inline="true" class="demo-form-inline">
<el-form-item label="使用者昵稱">
<el-input v-model="title" placeholder="輸入昵稱"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查詢</el-button>
</el-form-item>
<el-form-item>
<el-button type="success" @click="add()">新增使用者</el-button>
</el-form-item>
</el-form>
</el-header>
<el-main class="main-view" style="min-height: 87vh;">
<div style="height: 87vh;">
<el-table :stripe="true" :data="tableData" style="width: 100%">
<el-table-column prop="uid" label="ID" width="80">
</el-table-column>
<el-table-column prop="nickName" label="使用者名" width="100">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.nickName}}</div>
</template>
</el-table-column>
<el-table-column prop="phone" label="手機号" width="150">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.phone}}</div>
</template>
</el-table-column>
<el-table-column prop="job" label="職業" width="90">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.job}}</div>
</template>
</el-table-column>
<el-table-column prop="edu" label="學曆" width="90">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.edu}}</div>
</template>
</el-table-column>
<el-table-column prop="address" label="所在地" width="90">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.address}}</div>
</template>
</el-table-column>
<!-- <el-table-column prop="sex" label="性别" width="80">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.sex}}</div>
</template>
</el-table-column> -->
<!-- <el-table-column prop="pic" label="頭像" width="100">
<template slot-scope="scope">
<div>
<div v-if="!scope.row.pic" class="text-ellipsis-2">未上傳</div>
<el-image v-else :preview-src-list="[picPath+scope.row.pic ]" :src="picPath+scope.row.pic"
style="width: 80px; height: 80px;box-shadow: 1px 1px 5px rgba(0,0,0,0.1)">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
</div>
</template>
</el-table-column> -->
<el-table-column prop="title" label="類型" width="100">
<template slot-scope="scope">
<div class="text-ellipsis-2">{{scope.row.type==1?"管理者":(scope.row.type==2?'員工':"使用者")}}</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="添加時間" width="180">
</el-table-column>
<el-table-column label="操作" width="250">
<template slot-scope="scope">
<el-button @click="toEdit(scope.row)" type="text" size="small">編輯</el-button>
<el-button @click="delData(scope.row)" type="text" class="text-red" size="small">删除</el-button>
<el-button @click="resetPass(scope.row)" type="text" class="text-red" size="small">重置密碼</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-main>
</el-container>
<el-dialog title="編輯使用者" :visible.sync="show">
<el-form :model="dataView">
<el-form :model="dataView">
<el-form-item label="昵稱" label-width="120px">
<el-input v-model="dataView.nickName" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="電話" label-width="120px">
<el-input v-model="dataView.phone" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="所在地" label-width="120px">
<el-select v-model="dataView.address" placeholder="請選擇">
<el-option
v-for="item in cityList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="職業" label-width="120px">
<el-input v-model="dataView.job" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="學曆" label-width="120px">
<el-input v-model="dataView.edu" autocomplete="off"></el-input>
</el-form-item>
<!-- <el-form-item label="頭像" label-width="120px">
<div style="display: flex;justify-content: space-between;">
<div>
<el-image :preview-src-list="[getPicUrl(dataView.pic)]" :src="getPicUrl(dataView.pic)"
style="width: 100px; height: 100px;box-shadow: 1px 1px 5px rgba(0,0,0,0.1)">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" style="font-size: 100px;"></i>
</div>
</el-image>
<div style="display: flex;justify-content: space-between;">
<div style="text-align: center;">頭像</div>
<div @click="editPic(dataView,'')" style="text-align: center;color: #63a35c;">修改</div>
</div>
</div>
</div>
</el-form-item> -->
<el-form-item label="類型" label-width="120px">
<el-select v-model="dataView.type" placeholder="請選擇">
<el-option label="使用者" :value="2"></el-option>
<el-option label="管理者" :value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="密碼" label-width="120px">
<div v-if="!dataView.uid">預設123456</div>
</el-form-item>
</el-form>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="show = false">取 消</el-button>
<el-button type="primary" @click="editData">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
擷取源碼請關注後私信“20240430”