springboot092安康旅游网站的设计与实现 免费分享源码

博主介绍:专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址

springboot092安康旅游网站的设计与实现录像 源码文档 免费白嫖 适合个人学习的 课设,毕设学习用户

4.1系统结构设计

对于本系统的开发设计,先自上向下,将一个完整的系统分解成许多个小系统来进行实现;再自下向上,将所有的“零件”组装成一个大的、完整的系统。因此这里面的许多个小功能块都要对将要实现的功能进行划分,同时还要给其他的小功能模块提供调用的接口,以便于最后将所有的功能块组合起来。

本基于JSP的安康旅游网站主要实现了游客功能模块和管理员功能模块两大部分,系统结构图如图4-1所示。

图4.1 系统功能结构图

4.2系统顺序图设计

(1)登录顺序图

登录模块主要满足了管理员和游客的权限登录,登录模块的顺序图如图4.2所示。

图4.2用户登录顺序图

(2)添加信息顺序图

管理员和游客登录后均可进行信息的添加操作,添加信息顺序图如图4.3所示

图4.3添加信息顺序图

4.3数据库设计

本基于JSP的安康旅游网站采用的是MYSQL数据库,数据存储快,因为安康旅游网站,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确。

4.3.1 数据库实体(E-R图)

4.3.2 数据库表设计

本基于JSP的安康旅游网站需要后台数据库,采用MYSQL数据库系统进行数据的储存,下面介绍数据库中的各个表的详细信息。各个表的设计结果如下:

表4.1  users管理员信息表

字段名

数据类型

是否允许空

字段含义

id

bigint(20)

NOT NULL

编号

username`

varchar(100)

NULL

用户名

password

varchar(100)

NULL

密码

role

varchar(100)

NULL

角色

addtime

timestamp

NULL

新增时间

表4.2  jingdianxinxi景点信息

字段名

数据类型

是否允许空

字段含义

id

bigint(20)

NOT NULL

编号

addtime

timestamp

NULL

创建时间

jingdianmingcheng

varchar(200)

NULL

景点名称

jingdiandengji

varchar(200)

NULL

景点等级

jingdianjieshao

varchar(200)

NULL

景点介绍

suozaishengqu

varchar(200)

NULL

所在省区

suozaichengshi

varchar(200)

NULL

所在城市

suozaidiqu

varchar(200)

NULL

所在地区

meitiankaifangshijian

datetime

NULL

每天开放时间

meitianguanbishijian

datetime

NULL

每天关闭时间

beizhu

varchar(200)

NULL

备注

jiage

int(11)

NULL

价格

tupian

varchar(200)

NULL

图片

thumbsupnum

int(11)

NULL

赞数

crazilynum

int(11)

NULL

踩数

clicktime

datetime

NULL

最近点击时间

clicknum`

int(11)

NULL

点击次数

表4.3  jiudianxinxi酒店信息表

字段名

数据类型

是否允许空

字段含义

id

bigint(20)

NOT NULL

编号

addtime

timestamp

NULL

创建时间

`jiudianmingcheng

varchar(200)

NULL

酒店名称

jiudianjieshao

longtext

NULL

酒店介绍

fangjianshu

int(11)

NULL

房间数

suozaishengqu

varchar(200)

NULL

所在省区

suozaichengshi

varchar(200)

NULL

所在城市

suozaidiqu

varchar(200)

NULL

所在地区

jiudianjiage

int(11)

NULL

酒店价格

tupian

varchar(200)

NULL

图片

thumbsupnum

int(11)

NULL

赞数

crazilynum

int(11)

NULL

踩数

clicktime

datetime

NULL

最近点击时间

clicknum`

int(11)

NULL

点击次数

表4.4  youke游客信息表

字段名

数据类型

是否允许空

字段含义

id

bigint(20)

NOT NULL

编号

addtime

timestamp

NULL

创建时间

youkezhanghao

varchar(200)

NULL

游客账号

mima

varchar(200)

NULL

密码

youkexingming

varchar(200)

NULL

游客姓名

xingbie

varchar(200)

NULL

性别

lianxifangshi

varchar(200)

NULL

联系方式

shenfenzheng

varchar(200)

NULL

身份证

youxiang

varchar(200)

NULL

邮箱

touxiang

varchar(200)

NULL

头像

表4.5  lvyouxianlu旅游线路信息表

