作者主頁:編程指南針
作者簡介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、掘金特邀作者、多年架構(gòu)師設(shè)計(jì)經(jīng)驗(yàn)、騰訊課堂常駐講師
主要內(nèi)容:Java項(xiàng)目、畢業(yè)設(shè)計(jì)、簡歷模板、學(xué)習(xí)資料、面試題庫、技術(shù)互助
收藏點(diǎn)贊不迷路? 關(guān)注作者有好處
文末獲取源碼?
項(xiàng)目編號:BS-XCX-009
前言:
隨著互聯(lián)網(wǎng)的趨勢的到來,各行各業(yè)都在考慮利用互聯(lián)網(wǎng)將自己的信息推廣出去,最好方式就是建立自己的平臺信息,并對其進(jìn)行管理,隨著現(xiàn)在智能手機(jī)的普及,人們對于智能手機(jī)里面的應(yīng)用旅游服務(wù)軟件也在不斷的使用,本文首先分析了旅游服務(wù)軟件應(yīng)用程序的需求,從系統(tǒng)開發(fā)環(huán)境、系統(tǒng)目標(biāo)、設(shè)計(jì)流程、功能設(shè)計(jì)等幾個(gè)方面對系統(tǒng)進(jìn)行了系統(tǒng)設(shè)計(jì)。開發(fā)出本旅游服務(wù)軟件,主要實(shí)現(xiàn)了管理員后端;首頁、個(gè)人中心、旅游攻略管理、旅游資訊管理、景點(diǎn)信息管理、門票預(yù)定管理、用戶管理、酒店信息管理、酒店預(yù)定管理、推薦路線管理、論壇管理、系統(tǒng)管理,用戶前端;首頁、景點(diǎn)信息、酒店信息、論壇中心、我的等??傮w設(shè)計(jì)主要包括系統(tǒng)功能設(shè)計(jì)、該系統(tǒng)里充分綜合應(yīng)用Mysql數(shù)據(jù)庫、JAVA等相關(guān)知識。網(wǎng)頁界面的構(gòu)成,具備簡單易懂、便捷等特征。設(shè)計(jì)過程中,第一,靜態(tài)頁面的制作需要應(yīng)用語言,以及APP的美工,在這些方面均收獲了較好的成績。第二,針對HBuilder X等技術(shù)動態(tài)編程以及數(shù)據(jù)庫進(jìn)行努力學(xué)習(xí)和大量實(shí)踐,并運(yùn)用到了APP的建設(shè)中。
一,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
二,項(xiàng)目簡介
通過需求分析和設(shè)計(jì)出了旅游服務(wù)軟件,實(shí)現(xiàn)首頁、個(gè)人中心、旅游攻略管理、旅游資訊管理、景點(diǎn)信息管理、門票預(yù)定管理、用戶管理、酒店信息管理、酒店預(yù)定管理、推薦路線管理、論壇管理、系統(tǒng)管理等功能,給用戶提供一個(gè)完整的旅游服務(wù)軟件資源平臺。對旅游服務(wù)軟件進(jìn)行系統(tǒng)測試。
管理員、用戶可通過HBuilder X系統(tǒng)手機(jī)打開系統(tǒng),注冊登錄后可進(jìn)行;
管理員;首頁、個(gè)人中心、旅游攻略管理、旅游資訊管理、景點(diǎn)信息管理、門票預(yù)定管理、用戶管理、酒店信息管理、酒店預(yù)定管理、推薦路線管理、論壇管理、系統(tǒng)管理等。
本系統(tǒng)的使用主要是為了給用戶提供便利的查詢旅游服務(wù)軟件的平臺,滿足用戶手機(jī)查詢旅游服務(wù)軟件的需求,促進(jìn)旅游服務(wù)軟件的發(fā)展。
總體分布如圖3.1所示:
?文章來源:http://www.zghlxwxcb.cn/news/detail-419746.html
圖3.1? 總體功能需求圖
用戶用例圖展示:
功能結(jié)構(gòu)圖:
?
?系統(tǒng)開發(fā)流程圖
數(shù)據(jù)庫概念模型旨在抽象現(xiàn)實(shí)世界中的信息,實(shí)現(xiàn)信息世界的建模。因此,概念模型是數(shù)據(jù)庫設(shè)計(jì)的重要工具。在概念模型設(shè)計(jì)、E-R模型的方法是最常用的設(shè)計(jì)方法。
根據(jù)系統(tǒng)功能模塊的劃分,對系統(tǒng)中的大部分實(shí)體進(jìn)行了分析。系統(tǒng)的主要物理圖如下:
1、酒店信息實(shí)體屬性圖如圖4.4所示
?
圖4.4酒店信息實(shí)體屬性圖
2、用戶信息實(shí)體屬性圖如圖4.5所示
?
圖4.5用戶信息實(shí)體屬性圖
3、景點(diǎn)信息實(shí)體屬性圖如圖4.5所示
圖4.6景點(diǎn)信息實(shí)體屬性圖
?
三,系統(tǒng)展示
5.1管理員登錄模塊
管理員通過頁面輸入用戶名、密碼、角色進(jìn)行登錄操作,如圖5-1所示。
圖5-1管理員登錄界面圖
5.2管理員后端功能模塊
管理員通過頁面進(jìn)行登錄操作,登陸系統(tǒng)后,可以查看首頁、個(gè)人中心、旅游攻略管理、旅游資訊管理、景點(diǎn)信息管理、門票預(yù)定管理、用戶管理、酒店信息管理、酒店預(yù)定管理、推薦路線管理、論壇管理、系統(tǒng)管理等模塊進(jìn)行查看、編輯修改操作;如圖5-2所示。
圖5-2管理員功能界面圖
旅游資訊管理:通過內(nèi)容列表可以獲取資訊標(biāo)題、封面圖片、發(fā)布時(shí)間等信息,進(jìn)行查看詳情、修改、刪除操作,如圖5-3所示;
圖5-3旅游資訊管理界圖面
景點(diǎn)信息管理:通過內(nèi)容列表可以獲取景點(diǎn)名稱、等級、景點(diǎn)圖片、門票價(jià)格、開放時(shí)間、服務(wù)電話等進(jìn)行詳情或修改、刪除操作,如圖5-4所示;
圖5-4景點(diǎn)信息管理界圖面
用戶管理:通過內(nèi)容列表可以獲取用戶賬號、密碼、用戶姓名、頭像、手機(jī)號、身份證等信息,進(jìn)行查看、修改、刪除操作,如圖5-5所示;
圖5-5用戶管理界圖面
酒店信息管理:通過內(nèi)容列表可以獲取酒店名稱、類別、星級、酒店圖片、酒店地址、房間類型、一晚價(jià)格、聯(lián)系電話等信息,進(jìn)行查看、修改、刪除操作,如圖5-6所示;
圖5-6酒店信息管理界圖面
前端功能展示:
首頁
用戶登錄到首頁可以查看首頁、景點(diǎn)信息、酒店信息、論壇中心、我的等內(nèi)容,如圖5.13所示。
圖5.13首頁功能界面圖
?
我的
在我的頁面可以查看旅游攻略、景點(diǎn)信息、門票預(yù)定、酒店信息、酒店預(yù)定、推薦路線、我要發(fā)帖等信息,如圖5.14所示。
圖5.14我的界面圖
?
用戶信息
在用戶信息頁面可以查看用戶賬號、密碼、用戶姓名 頭像、手機(jī)號等信息,并可根據(jù)需要進(jìn)行保存,如圖5.15所示。
圖5.15用戶信息界面圖
旅游攻略
在旅游攻略可以查看攻略標(biāo)題、發(fā)布時(shí)間、圖片、用戶賬號、攻略內(nèi)容等信息,并可根據(jù)需要對旅游攻略進(jìn)行提交,如圖5.16所示。
??????????????????????? 5.16旅游攻略界面圖?
景點(diǎn)信息
在景點(diǎn)信息頁面可以查看景點(diǎn)名稱、等級、景點(diǎn)圖片、門票價(jià)格、開放時(shí)間、服務(wù)電話、詳細(xì)地址等信息,并可根據(jù)需要對景點(diǎn)信息進(jìn)行門票預(yù)訂,如圖5.17所示。
圖5.17景點(diǎn)信息界面圖
酒店信息
在酒店信息頁面可以查看酒店名稱、類別、星級、酒店圖片、酒店地址、房間類型、一晚價(jià)格、聯(lián)系電話等內(nèi)容,并可根據(jù)需要進(jìn)行酒店預(yù)訂,如圖5.18所示。
圖5.18酒店信息界面圖
門票預(yù)定
在門票預(yù)定頁面可以查看景點(diǎn)名稱、等級、詳細(xì)地址、門票價(jià)格、購買數(shù)量、總價(jià)格等內(nèi)容,并可根據(jù)需要進(jìn)行支付,如圖5.19所示。
圖5.19門票預(yù)定界面圖
四,核心代碼展示
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.JingdianxinxiEntity;
import com.entity.view.JingdianxinxiView;
import com.service.JingdianxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 景點(diǎn)信息
* 后端接口
* @author
* @email
* @date 2020-12-29 11:11:16
*/
@RestController
@RequestMapping("/jingdianxinxi")
public class JingdianxinxiController {
@Autowired
private JingdianxinxiService jingdianxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
PageUtils page = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
PageUtils page = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( JingdianxinxiEntity jingdianxinxi){
EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jingdianxinxi, "jingdianxinxi"));
return R.ok().put("data", jingdianxinxiService.selectListView(ew));
}
/**
* 查詢
*/
@RequestMapping("/query")
public R query(JingdianxinxiEntity jingdianxinxi){
EntityWrapper< JingdianxinxiEntity> ew = new EntityWrapper< JingdianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jingdianxinxi, "jingdianxinxi"));
JingdianxinxiView jingdianxinxiView = jingdianxinxiService.selectView(ew);
return R.ok("查詢景點(diǎn)信息成功").put("data", jingdianxinxiView);
}
/**
* 后端詳情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
return R.ok().put("data", jingdianxinxi);
}
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
return R.ok().put("data", jingdianxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
jingdianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.insert(jingdianxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
jingdianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.insert(jingdianxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody JingdianxinxiEntity jingdianxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(jingdianxinxi);
jingdianxinxiService.updateById(jingdianxinxi);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jingdianxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<JingdianxinxiEntity> wrapper = new EntityWrapper<JingdianxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = jingdianxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.JiudianxinxiEntity;
import com.entity.view.JiudianxinxiView;
import com.service.JiudianxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 酒店信息
* 后端接口
* @author
* @email
* @date 2020-12-29 11:11:16
*/
@RestController
@RequestMapping("/jiudianxinxi")
public class JiudianxinxiController {
@Autowired
private JiudianxinxiService jiudianxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
PageUtils page = jiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
PageUtils page = jiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( JiudianxinxiEntity jiudianxinxi){
EntityWrapper<JiudianxinxiEntity> ew = new EntityWrapper<JiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudianxinxi, "jiudianxinxi"));
return R.ok().put("data", jiudianxinxiService.selectListView(ew));
}
/**
* 查詢
*/
@RequestMapping("/query")
public R query(JiudianxinxiEntity jiudianxinxi){
EntityWrapper< JiudianxinxiEntity> ew = new EntityWrapper< JiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudianxinxi, "jiudianxinxi"));
JiudianxinxiView jiudianxinxiView = jiudianxinxiService.selectView(ew);
return R.ok("查詢酒店信息成功").put("data", jiudianxinxiView);
}
/**
* 后端詳情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
JiudianxinxiEntity jiudianxinxi = jiudianxinxiService.selectById(id);
return R.ok().put("data", jiudianxinxi);
}
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
JiudianxinxiEntity jiudianxinxi = jiudianxinxiService.selectById(id);
return R.ok().put("data", jiudianxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
jiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.insert(jiudianxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
jiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.insert(jiudianxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody JiudianxinxiEntity jiudianxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(jiudianxinxi);
jiudianxinxiService.updateById(jiudianxinxi);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jiudianxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<JiudianxinxiEntity> wrapper = new EntityWrapper<JiudianxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = jiudianxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
五,項(xiàng)目總結(jié)
未注冊用戶可進(jìn)入注冊界面,填寫用戶信息,若用戶名存在的話,提示返回填寫用戶名,用戶名不存在,則填寫密碼和手機(jī)號,如果電話號碼是有效的,用戶信息被添加到數(shù)據(jù)庫,注冊成功。用戶注冊流程圖如圖3.2所示。
?
圖3.2 系統(tǒng)注冊流程圖
為了保證系統(tǒng)的安全性,要使用本系統(tǒng)必須先登陸到系統(tǒng)中。用戶在登錄界面輸入用戶名和密碼,點(diǎn)擊登錄,進(jìn)入系統(tǒng),其登錄的流程圖如圖3.3所示。
?
圖3.3系統(tǒng)登錄流程圖文章來源地址http://www.zghlxwxcb.cn/news/detail-419746.html
到了這里,關(guān)于小程序旅游|基于微信小程序和SSM的智慧旅游系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!