基于springboot+vue的古城民宿管理系统【数据库设计、论文、毕设源码、开题报告】

  博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到

🔎​百套小程序APP项目实战持续更新中~​

🔎​千套JAVA项目实战持续更新中~​

🔎​百套Python实战项目持续更新中~​
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我

❤️文末获取源码联系❤️        ⚠️一定要先收藏⚠️

4 系统设计

系统设计必须参考当前社会最主流的页面设计,因为不主流的就是已经被淘汰的,随着软件设计多年发展,已经有了完整的设计理念。

4.1 界面设计原则

针对界面的模块以及操作部分,有些规则是需要提前设定的。

第一点:前后台主界面必须统一。统一的有整个网站的上部以及下部,中间显示关键内容,后台的菜单栏必须在左侧。颜色也要统一,不能有很明显的突兀,产生视觉厌恶的效果。

第二点:导航条必须美化。界面统一后,导航就是一个门户入口,就像大门一样,非常的引人注目,如果导航条不美化,随便弄一个导航条会与界面不匹配,并且有种设计不上档次的感觉。

第三点:输入框必须格式统一,并且相关核心数据要尽量的放到前面,要符合人们的正常认知。比如用户的属性有账号密码或者性别电话或者详细说明等这些,一般设定详细说明的为补充部分,尽量放到最下面,不能说把姓名或者电话放到最下面,这样一方面是页面布局不美观,另一方面就是违反人们的日常生活认知。

第四点:界面设计必须要考虑用户对象,他们可能对计算机的认知也就仅仅处于操作使用阶段,尽量要用贴合人们日常生活和操作的习惯设计到项目里面使用。

4.2 功能结构设计

站在使用者的角度来分析北京古城民宿管理系统的详细功能,最后使用结构图来展示设计结果。

管理员功能结构设计见图4.1。管理员管理商家,管理游记攻略,管理古城推荐,管理网站活动等信息。

图4.1 管理员功能结构图

商家功能结构设计见图4.2。商家需要回复用户咨询房间的信息,需要增删改查房间信息,需要使用房间预定订单等。

图4.2 商家功能结构图

用户功能结构设计见图4.3。用户可以对游记攻略,网站活动,古城推荐进行收藏,发布留言和查询,可以查看商家,可以查看房间,可以预定房间。

图4.3 用户功能结构图

4.3 数据库设计

能满足当前项目数据所需要的数据库模式采用的是关系型数据库。首先关系型数据库发展历史悠久,功能完善,性价比也比较高,不管是开发成本还是使用成本都可以接收,不需要重新创建一种新的数据模型。

4.3.1 数据库E-R图设计

数据需要提前设计清楚,如何简单明了的表示数据实体与属性之间的关系,目前最优解决方法是采用画E-R图的方式来进行描述,用E-R图的好处有以下几点:

第一点:数据筛选,有时候用文字描述的数据不太直观,当用E-R来描述的时候可以更直观的看到数据之间的关系,有助于清空冗余的数据表达,让数据更清晰;

第二点:可以通过优化的E-R对数据进行优化,能提前对数据量进行预估,提前设定相关规则,避免数据混乱;

第三点:可以提高数据的完整性,当E-R画出的过程也是对文字逻辑的梳理过程,有助于大脑的理解;

第四点:优化好的数据在检索方面可以人为的提高检索效率;

本章主要表达各个数据模型直接有任何关系,通过E-R图可以更清楚的判断,有助于提高数据存储格式等一系列的后续操作的效率,优化开发步骤。

(1)图4.3为房间实体图。

图4.3 房间实体图

(2)图4.4为用户实体图。

图4.4 用户实体图

(3)图4.5为房间预定实体图。

图4.5 房间预定实体图

(4)图4.6为商家实体图。

图4.6 商家实体图

(5)图4.7为上述实体间关系E-R图。

图4.7 实体间关系E-R图

4.3.2 数据库表结构设计

