JavaWeb酒店管理系统

news2025/2/23 7:11:02

  酒店管理系统   

一、项目介绍

1、项目用到的技术栈

  • 开发工具:idea
  • 语言:java、js、html+ajax
  • 数据库:MySQL
  • 服务器:Tomcat
  • 框架:mybatis、jQuery

2、项目实现功能

  • 管理员和用户登录和退出功能以及用户注册功能(根据不同的账号密码进入不同的页面,注册页面以及登录都有校验)
  • 用户可以预定房间,可以查看预定完房间的基本信息
  • 管理员和用户可以查看个人信息,并且可以修改个人信息(修改时支持信息回显)
  • 管理员和用户可以通过模糊查询和多条件查询
  • 管理员可以对房间进行增删改查(增删房型,增删改查房间)
  • 所有删除均使用逻辑删除(修改字段即可)

二、项目展示

1、用户和管理员登录界面以及用户注册界面

(1)用户登录

(2)管理员登录界面

 (3)用户注册界面

 2、用户可实现功能

(1)用户界面首页

 (2)用户预定房间

 (3)用户个人订单(房间预定时间过期显示已超时)

(4)用户个人信息以及修改个人信息(修改时信息回显)

 

 3、管理员可实现功能   

(1)管理员界面首页           

(2)管理员增加新房型

 (3)管理员查看顾客信息   

 (4)管理员查看顾客预定房间信息

(5)管理员个人信息及修改个人信息(修改时信息回显)

                                                                                                                   三、项目代码 

(1)项目基本结构

 

(2)数据库表

(3)Servlet层中loginServlet代码                                                                                 

package com.servlet;

import com.alibaba.fastjson.JSON;
import com.bean.Admin;
import com.bean.Customer;
import com.service.AdminService;
import com.service.CustomerService;
import com.util.CheckCodeUtil;

import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;
import java.util.List;

@WebServlet("/login/*")
public class LoginServlet extends BaseServlet {

    private CustomerService serviceCustomer = new CustomerService();
    private AdminService serviceAdmin = new AdminService();

    /**
     * 顾客/用户登录
     *
     * @param req
     * @param res
     * @throws Exception
     */
    public void logCustomer(HttpServletRequest req, HttpServletResponse res) throws Exception {

        // 解决 get 中文乱码问题
        String username = req.getParameter("username");
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        // 获取用户名和密码
        String password = req.getParameter("password");
        // 调用 service 注册
        Customer customer = serviceCustomer.login(username, password);
        if (customer != null) {
            // 将登录成功后的user对象存储到session中
            HttpSession session = req.getSession();
            session.setAttribute("customer", customer);
            res.sendRedirect("/room/customerRoomOperate");
        } else {
            req.setAttribute("login_msg", "用户名或密码错误");
            req.getRequestDispatcher("/userLogin.jsp").forward(req, res);
        }


    }

    /**
     * 管理员登录
     *
     * @param req
     * @param res
     * @throws Exception
     */

    public void logAdmin(HttpServletRequest req, HttpServletResponse res) throws Exception {
        // 获取用户名和密码
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        // 调用 service 注册
        Admin admin = serviceAdmin.login(username, password);

        if (admin != null) {
            HttpSession session = req.getSession();
            session.setAttribute("admin", admin);
            res.sendRedirect("/room/adminRoomOperate");
        } else {
            req.setAttribute("login_msg", "用户名或密码错误");
            req.getRequestDispatcher("/adminLogin.jsp").forward(req, res);
        }
    }

    /**
     * 顾客/用户注册
     *
     * @param req
     * @param res
     * @throws Exception
     */

