java 基于springboot+vue 的迷雾探案馆剧本杀管理系统

很多朋友发现后期找不到文章,收藏关注不迷路

项目介绍

“剧本杀”,一词起源于西方宴会实况角色扮演"谋杀之谜",是玩家到实景场馆,体验推理性质的项目。剧本杀的规则是,玩家先选择人物,阅读人物对应剧本,搜集线索后找出活动里隐藏的真凶。 剧本杀不仅仅是一个游戏,更是一个集知识属性、心理博弈属性、强社交属性于一体的娱乐项目。
随着城市生活工作节奏变快,人们的压力指数日益增高,剧本杀如今已经成为年轻人社交娱乐常见的活动。越来越多的人开始加入剧本杀游戏中,城市中人们对于剧本杀游戏的需求变高,随之而来的是剧本杀门店的大规模壮大。
这几年来剧本杀行业逐渐正规,越来越多的剧本杀店如雨后春笋般不断涌现,曾经很多凭爱好而开店的朋友逐渐开始体会到了竞争压力变大,对门店最重要的管理感到力不从心,尤其是记账,会员管理,日常组局,展示剧本这些问题深感疲惫,越来越多的店铺开始放弃传统的管店模式。
玩家通过小程序进入组局中,在本系统中可以清楚了解到店铺的地址,店面展示的照片,以及当前组局情况。当玩家组齐后直接发车,并在本系统的组局中完成付款,完美解决鸽子精的困扰。也帮助店家更好管理会员,刺激玩家消费,拓客留客锁客一体化。总得来说,随着时代的进步,越来越多的优质店家选择使用剧本杀店铺管理系统。显然,使用剧本杀店铺管理系统是这个行业未来发展的趋势。
本课题所选的经营管理系统专注剧本杀门店管理,解决剧本杀店家开店经营的痛点。海量剧本库轻松展示,一键分享预约组局,完善的会员管理系统,DM剧本管理功能省时省力,自动化入账不再麻烦,每个使用本系统的店家都拥有独立小程序,是店家自己的专属门店。

国内外研究概况

剧本杀是一种以剧情为核心的”演绎”推理游戏:剧本杀起源于英国,原型为谋杀之谜,是一类類人色扮演游戏。游戏全程以剧本为核心,由DM游戏主持人引尋,每名玩家会分到属于自己角色的剧本,在游戏过程中以第一-人称演绎出来,通过搜索证据和互相交流以达到找到真相或者还原故事事件的目的。通常时间是2-5小时,玩家人数在4-12人不等。剧本杀玩法分为封闭式玩法和开放式玩法。
根据观研报告网发布的《2021 年中国剧本杀市场分析报告市场运营态势与发展动向研究》显示,从题材分类上看,剧本杀题材可以分为烧脑推理、欢乐喜剧、都市情感、科幻脑洞等。调查显示,2021年Q1,我国网民对于现实逻辑类型的剧本偏好度较高,占比达51.7%, 欺是科幻脑洞,此为41 .5%。1.剧本杀具备更强的社交属性和互动性,满足年轻人线下多元社交需求,相比于传统的KTV消费方式,剧本杀社交属性更强;相比于密室,剧本杀玩家之间的交互性也更强,深受年轻人欢迎。观研报告网发布的资料显示,2021年Q1,我国90%以上的剧本杀用户年龄在40岁以下。对于当下的互联网时代和"社恐”的年轻人,剧本杀满足了年轻人线下多元社交需求。根据美团数据,超过7成的剧本用户有过拼场经历。三国杀、狼人杀、密室逃脱均是曾火爆年轻人的社交游戏,但三国杀和狼人杀因为卡牌设计失衡或入门门槛逐渐提高等原因而走向衰落,密室逃脱则受商业模式本身的限制难以快速下沉。相比三国杀和狼人杀,剧本杀更加包容和多变的特点使其从简单的桌面游戏逐渐演变为从剧本撰写到发行到线下店的完整产业,因此生命周期相比简单的桌面游戏可以更长。相比密室逃脱100mf的房间服务-群客人玩-次的模式,剧本杀只需要20mf的房间即可持续服务-群客人(持续更新剧本),因此下沉速度可以更快,市场规模更广阔。
从市场规模来看,相关数据显示,2021年中国剧本杀行业市场规模达170.2亿元,同比增长45.0%。剧本杀的推理性、悬疑性可以满足玩家的推理爱好和表演欲,同时剧本杀也为有社交需求的玩家提供了平台。在需求推动下,中国剧本杀门店快速扩张,行业市场规模持续壮大,预计到2025年中国剧本杀行业市场规模将增至448.1亿元。
剧本杀剧本形式不断丰富,玩家游戏体验不断提高。随剧本杀行业的迅速发展,剧本杀游戏的场景布置类型种类增多,可分为实类、半实景类、类,提供不同程度的沉浸式体验。根据剧本推理方法及与现实贴近程度的区别,剧本杀拥有本格、变格、新本格三种类型,丰富逻辑推理形式。从传统的凶手推理剧本基础上,剧本杀目前发展为推凶、还原、情感、阵营四种类别,剧情设定更为丰富,吸引力提升。在向下游发售剧本的方式上,根据该剧本在单座城市的独占程度可将剧本分为装城限、独家三种类。
剧本杀行业整体发展现状。2013年一部名 为Deathwearswhite的剧本传入中国标志着剧本杀在国内的兴起。201 6年芒果TV自制综艺《明星大侦探》的火爆帮助小众的剧本杀游戏"破圈”,随后线上APP率先发力,2018年“我是谜”“百变大侦探” 等APP先后上线并顺利融资;线下紧接着跟上, 2019年线下剧本杀迅速爆发,门店数量激增五倍至12000家。2020年, 即使受疫情影响,我国线下剧本门店数量仍然翻倍,达30000家, 剧本杀成为真正的热门娱乐行业之一。
剧本杀行业主要参与者包括剧本发行商、剧本分发平台。剧本发行商帮助实现剧本资源的归集,修改内测剧本,和剧本发行平台-起搭建上游创作者和下游门店/APP的连接桥梁。目前我国剧本发行商呈现分散状态,头部品牌发行商具有优势。据“黑探有品”线上剧本销售小程序显示,头部梯队发行商在平台上累计销售额达10000- 20000本,中部梯队发行商在5000-7000本,而未尾梯队发行商销售量仅在1000本左右。发行商品牌效益靠剧本质而来,一般由独家及城限剧本打造品牌效应,由盒装本创造收益。具有优质口碑的发行商在上线新剧本时,部分店家会选择跳过测本环节,直接“盲买”剧本。