三大范式基本上概括了数据库设计的必要规范,只有符合三大范式的数据才是合理的数据。

范式第一条:表与表之间,字段与字段之间,每个名字都不能产生混淆的概念,必须不一样,必须确保唯一性的存在。

范式第二条:在满足第一条范式的前提上要对主键进行规定,不能这个表的主键在第一列,后面的表的主键位置列数就变了,这样不可以,必须保证统一,让主键在相同列上。

范式第三条:满足前两条范式的同时,如果获取数据,必须可以通过主键就能查询到相关数据,尽量不要跨表获取。

三大范式是继续关系,每一个范式都要继承前面范式的要求,就像盖房子一样,必须先打地基,然后再在上面做其他事情,范式就是这样。通过三大范式要求的数据,不仅能规范数据库的设定,还可以提高数据库检索效率。

下面展示设计的北京古城民宿管理系统的数据表结构。

表4.1 房间表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

shangjia_id

int(11)

商家

允许空

fangjian_name

varchar(200)

房间名称

允许空

fangjian_uuid_number

varchar(200)

房间编号

允许空

fangjian_photo

varchar(200)

房间照片

允许空

fangjian_address

varchar(200)

房间位置

允许空

zan_number

int(11)

允许空

cai_number

int(11)

允许空

fangjian_types

int(11)

房型

允许空

fangjian_kucun_number

int(11)

剩余房间数

允许空

fangjian_old_money

decimal(10,2)

房间原价

允许空

fangjian_new_money

decimal(10,2)

现价/间

允许空

fangjian_clicknum

int(11)

房间热度

允许空

fangjian_content

longtext

房间介绍

允许空

shangxia_types

int(11)

是否上架

允许空

fangjian_delete

int(11)

逻辑删除

允许空

insert_time

timestamp

录入时间

允许空

create_time

timestamp

创建时间

允许空

表4.2 房间咨询表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

yonghu_id

int(11)

提问人

允许空

shangjia_id

int(11)

回答人

允许空

fangjian_chat_issue_text

longtext

问题

允许空

issue_time

timestamp

问题时间

允许空

fangjian_chat_reply_text

longtext

回复

允许空

reply_time

timestamp

回复时间

允许空

zhuangtai_types

int(255)

状态

允许空

fangjian_chat_types

int(11)

数据类型

允许空

insert_time

timestamp

提问时间

允许空

create_time

timestamp

创建时间

允许空

表4.3 管理员表

字段

类型

说明

允许空

id (主键)

bigint(20)

主键

不允许空

username

varchar(100)

用户名

不允许空

password

varchar(100)

密码

不允许空

role

varchar(100)

角色

允许空

addtime

timestamp

新增时间

不允许空

表4.4 房间点评表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

fangjian_id

int(11)

房间

允许空

yonghu_id

int(11)

用户

允许空

fangjian_commentback_text

longtext

评价内容

允许空

insert_time

timestamp

评价时间

允许空

reply_text

longtext

回复内容

允许空

update_time

timestamp

回复时间

允许空

create_time

timestamp

创建时间

允许空

表4.5 房间预定表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

fangjian_order_uuid_number

varchar(200)

订单编号

允许空

fangjian_id

int(11)

房间

允许空

yonghu_id

int(11)

用户

允许空

buy_number

int(11)

预约房间数量

允许空

fangjian_order_time

date

预约日期

允许空

fangjian_order_true_price

decimal(10,2)

实付价格

允许空

fangjian_order_types

int(11)

订单类型

允许空

fangjian_order_payment_types

int(11)

支付类型

允许空

insert_time

timestamp

订单创建时间

允许空

create_time

timestamp

创建时间

允许空

表4.6 游记攻略表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

yonghu_id

int(11)

用户

允许空

gonglve_name

varchar(200)

游记攻略标题

允许空

gonglve_uuid_number

varchar(200)

游记攻略编号

