SSM 酒店管理系统

一级目录

1、项目介绍

基于SSM的酒店管理系统拥有两种角色,分别为用户和管理员,具体功能如下:

用户:条件查询房间信息、预订房间、个人中心、查看订单

管理员:用户管理、楼层管理、房型管理、客户管理、预订管理、入住管理、营业统计等

2、项目技术

后端框架:SSM(Spring、SpringMVC、Mybatis)

前端框架:layui、jsp、css、JavaScript、JQuery

3、开发环境

JAVA版本:JDK1.8

tomcat版本:Tomcat 7.x、8.x、9.x、10.x版本均可

数据库版本:MySql 5.x

硬件环境:Windows 或者 Mac OS

4、功能介绍

4.1 项目结构图

在这里插入图片描述

4.2 项目部分结果展示

4.2.1 用户与管理登录界面
4.2.2 前台房间预定与列表

在这里插入图片描述

房间列表
在这里插入图片描述
前台预定界面
在这里插入图片描述

4.2.3 后台管理界面展示

员工管理界面
员工管理界面


部门管理界面部门管理界面

房型管理界面
在这里插入图片描述


楼层管理界面
在这里插入图片描述

5. 部分功能的实现

5.1 部门管理功能

<%--
  Created by IntelliJ IDEA.
  User: wmz
  Date: 2022/9/3
  Time: 20:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/lib/layui-v2.6.3/css/layui.css" media="all">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
    <div class="layuimini-main">
        <%--条件搜索区域--%>
        <fieldset class="table-search-fieldset">
            <legend>搜索信息</legend>
            <div style="margin: 10px 10px 10px 10px">
                <form class="layui-form layui-form-pane" action="">
                    <div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label">部门名称</label>
                            <div class="layui-input-inline">
                                <input type="text" name="deptName" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button type="submit" class="layui-btn"  lay-submit lay-filter="data-search-btn"><i class="layui-icon layui-icon-search"></i>搜索</button>
                            <button type="reset" class="layui-btn layui-btn-warm"><i class="layui-icon layui-icon-refresh-1"></i>重置</button>
                        </div>
                    </div>
                </form>
            </div>
        </fieldset>
        <%-- 添加--%>
        <script type="text/html" id="toolbarDemo">
            <div class="layui-btn-container">
                <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
            </div>
        </script>
        <%--表格--%>
        <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
            <%-- 行工具栏区域 --%>
            <script type="text/html" id="currentTableBar">
                <a class="layui-btn layui-btn-xs data-count-edit" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
                <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete"><i class="layui-icon layui-icon-delete"></i>删除</a>
            </script>

            <%-- 添加和修改窗口 --%>
            <div style="display: none;padding: 5px" id="addOrUpdateWindow">
                <form class="layui-form" style="width:90%;" id="dataFrm" lay-filter="dataFrm">
                    <div class="layui-form-item">
                        <label class="layui-form-label">部门名称</label>
                        <div class="layui-input-block">
                            <%-- 隐藏域 --%>
                            <input type="hidden" name="id">
                            <input type="text" name="deptName" lay-verify="required" autocomplete="off"
                                   placeholder="请输入部门名称" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">部门地址</label>
                        <div class="layui-input-block">
                            <input type="text" name="address" lay-verify="required" autocomplete="off" placeholder="请输入部门地址"
                                   class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">部门备注</label>
                        <div class="layui-input-block">
                            <textarea class="layui-textarea" name="remark" id="content"></textarea>
                        </div>
                    </div>
                    <div class="layui-form-item layui-row layui-col-xs12">
                        <div class="layui-input-block" style="text-align: center;">
                            <button type="button" class="layui-btn" lay-submit lay-filter="doSubmit"><span
                                    class="layui-icon layui-icon-add-1"></span>提交
                            </button>
                            <button type="reset" class="layui-btn layui-btn-warm"><span
                                    class="layui-icon layui-icon-refresh-1"></span>重置
                            </button>
                        </div>
                    </div>
                </form>
            </div>
    </div>