    public void registerCustomer(HttpServletRequest req, HttpServletResponse res) throws Exception {
        // 解决乱码问题: POST
        req.setCharacterEncoding("UTF-8"); // 设置字符输入流的编码
        // 解决乱码问题: GET
        // String username = req.getParameter("username");
        // new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

        // 获取用户名、密码、性别、电话号、身份证号
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String gender = req.getParameter("gender");
        String telephone = req.getParameter("telephone");
        String identity = req.getParameter("identity");

        // 调用 service 注册
        Customer customer = new Customer();
        customer.setUsername(username);
        customer.setPassword(password);
        customer.setGender(gender);
        customer.setTelephone(telephone);
        customer.setIdentity(identity);

        // 获取用户输入的验证码
        String checkCode = req.getParameter("checkCode");

        // 获取程序生成的验证码,从 Session 中获取
        HttpSession session = req.getSession();
        String checkCodeGen = (String) session.getAttribute("checkCodeGen");

        // 比对客户输入的验证码和程序生成的验证码
        if (!checkCodeGen.equalsIgnoreCase(checkCode)) { // 不相等时,不允许注册,直接 return ,如果相等,向下执行、
            // 如果比对不成功,返回到注册页面
            req.setAttribute("register_msg", "验证码错误");
            req.getRequestDispatcher("/register.jsp").forward(req, res);
            // 不允许注册
            return;
        }
        boolean flag = serviceCustomer.register(customer);

        //  判断注册成功与否
        if (flag && username != "" && password != "" && telephone != "" && identity != "" && gender != "") {
            // 注册成功,跳转登录页面
            req.setAttribute("register_msg", "注册成功,请登录");
            req.getRequestDispatcher("/userLogin.jsp").forward(req, res);
        } else {
            // 注册失败,跳转注册页面
            req.setAttribute("register_msg", "用户名已存在或者信息没有全部填写");
            req.getRequestDispatcher("/register.jsp").forward(req, res);
        }
    }

    /**
     * 顾客/用户注册时生成验证码
     *
     * @param req
     * @param res
     * @throws Exception
     */

    public void CheckCode(HttpServletRequest req, HttpServletResponse res) throws Exception {

        // 生成验证码
        ServletOutputStream os = res.getOutputStream(); // res 的字节输出流
        String checkCode = CheckCodeUtil.outputVerifyImage(100, 50, os, 4);

        // 存入 Session 中
        HttpSession session = req.getSession();
        session.setAttribute("checkCodeGen", checkCode);


    }


    /**
     * 查询顾客的个人信息
     *
     * @param req
     * @param res
     * @throws Exception
     */
    public void customerInformation(HttpServletRequest req, HttpServletResponse res) throws Exception {
        int id = Integer.parseInt(req.getParameter("id"));
        Customer customer = serviceCustomer.selectAll(id);
        res.setContentType("text/json;charset=utf-8");
        String jsonString = JSON.toJSONString(customer);
        res.getWriter().write(jsonString);
    }

    /**
     * 查询管理员的个人信息
     *
     * @param req
     * @param res
     * @throws Exception
     */
    public void adminInformation(HttpServletRequest req, HttpServletResponse res) throws Exception {
        int id = Integer.parseInt(req.getParameter("id"));
        Admin admin = serviceAdmin.selectAll(id);
        res.setContentType("text/json;charset=utf-8");
        String jsonString = JSON.toJSONString(admin);
        res.getWriter().write(jsonString);
    }