允许空

gonglve_photo

varchar(200)

游记攻略照片

允许空

gonglve_address

varchar(200)

游玩位置

允许空

gonglve_biaoqian

varchar(200)

标签

允许空

gonglve_file

varchar(200)

攻略附件

允许空

zan_number

int(11)

允许空

cai_number

int(11)

允许空

gonglve_types

int(11)

游记攻略类型

允许空

gonglve_content

longtext

游记攻略内容

允许空

insert_time

timestamp

发布时间

允许空

create_time

timestamp

创建时间

允许空

表4.7 游记攻略点评表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

gonglve_id

int(11)

游记攻略

允许空

yonghu_id

int(11)

用户

允许空

gonglve_liuyan_text

longtext

留言内容

允许空

insert_time

timestamp

留言时间

允许空

reply_text

longtext

回复内容

允许空

update_time

timestamp

回复时间

允许空

create_time

timestamp

创建时间

允许空

表4.8 古城推荐表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

guchengtuijian_name

varchar(200)

古城标题

允许空

guchengtuijian_uuid_number

varchar(200)

古城推荐编号

允许空

guchengtuijian_photo

varchar(200)

古城照片

允许空

guchengtuijian_address

varchar(200)

古城位置

允许空

guchengtuijian_file

varchar(200)

古城资料

允许空

zan_number

int(11)

允许空

cai_number

int(11)

允许空

guchengtuijian_types

int(11)

古城类型

允许空

guchengtuijian_xingji_types

int(11)

推荐星级

允许空

guchengtuijian_content

longtext

古城介绍

允许空

shangxia_types

int(11)

是否上架

允许空

guchengtuijian_delete

int(11)

逻辑删除

允许空

insert_time

timestamp

上传时间

允许空

create_time

timestamp

创建时间

允许空

表4.9 古城留言表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

guchengtuijian_id

int(11)

古城推荐

允许空

yonghu_id

int(11)

用户

允许空

guchengtuijian_liuyan_text

longtext

留言内容

允许空

insert_time

timestamp

留言时间

允许空

reply_text

longtext

回复内容

允许空

update_time

timestamp

回复时间

允许空

create_time

timestamp

创建时间

允许空

表4.10 用户表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

username

varchar(200)

账户

允许空

password

varchar(200)

密码

允许空

yonghu_uuid_number

varchar(200)

用户编号

允许空

yonghu_name

varchar(200)

用户姓名

允许空

yonghu_phone

varchar(200)

用户手机号

允许空

yonghu_id_number

varchar(200)

用户身份证号

允许空

yonghu_photo

varchar(200)

用户头像

允许空

sex_types

int(11)

性别

允许空

yonghu_email

varchar(200)

用户邮箱

允许空

new_money

decimal(10,2)

余额

允许空

jinyong_types

int(11)

账户状态

允许空

create_time

timestamp

创建时间

允许空

表4.11 网站活动表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

huodong_name

varchar(200)

活动标题

允许空

huodong_uuid_number

varchar(200)

网站活动编号

允许空

huodong_photo

varchar(200)

活动照片

允许空

huodong_address

varchar(200)

活动地点

允许空

zan_number

int(11)

允许空

cai_number

int(11)

允许空

huodong_types

int(11)

活动类型

允许空

kaishi_time

timestamp

活动开始时间

允许空

jieshu_time

timestamp

活动结束时间

允许空

huodong_content

longtext

活动内容

允许空

shangxia_types

int(11)

是否上架

允许空

huodong_delete

int(11)

逻辑删除

允许空

insert_time

timestamp

上传时间

允许空

create_time

timestamp

创建时间

允许空

表4.12 活动留言表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

huodong_id

int(11)

网站活动

允许空

yonghu_id

int(11)

用户

允许空

huodong_liuyan_text

longtext

留言内容

允许空

insert_time

timestamp

留言时间

允许空

reply_text

longtext

回复内容