</div>
<script src="${pageContext.request.contextPath}/statics/layui/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
    layui.use(['form', 'table','layer'], function () {
        var $ = layui.jquery,
            form = layui.form,
            layer = layui.layer,
            table = layui.table;

      var tableIns= table.render({
            elem: '#currentTableId',
            url: '${pageContext.request.contextPath}/admin/dept/list',
            toolbar: '#toolbarDemo',

            cols: [[
                {field: 'id', width: 200, title: '部门编号', align: "center"},
                {field: 'deptName', minWidth: 200, title: '部门名称', align: "center"},
                {field: 'address', minWidth: 200, title: '部门地址', align: "center"},
                {field: 'createDate', minWidth: 200, title: '部门创建时间', align: "center"},
                {field: 'remark', minWidth: 200, title: '备注', align: "center"},
                {title: '操作', minWidth: 200, toolbar: '#currentTableBar', align: "center"}
            ]],
            page: true,
            done: function (res, curr, count) {
              //判断当前页码是否是大于1并且当前页的数据量为0
              if (curr > 1 && res.data.length == 0) {
                  var pageValue = curr - 1;
                  //刷新数据表格的数据
                  tableIns.reload({
                      page: {curr: pageValue}
                  });
              }
          }
        });

        // 监听搜索操作
        form.on('submit(data-search-btn)', function (data) {
            //执行搜索重载
            tableIns.reload( {
                where:data.field,
                page: {
                    curr: 1
                }
            });
            return false;
        });

        /**
         * toolbar监听事件
         */
        //监听头部工具栏事件
        //toolbar是头部工具栏事件

        //currentTableFilter是表格lay-filter过滤器的值
        table.on("toolbar(currentTableFilter)",function (obj) {
            switch (obj.event) {
                case "add"://添加按钮
                    openAddWindow();//打开添加窗口
                    break;
            }
        });
        //监听行工具栏事件
        table.on("tool(currentTableFilter)",function (obj) {
            console.log(obj);
            switch (obj.event) {
                case "edit"://编辑按钮
                    openUpdateWindow(obj.data);//打开修改窗口
                    break;
                case "delete"://删除按钮
                    deleteById(obj.data);
                    break;
            }
        });

        var url;//提交地址
        var mainIndex;//打开窗口的索引
        /**
         * 打开添加窗口
         */
        function openAddWindow() {
            mainIndex = layer.open({
                type: 1,//打开类型
                title: "添加部门",//窗口标题
                area: ["800px", "400px"],//窗口宽高
                content: $("#addOrUpdateWindow"),//引用的内容窗口
                success: function () {
                    //清空表单数据
                    $("#dataFrm")[0].reset();
                    //添加的提交请求
                    url = "/admin/dept/addDept";
                }
            });
        }

        /**
         * 打开修改窗口
         * @param data  当前行的数据
         */
        function openUpdateWindow(data) {
            mainIndex = layer.open({
                type: 1,//打开类型
                title: "修改部门",//窗口标题
                area: ["800px", "400px"],//窗口宽高
                content: $("#addOrUpdateWindow"),//引用的内容窗口
                success: function () {
                    //表单数据回显
                    form.val("dataFrm",data);//参数1:lay-filter值  参数2:回显的数据
                    //修改的提交请求
                    url = "/admin/dept/updateDept";
                }
            });
        }

        /**
         * 删除部门
         * @param data  当前行数据
         */
        function deleteById(data) {
            //判断当前部门下是否存在员工
            $.get("/admin/dept/checkDeptHasEmployee",{"id":data.id},function(result){
                if(result.exist){
                    //提示用户无法删除
                    layer.msg(result.message);
                }else{
                    //提示用户是否删除该部门
                    layer.confirm("确定要删除[<font color='red'>"+data.deptName+"</font>]", {icon: 3, title:'提示'}, function(index){
                        //发送ajax请求进行删除
                        $.post("/admin/dept/deleteById",{"id":data.id},function(result){
                            if(result.success){
                                //刷新数据表格
                                tableIns.reload();
                            }
                            //提示
                            layer.msg(result.message);
                        },"json");
                        layer.close(index);
                    });
                }
            },"json");
        }


        //监听表单提交事件
        form.on("submit(doSubmit)",function (data) {
            $.post(url,data.field,function(result){
                if(result.success){
                    //刷新数据表格
                    tableIns.reload();
                    //关闭窗口
                    layer.close(mainIndex);
                }
                //提示信息
                layer.msg(result.message);
            },"json");
            //禁止页面刷新
            return false;
        });

    });