技术介绍

1、管理员账号:abo 密码:abo
2、开发环境为Eclipse/idea,数据库为mysql 使用java语言开发。
3.配置好Tomcat并点击启动按钮即可运行
4.数据库连接src\main\resources\application.yml中修改
5.maven包版本apache-maven-3.3.9.
开发语言:Java
框架:SSM
前端框架:vue.js
JDK版本:JDK1.8+
服务器:tomcat8+
数据库工具:Navicat
开发软件:idea 支持eclipse

Springboot是当前最流向的一个框架,它的配置更加的简单,使开发变得更加的简单迅速。
Springboot的基础结构共三个文件,具体如下:
src/main/java:程序开发以及主程序入口;
src/main/resources:配置文件;
src/test/java:测试程序。
ssm的数据库配置默认支持两种格式的配置文件
1,application.properties
2,application.yaml

项目界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
使用迷雾探案馆经营管理系统分为管理员和用两个角色的权限子模块。
管理员所能使用的功能主要有:系统首页、个人中心、用户管理、剧本类型管理、剧本信息管理、在线匹配管理、系统匹配管理、在线留言、系统管理、订单管理等。
用户可以实现系统首页、个人中心、在线匹配管理、系统匹配管理等。

在这里插入图片描述
管理员登录后可进行系统首页、个人中心、用户管理、剧本类型管理、剧本信息管理、在线匹配管理、系统匹配管理、在线留言、系统管理、订单管理,管理员的用例如图3-1所示。
用户注册登录后可进行系统首页、个人中心、在线匹配管理、系统匹配管理,用户用例如图3-2所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关键代码


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

目录

目 录
目 录 III
1 绪论 1
1.1 研究背景 1
1.2 目的和意义 1
1.3 论文结构安排 2
2 相关技术 3
2.1 Springboot框架介绍 3
2.2 B/S结构介绍 3
2.3 Mysql数据库介绍 4
3 系统分析 6
3.1 系统可行性分析 6
3.1.1 技术可行性分析 6
3.1.2 经济可行性分析 6
3.1.3 运行可行性分析 6
3.2 系统性能分析 7
3.2.1 易用性指标 7
3.2.2 可扩展性指标 7
3.2.3 健壮性指标 7
3.2.4 安全性指标 8
3.3 系统流程分析 8
3.3.1 操作流程分析 8
3.3.2 登录流程分析 9
3.3.3 信息添加流程分析 10
3.3.4 信息删除流程分析 11
4 系统设计 12
4.1 系统概要设计 12
4.2 系统功能结构设计 12
4.3 数据库设计 13
4.3.1 数据库E-R图设计 13
4.3.2 数据库表结构设计 14
5 系统实现 17
5.1用户部分功能17
5.2 管理员部分功能展示

6 系统测试
6.1 系统测试的特点 
6.2 系统功能测试
6.2.1 登录功能测试
6.2.2 添加类别功能测试
6.3 测试结果分析
结 论
致 谢
参考文献

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值