字段名

数据类型

是否允许空

字段含义

id

bigint(20)

NOT NULL

编号

addtime

timestamp

NULL

创建时间

youkezhanghao

varchar(200)

NULL

游客账号

youkexingming

varchar(200)

NULL

游客姓名

xianluguihua

varchar(200)

NULL

线路规划

xianlutupian

varchar(200)

NULL

线路图片

第五章 系统实现

5.1登录模块的实现

用户要想进入本系统,必须通过正确的用户名和密码,选择登录类型进行登录操作,在登录时系统会以用户名、密码和登录类型为参数进行登录信息的验证,信息正确则登录进入对应用户功能界面可进行功能处理,反之登录失败,系统登录界面展示如图5.1所示。

图5.1  系统登录界面

5.2管理员功能模块的实现

5.2.1景点信息管理界面

管理员可添加、修改和删除景点信息信息,景点信息管理界面展示如图5.2所示,添加景点信息信息界面展示如图5.3所示。

5.2.2酒店信息管理界面

管理员可增删改查酒店信息,酒店信息管理界面展示如图5.4所示。

图5.4  酒店信息管理界面

5.2.3特产管理界面

管理员可增删改查特产信息,特产管理界面展示如图5.5所示。

图5.5  特产管理界面

5.2.4游客管理界面

管理员可查看、添加、修改和删除游客信息,游客管理界面展示如图5.6所示。

图5.6  游客管理界面

5.2.5景点购票订单管理界面

管理员可查看景点购票订单信息,并可对其进行审核、修改和删除操作,景点购票订单管理界面展示如图5.7所示。

图5.7 景点购票订单管理界面

5.3游客功能模块的实现

5.3.1系统主界面

游客进入本系统可查看系统信息,系统主界面展示如图5.8所示。

图5.8 系统主界面

5.3.2游客注册界面

未有账号的游客可进入注册界面进行注册操作,游客注册界面展示如图5.9所示。

图5.9 游客注册界面

5.3.3景点信息详情界面

游客可选择景点信息查看景点信息详情信息,登录后可进行购票操作,景点信息详情界面展示如图5.10所示。

图5.10景点信息详情界面

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.format.annotation.DateTimeFormat;
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.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 景点信息
 * 后端接口
 * @author 
 * @email 
 * @date 2021-04-30 11:47:10
 */
@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("查询景点信息成功").put("data", jingdianxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
		jingdianxinxi.setClicknum(jingdianxinxi.getClicknum()+1);
		jingdianxinxi.setClicktime(new Date());
		jingdianxinxiService.updateById(jingdianxinxi);
        return R.ok().put("data", jingdianxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
		jingdianxinxi.setClicknum(jingdianxinxi.getClicknum()+1);
		jingdianxinxi.setClicktime(new Date());
		jingdianxinxiService.updateById(jingdianxinxi);
        return R.ok().put("data", jingdianxinxi);
    }
    


    /**
     * 赞或踩
     */
    @RequestMapping("/thumbsup/{id}")
    public R vote(@PathVariable("id") String id,String type){
        JingdianxinxiEntity jingdianxinxi = jingdianxinxiService.selectById(id);
        if(type.equals("1")) {
        	jingdianxinxi.setThumbsupnum(jingdianxinxi.getThumbsupnum()+1);
        } else {
        	jingdianxinxi.setCrazilynum(jingdianxinxi.getCrazilynum()+1);
        }
        jingdianxinxiService.updateById(jingdianxinxi);
        return R.ok("投票成功");
    }

    /**
     * 后端保存
     */
    @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);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,JingdianxinxiEntity jingdianxinxi, HttpServletRequest request,String pre){
        EntityWrapper<JingdianxinxiEntity> ew = new EntityWrapper<JingdianxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        params.put("order", "desc");
		PageUtils page = jingdianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jingdianxinxi), params), params));
        return R.ok().put("data", page);
    }


}

5.3.4酒店详情界面

游客可选择酒店查看详情信息,登录后可进行预订下单操作,酒店详情界面展示如图5.11所示。

图5.11酒店详情界面

源码下载地址:

springboot092安康旅游网站的设计与实现.zip资源-CSDN文库

大家点赞、收藏、关注、评论啦  其他的定制服务 商务合作  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翰文编程

你的鼓励 是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值