</script>

</body>
</html>

DeptMapper

package com.wmz.Mapper;

import com.wmz.Pojo.Dept;
import com.wmz.vo.DeptVo;

import java.util.List;

public interface DeptMapper {
   List<Dept> findDeptListByPage(DeptVo deptVo);
   //添加部门
   int addDept(Dept dept);

   /**
    * 修改部门
    * @param dept
    * @return
    */
   int updateDept(Dept dept);

   //删除部门
   int deleteById(int id);
}

DeptService、DeptServiceImpl

package com.wmz.Service;

import com.wmz.Pojo.Dept;
import com.wmz.vo.DeptVo;

import java.util.List;

public interface DeptService {
    List<Dept> findDeptListByPage(DeptVo deptVo);
    //    添加部门
    int addDept(Dept dept);

    //修改部门
    int updateDept(Dept dept);

    //删除部门
    int deleteById(int id);
}
package com.wmz.Service.impl;

import com.wmz.Mapper.DeptMapper;
import com.wmz.Pojo.Dept;
import com.wmz.Service.DeptService;
import com.wmz.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
@Transactional
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> findDeptListByPage(DeptVo deptVo) {
        return deptMapper.findDeptListByPage(deptVo);
    }

    @Override
    public int addDept(Dept dept) {
        dept.setCreateDate(new Date());
        return deptMapper.addDept(dept);
    }

    @Override
    public int updateDept(Dept dept) {
        return deptMapper.updateDept(dept);
    }

    @Override
    public int deleteById(int id) {
        return deptMapper.deleteById(id);
    }
}

DeptController.java

package com.wmz.Controller.admin;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wmz.Pojo.Dept;
import com.wmz.Service.DeptService;
import com.wmz.Utils.DataGridViewResult;
import com.wmz.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/admin/dept")
public class DeptController {
    @Autowired
    private DeptService deptService;

    @RequestMapping("/list")
    //查询部门列表
    public DataGridViewResult list(DeptVo deptVo){
        //分页信息
        PageHelper.startPage(deptVo.getPage(),deptVo.getLimit());
        //调用分页查询方法
        List<Dept> deptList = deptService.findDeptListByPage(deptVo);
       //分页对象
        PageInfo<Dept> pageInfo=new PageInfo<Dept>(deptList);
        return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
    }

    //添加部门
    @RequestMapping("/addDept")
    public String addDept(Dept dept){
        Map<String,Object> map = new HashMap<String,Object>();
        //调用添加部门的方法
        if(deptService.addDept(dept)>0){
            map.put("success",true);//成功
            map.put("message","添加成功");
        }else{
            map.put("success",false);//失败
            map.put("message","添加失败");
        }
        //将map集合以JSON格式返回
        return JSON.toJSONString(map);
    }

    //修改部门
    @RequestMapping("/updateDept")
    public String updateDept(Dept dept){
        Map<String,Object> map = new HashMap<String,Object>();
        if(deptService.updateDept(dept)>0){
            map.put("success",true);//成功
            map.put("message","修改成功");
        }else{
            map.put("success",false);//失败
            map.put("message","修改失败");
        }
        //将map集合以JSON格式返回
        return JSON.toJSONString(map);
    }

    /**
     * 检查该部门下是否存在员工信息
     * @param 
     * @return
     */
    public String SelectEmployee(){
        return null;
    }