允许空

update_time

timestamp

回复时间

允许空

create_time

timestamp

创建时间

允许空

表4.13 商家表

字段

类型

说明

允许空

id (主键)

int(11)

主键

不允许空

username

varchar(200)

账户

允许空

password

varchar(200)

密码

允许空

shangjia_name

varchar(200)

商家名称

允许空

shangjia_phone

varchar(200)

联系方式

允许空

shangjia_email

varchar(200)

邮箱

允许空

shangjia_photo

varchar(200)

营业执照展示

允许空

shangjia_xingji_types

int(11)

商家信用类型

允许空

new_money

decimal(10,2)

现有余额

允许空

shangjia_content

longtext

商家介绍

允许空

shangjia_delete

int(11)

逻辑删除

允许空

jinyong_types

int(11)

账户状态

允许空

create_time

timestamp

创建时间

允许空

5 系统实现

系统实现就是把项目的功能点准确清晰的描述起来。对项目的功能设计和数据库表的设计,只是概念性设计的一个阶段,系统实现则是对所有设计好的功能的具体呈现。当设计变成现实可操作的功能,就需要用文字与图片的形式对应起来,这样可以更直观的感受系统实现的具体操作。

5.1 管理员功能实现

5.1.1 网站活动管理

网站活动管理界面如图5.1所示。

图5.1 网站活动管理界面

网站活动管理包括的基本信息有活动地点,活动开始时间,活动标题等信息。作为管理员,其可以在网站活动管理界面下架网站活动,删除,修改网站活动信息等。

5.1.2 活动留言管理

活动留言管理界面如图5.2所示。

图5.2 活动留言管理界面

活动留言管理包括的基本信息有留言内容,用户姓名,活动标题等信息。作为管理员,其可以在活动留言管理界面回复用户对活动信息提交的留言。

5.1.3 古城推荐管理

古城推荐管理界面如图5.3所示。

图5.3 古城推荐管理界面

古城推荐管理包括的基本信息有古城资料,古城照片,推荐星级等信息。作为管理员,其可以在古城推荐管理界面下架古城推荐信息,删除,修改古城推荐信息。

5.1.4 游记攻略管理

游记攻略管理界面如图5.4所示。

图5.4 游记攻略管理界面

游记攻略管理包括的信息有游玩位置,攻略附件,标签,游记攻略标题等信息。作为管理员,其需要在游记攻略管理界面新增游记攻略,修改,删除游记攻略信息等。

5.1.5 房间咨询管理

房间咨询管理界面如图5.5所示。

图5.5 房间咨询管理界面

房间咨询管理包括的基本信息有新消息,状态,发送时间等信息,作为管理员,其可以在房间咨询管理界面回复用户咨询房间的信息。

5.2 商家功能实现

5.2.1 房间管理

房间管理界面如图5.6所示。

图5.6 房间管理界面

商家在房间管理界面可以修改房间位置,房型,房间热度,房间原价等信息,可以删除房间信息,下架房间。

5.2.2 房间点评管理

房间点评管理界面如图5.7所示。

图5.7 房间点评管理界面

商家在房间点评管理界面除了可以查看用户评价房间的信息,还可以点击右侧的“回复”按钮对该评价进行回复。

5.3 用户功能实现

5.3.2 房间信息

房间信息界面如图5.10所示。

图5.10 房间信息界面

用户在房间信息界面可以预定房间,可以点击“房间咨询”按钮向房间所属商家进行咨询,可以查看房间所属的商家的具体信息等。

JAVA后端代码实现

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.MD5Util;
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();
    }
}

源码获取

大家点赞、收藏、关注 ,让更多需要的同学看到

不同开发语言专栏推荐订阅

 🔎​百套小程序APP项目实战持续更新中~​

🔎​千套JAVA项目实战持续更新中~​

🔎​百套Python实战项目持续更新中~​

👇下方有我的微信名片👇

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值