    /**
     * 修改顾客个人信息
     *
     * @param req
     * @param res
     * @throws Exception
     */
    public void customerRevise(HttpServletRequest req, HttpServletResponse res) throws Exception {

        // 解决乱码问题: GET
        String gender = req.getParameter("gender");
        gender = new String(gender.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

        String username = req.getParameter("username");
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        String password = req.getParameter("password");
        String telephone = req.getParameter("telephone");
        String identity = req.getParameter("identity");
        int Id = Integer.parseInt(req.getParameter("id"));

        serviceCustomer.revise(username, password, telephone, identity, gender, Id);

        res.setContentType("text/json;charset=utf-8");
        res.getWriter().write("修改成功~");
        res.sendRedirect("http://localhost:8080/userLogin.jsp");
    }


    /**
     * 修改顾客个人信息
     * @param req
     * @param res
     * @throws Exception
     */
    public void adminRevise(HttpServletRequest req, HttpServletResponse res) throws Exception {

        // 解决乱码问题: GET
        String username = req.getParameter("username");
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        String password = req.getParameter("password");
        int Id = Integer.parseInt(req.getParameter("id"));

        serviceAdmin.revise(username,password,Id);

        res.setContentType("text/json;charset=utf-8");
        res.getWriter().write("修改成功~");
        res.sendRedirect("http://localhost:8080/adminLogin.jsp");
    }


    /**
     * 管理员查询所有顾客信息
     * @param req
     * @param res
     * @throws Exception
     */
    public void selectAllCustomer(HttpServletRequest req, HttpServletResponse res) throws Exception {
        List<Customer> customers = serviceCustomer.selectAllCustomer();
        res.setContentType("text/json;charset=utf-8");
        String jsonString = JSON.toJSONString(customers);
        res.getWriter().write(jsonString);
    }


    /**
     * 逻辑删除顾客全部信息
     * @param req
     * @param res
     * @throws Exception
     */
    public void deleteCustomerInformation(HttpServletRequest req, HttpServletResponse res) throws Exception{
        int id = Integer.parseInt(req.getParameter("id"));
        serviceCustomer.deleteCustomerInformation(id);
        res.setContentType("text/json;charset=utf-8");
        res.getWriter().write("删除成功~");
    }


    /**
     * 顾客退出登录
     * @param req
     * @param res
     * @throws Exception
     */
    public void customerLogOut(HttpServletRequest req, HttpServletResponse res) throws Exception{
//        System.out.println(req.getSession().getAttribute("customer").toString());
        req.getSession().removeAttribute("customer");
        res.sendRedirect("/userLogin.jsp");
    }


    /**
     * 管理员退出登录
     * @param req
     * @param res
     * @throws Exception
     */
    public void adminLogOut(HttpServletRequest req, HttpServletResponse res) throws Exception{
//        System.out.println(req.getSession().getAttribute("admin").toString());
        req.getSession().removeAttribute("admin");
        res.sendRedirect("/adminLogin.jsp");
    }



}

下面附上源码,有需要的小伙伴可以下载

链接: https://pan.baidu.com/s/18Nd_HU4GUY4_kito_Mdf7Q?pwd=dzma

提取码: dzma 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第二趴】uni-app开发工具(手把手带你安装HBuilderX、搭建第一个多端项目初体验)

文章目录写在前面HBuilderXHBuilderX 优势HBuilderX 安装uni-app 初体验写在最后写在前面 聚沙成塔——每天进步一点点&#xff0c;大家好我是几何心凉&#xff0c;不难发现越来越多的前端招聘JD中都加入了uni-app 这一项&#xff0c;它也已经成为前端开发者不可或缺的一项技能…

Eolink 治愈了后端开发者的痛

一、前后端的爱恨情仇 最近公司的一个前端同事和一个后端同事吵了一架&#xff0c;事情大概是这样的。后端说要联调接口&#xff0c;前端说你的数据尽量按我的要求来&#xff0c;后端不干&#xff0c;说你这个没用。前端就讲道理呀&#xff0c;传统的前后端分离返回的格式要尽…

【node进阶】深入浅出websocket即时通讯(二)-实现简易的群聊私聊

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 &#x1f525; 系列专栏 &#xff1a; node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&a…

保姆级教程:Ant Design Vue中 a-table 嵌套子表格

前端为Ant Design Vue 版本为1.6.2&#xff0c;使用的是vue2 Ant Design Vue中 a-table 嵌套子表格&#xff0c;说的可能稍微墨迹了点&#xff0c;不过重点内容都说的比较详细&#xff0c;利于新人理解&#xff0c;高手可以自取完整代码 内容概述&#xff1a;完成样式及完整代…

在收到消息后秒级使网站变灰,不改代码不上线,如何实现?

注意&#xff1a;文本不是讲如何将网站置灰的那个技术点&#xff0c;那个技术点之前汶川地震的时候说过。 本文不讲如何实现技术&#xff0c;而是讲如何在第一时间知道消息后&#xff0c;更快速的实现这个置灰需求的上线。 实现需求不是乐趣&#xff0c;指挥别人去实现需求才…

[Vue warn]: Error in render: “TypeError: Cannot read properties of undefined(reading“category1Name“

明明页面正常显示&#xff0c;但是控制台却一直报 如下 错误 [Vue warn]:渲染错误:"TypeError:无法读取未定义的属性(读取category1Name)" 中发现的 Detail 的 vuex 仓库 import { reqDetail } from "/api" export default{actions:{async getDetail({co…

【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”

此文为【前端修炼场】第四篇&#xff0c;上一篇文章链接&#xff1a;上一篇 文章目录前言一、 常用标识符1.1 特殊标识符1.1.1 "<" 和 ">"&#xff08;<&#xff1b;&#xff09;1.1.2 空格&#xff08;&emsp&#xff1b;&#xff09;1.1.3 商…

uniapp微信小程序无法使用本地静态资源图片,背景图在真机不显示方法

前言 首先要说明&#xff0c;使用HBuilder或者vs Code工具开发的时候&#xff0c;在微信开发者工具调试的时候&#xff0c;我们使用本地图片是OK的&#xff0c;但是一旦放到真机上调试的时候&#xff0c;图片就显示不出来。 先看uniapp官网对背景图片的说明 错误用法 <tem…

uniapp 微信小程序和H5的弹窗滚动穿透解决

滚动穿透&#xff1a; 页面里的弹窗也是可以滚动的&#xff0c;然后页面本身内容多所以也是滚动的&#xff0c;就造成&#xff0c;在弹窗滚动的时候&#xff0c;页面内容也跟着滚动了。如图所示 ps: 电脑端分鼠标滚轮滚动和长按鼠标拖拽滚动&#xff0c;手机端只有触屏滑屏滚…

视频实时行为检测——基于yolov5+deepsort+slowfast算法

文章目录前言一、核心功能设计二、核心实现步骤1.yolov5实现目标检测2.deepsort实现目标跟踪3.slowfast动作识别三、核心代码解析1.参数2.主函数3.将结果保存成视频总结前言 前段时间打算做一个目标行为检测的项目&#xff0c;翻阅了大量资料&#xff0c;也借鉴了不少项目&…

【Java】运算符

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程 —— 汪国真 目录 1. 认识运算符 1.1 认识运算符 1.2 运算符的分类 2. 算术运算符 2.1 四则运算符 2.2 复合赋值运算符 2.3 自增 / 自减 运算符 3.关系运算符 4.逻辑运算符 4.1 逻辑与 && 4.2 逻…

什么是异步

文章目录 前言一、异步是什么&#xff1f;二、举个例子来理解异步 1.异步最典型的例子就是“回调函数”总结前言 在vue的过程中&#xff0c;我们一定会遇到诸如&#xff1a; function&#xff08;参数&#xff09;.then(res>{}) 形式的代码。到底怎么编译执行的呢 &#xf…

【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

文章目录一、Activity 遇到的问题二、视图 View 和 数据模型 Model三、ViewModel 架构组件作用四、ViewModel 代码示例1、ViewModel 视图模型2、Activity 组件3、UI 布局文件4、运行效果五、ViewModel 生命周期六、ViewModel 使用注意事项一、Activity 遇到的问题 Activity 遇到…

宝塔部署nodejs项目

前言 部署操作很简单&#xff0c;网上也有很多教程&#xff0c;不过我还是踩坑了&#xff0c;这里记录一下&#xff0c;给其他人也避避坑吧。 步骤 首先你已经有了服务器&#xff0c;并且打开了宝塔面板&#xff0c;其次准备好你的nodejs项目。 在宝塔安装pm2管理器&#xf…

Nginx 调整文件上传大小限制

使用3A服务器做了网页&#xff0c;感觉挺不错的&#xff0c;使用LNMP环境 用Nginx部署了前端&#xff0c;发现上传附件大一点就会报错&#xff0c;查看配置文件&#xff0c;发现spring的附件配置已经配置了。那么就看下Nginx的body设置。nginx文件上传默认是1MB。 在 server 模…

VUE3TS: Vue3+TS的项目搭建

简介 通过 Vue-cli4 创建的 Vue3TS 的项目&#xff0c;并进行一些基础使用的举例。 此例是以 VSCode编辑器 进行的编码。 一、项目搭建 1. 进入命令提示符窗口 在要搭建项目的文件夹中&#xff0c;点击路径&#xff0c;输入CMD并按回车 2. 查看node版本、Vue-cli版本 2…

Android 架构之长连接技术

上文中我们提到了HttpDNS&#xff0c;虽然它比系统DNS更优&#xff0c;但终归还是要做DNS操作。而长连接都是IP直接连接&#xff0c;因此没有DNS相关的开销和耗时。 3. 如果有大量网络请求&#xff0c;可以明显减少网络延时&#xff0c;节省带宽 对于大型App而言&#xff0c;…

npm——安装、卸载与更新

npm 官方文档&#xff1a;https://docs.npmjs.com/ 什么是npm npm&#xff08;“Node 包管理器”&#xff09;是 JavaScript 运行时 Node.js 的默认程序包管理器。 它也被称为“Ninja Pumpkin Mutants”&#xff0c;“Nonprofit Pizza Makers”&#xff0c;以及许多其他随机…

Vue通知提醒框(Notification)

项目相关依赖版本信息 可自定义设置以下属性&#xff1a; 自动关闭的延时时长&#xff08;duration&#xff09;&#xff0c;单位ms&#xff0c;默认4500ms消息从顶部弹出时&#xff0c;距离顶部的位置&#xff08;top&#xff09;&#xff0c;单位像素px&#xff0c;默认24p…

WebSocket开发(心跳监测)功能

前言 在之前的文章中完成了客服对话的Demo功能&#xff0c;但是现在的连接是无限制的长时间连接没有做心跳、失活、超时断连等功能&#xff0c;心跳的实现方法有很多种&#xff0c;并且WebSocket就提供了ping/pong类型的消息。 心跳的触发方式也分两种&#xff1a; 客户端触…