    /**
     * 删除部门
     * @param id
     * @return
     */
    @RequestMapping("/deleteById")
    public String deleteById(Integer id){
        Map<String,Object> map = new HashMap<String,Object>();
        //调用删除部门的方法
        if(deptService.deleteById(id)>0){
            map.put("success",true);//成功
            map.put("message","删除成功");
        }else{
            map.put("success",false);//失败
            map.put("message","删除失败");
        }
        return JSON.toJSONString(map);
    }
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--这是执行sql语句的配置文件-->
<mapper namespace="com.wmz.Mapper.DeptMapper">
    <select id="findDeptListByPage" resultType="com.wmz.Pojo.Dept">
        select *from sys_dept
        <where>
            <if test="deptName !=null and deptName!=''">
                and deptName like concat('%',#{deptName},'%')
            </if>
        </where>
    </select>
<!---->
    <insert id="addDept">
        insert into sys_dept (deptName,address,createDate,remark) values(#{deptName},#{address},#{createDate},#{remark})
    </insert>
    <!--  修改-->
    <update id="updateDept">
        update sys_dept
        <set>
            <if test="deptName!=null and deptName!=''">
                deptName = #{deptName},
            </if>

            <if test="address !=null and address !=''">
                address = #{address},
            </if>

            <if test="createDate !=null and createDate !=''">
                createDate = #{createDate},
            </if>

            <if test="remark!=null and remark !=''">
                remark = #{remark},
            </if>
        </set>
        where id = #{id}
    </update>

    <delete id="deleteById">
       delete from sys_dept where id = #{id}
    </delete>
</mapper>
  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
1,项目功能:     (1)房间管理:该模块主要实现房间信息的查询,房间信息的删除,房间信息的修改以及房间信息的查看。管理员可以在系统中查看房间列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改内容修改完后,点击提交按钮完成修改操作,用户也可以根据列表中的删除按钮把对应信息删除,通过点击添加按钮,进入添加页面,填入添加的信息,完成添加。(2)预定管理:该模块主要实现房间预定信息的添加,删除,修改和查看功能。管理员可以查看房间预定列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改内容修改完后,点击提交按钮完成修改操作,用户也可以根据列表中的删除按钮把对应信息删除,通过点击添加按钮,进入添加页面,填入添加的信息,完成添加。(3)退房管理:主要实现退房和查看退房记录信息功能。管理员可以查看客户的退房记录信息,也可以对提出退房的客户,进行退房操作。(4)入住管理:主要实现入住记录查询,入住记录添加,入住记录修改以及入住记录删除功能。管理员可以查看房间入住列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改内容修改完后,点击提交按钮完成修改操作,用户也可以根据列表中的删除按钮把对应信息删除,通过点击添加按钮,进入添加页面,填入添加的信息,完成添加。(5)收入记录:该模块中主要实现收入记录的添加,修改和查看功能。管理员可以查看收入的详细信息,并对收入信息进行核对,把不合理和需要更新的数据进行修改,把没有入账的收入记录,添加到数据库中。(6)入住统计:主要实现入住数据统计和收入数据统计功能。管理员可以查看所有入住信息的统计数据和收入的统计数据,并以图表的形式展现出来。(7)客户管理:主要对客户信息进行添加,修改,删除和查看操作。管理员可以查看客户列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改内容修改完后,点击提交按钮完成修改操作,用户也可以根据列表中的删除按钮把对应信息删除,通过点击添加按钮,进入添加页面,填入添加的信息,完成添加。(8)员工管理:主要对员工信息进行添加,修改,删除和查看操作。管理员可以查看员工列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改内容修改完后,点击提交按钮完成修改操作,用户也可以根据列表中的删除按钮把对应信息删除,通过点击添加按钮,进入添加页面,填入添加的信息,完成添加。(9)系统设置:主要实现权限管理和数据备份功能。      适合做毕业设计参考项目。2,涉及技术:SSM框架,Tomcat3,开发环境:IDEA,MySQL数据库4,讲解方式:从环境安装,项目搭建,以及项目介绍等进行讲解5,包含资料:项目源码(含数据库文件),环境安装包,项目文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值