Java项目:JSP酒店客房管理系统

news2025/1/19 3:18:55

作者主页:源码空间站2022

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

酒店管理系统共分为三个角色,客房经理、前台管理员、客户,各个角色的权限各不相同;
客房经理功能包括:登录、注册、前台用户管理、客房管理、优惠活动、查看留言、更换客房、房费续交、订单查看、报修统计、入驻统计、退房等功能;

前台管理员主要功能:
前台管理:包括客房查询、更换客房、房费续交、订单查看、报修统计、入住统计、退房、查看留言;

客户主要功能:
主要查看用户信息:个人信息、优惠活动、客房信息、订单管理、留言等;

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
5.数据库:MySql 5.7版本;

6.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目

技术栈

1. 后端:Servlet

2. 前端:JSP+bootstrap+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/SLH 登录 注:tomcat中配置项目路径必须为/SLH,否则会报错;
客房经理用户名密码:admin/admin
前台管理员用户名密码:test/123456

客户用户名密码:jack/123456

运行截图

相关代码 

CustomerServlet

package com.slh.code.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.slh.code.Users;
import com.slh.code.db.DBHelper;
import com.slh.util.DateUtil;
import com.slh.util.Keys;

public class CustomerServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void destroy() {
		super.destroy(); 
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		int state = 0;
		String value = "";
		String cause = "";
		String result = "";
		
		String flag = request.getParameter("flag")==null?"":request.getParameter("flag");
		if(flag.equals("")){
			state = 0;
			result = "error:参数错误!";
		}else if(flag.equals("customerInfo")){
			result = customerInfo(request,response);
		}else if(flag.equals("motifyuser")){
			//修改用户信息
			result = motifyuser(request,response);
		}else if(flag.equals("orderRoom")){
			result = orderRoom(request,response);
		}else if(flag.equals("orderLook")){
			result = orderLook(request,response);
		}else if(flag.equals("findOrderById")){
			//获取单个订单信息
			result = findOrderById(request,response);
		}else if(flag.equals("editOrder")){
			result = editOrder(request,response);
		}else if(flag.equals("deleteOrder")){
			result = deleteOrder(request,response);
		}else if(flag.equals("message")){
			//留言
			result = message(request,response);
		}
		if(result.indexOf("error")!=-1){
			state = 0;
			value = result.substring(6,result.length());
		}else{
			state = 1;
			value =result;
		}
		System.out.println(value);
		out.println("{\"state\":\""+state+"\",\"value\":\""+value.replaceAll("\"", "'")+"\",\"cause\":\""+cause+"\"}");
		out.flush();
		out.close();
	}

	private String findOrderById(HttpServletRequest request,
			HttpServletResponse response) {
		String id = request.getParameter("id")==null?"":request.getParameter("id");
		String uid = ((Users)request.getSession().getAttribute("user")).getId();
		
		String sql = "select o.id,o.orderno,u.name,o.occupancytime,o.ordertime,o.ordermoney,o.prepay,o.ordertype,o.roomno,o.day,o.isoccupancy from orders o,users u where u.id = o.orderuser and o.id = ? and u.id = ?";
		String fields[]={"id","orderno","name","occupancytime","ordertime","ordermoney","prepay","ordertype","roomno","day","isoccupancy"};
		Map<String,String> map = new DBHelper().queryObject(sql, new String[]{id,uid}, fields);
		if(map!=null && !map.isEmpty()){
			return JSONObject.fromObject(map).toString();
		}else return "error:获取您的订单信息失败!";
		
	}
	private String motifyuser(HttpServletRequest request,
			HttpServletResponse response) {
		String id = request.getParameter("id")==null?"":request.getParameter("id");
		String age = request.getParameter("age")==null?"":request.getParameter("age");
		String sex = request.getParameter("sex")==null?"":request.getParameter("sex");
		String realname = request.getParameter("realname")==null?"":request.getParameter("realname");
		String phone = request.getParameter("phone")==null?"":request.getParameter("phone");
		
		String reg = "^[1-9]+$";
		Pattern p = Pattern.compile(reg);
		
		
		if(id.equals("")) return "error:用户ID为空!";
		if(age.equals("")) return "error:年龄为空";
		if(!p.matcher(age).matches()) return "error:请输入正确的年龄";
		if(Integer.parseInt(age)>150) return "error:请输入真实的年龄";
		if(sex.equals("")) return "error:请选择性别!";
		if(realname.equals("")) return "error:真实姓名为空!";
		if(phone.equals("")) return "error:联系方式为空";
		
		String sql = "update users set age =?,sex=?,realname=?,phone=? where id= ?";
		String params[]={age,sex,realname,phone,id};
		int rows = new DBHelper().alertData(sql, params);
		if(rows > 0){
			Users u = (Users)request.getSession().getAttribute("user");
			u.setAge(age);
			u.setSex(sex);
			u.setRealname(realname);
			u.setPhone(phone);
			return "修改信息成功!";
		} 
		else return "error:修改信息失败!";
	}
	private String message(HttpServletRequest request,
			HttpServletResponse response) {
		String id = Keys.createKey("M");
		String title = request.getParameter("title")==null?"":request.getParameter("title");
		String content = request.getParameter("content")==null?"":request.getParameter("content");
		String messageuser = ((Users)request.getSession().getAttribute("user")).getId();
		String time = DateUtil.dateFormat();
		if(title.equals("")) return "error:标题不能为空!";
		if(content.equals("")) return "error:内容不能为空!";
		
		String sql = "insert into message(id,title,content,messageuser,time)values(?,?,?,?,?)";
		
		String params[]={id,title,content,messageuser,time};
		
		int rows = new DBHelper().alertData(sql, params);
		if(rows >0) return "成功!";
		else return "error:留言失败!";
	}
	private String deleteOrder(HttpServletRequest request,
			HttpServletResponse response) {
		String id= request.getParameter("id")==null?"":request.getParameter("id");
		if(id.equals("")) return "error:订单ID不能为空!";
		
		String sql = "delete from orders where id = ?";
		String params[]={id};
		int rows = new DBHelper().alertData(sql, params);
		if(rows > 0) return "成功";
		else return "error:删除订单失败!";
	}
	private String editOrder(HttpServletRequest request,
			HttpServletResponse response) {
		String id = request.getParameter("id")==null?"":request.getParameter("id");
		String occupancytime = request.getParameter("occupancytime")==null?"":request.getParameter("occupancytime");
		String day = request.getParameter("day")==null?"":request.getParameter("day");
		if(id.equals("")) return "error:订单ID不能为空!";
		if(occupancytime.equals("")) return "error:入住时间不能为空!";
		if(day.equals("")) return "error:入住天数不能为空!";
		String sql = "update orders set occupancytime=? ,day =? where id =?";
		String params[]={occupancytime,day ,id};
		
		int rows = new DBHelper().alertData(sql, params);
		if(rows>0) return "订单修改成功";
		else return "修改订单失败!";
	}
	private String orderLook(HttpServletRequest request,
			HttpServletResponse response) {
		int page = 0;
		int pagesize = 5;
		String uid = ((Users)request.getSession().getAttribute("user")).getId();
		String prepage = request.getParameter("page")==null?"":request.getParameter("page");
		boolean p = Pattern.compile("^[0-9]+$").matcher(prepage).matches();
		if(!p) page =1;
		else if(prepage.equals("")) page =1;
		else if(p && Integer.parseInt(prepage)>0) page = Integer.parseInt(prepage);
		String sql = "select o.id,o.orderno,o.occupancytime,u.name,o.ordertime ,o.ordermoney ,o.prepay,o.ordertype,o.roomno,o.day,o.isoccupancy from orders o inner join users u where o.orderuser = u.id and u.id = ? limit "+(page-1)*pagesize+","+pagesize;
		String csql = "select count(*) count from orders o inner join users u where o.orderuser = u.id and u.id = ? ";
		String params[]={uid};
		String total = new DBHelper().queryField(csql, params, "count");
		Map<String, String>map = null;
		if(total!=null && !total.equals("")){
			map = new HashMap<String, String>();
			int totalCount = Integer.parseInt(total);
			map.put("total", total);
			map.put("prepage", page+"");
			map.put("totalPage", (totalCount%pagesize==0?totalCount/pagesize:totalCount/pagesize+1)+"");
			
			String fields[]={"id","orderno","name","occupancytime","ordertime","ordermoney","prepay","ordertype","roomno","day","isoccupancy"};
			System.out.println("sql:"+sql);
			List<Map<String, String>>list = new DBHelper().queryObjects(sql, params, fields);
			if(list!=null && list.size()>0){
				list.add(map);
				return JSONArray.fromObject(list).toString();
			}else
				return "error:没有获取到订单的信息!";
		}else return "error:没有获取到相关的订单信息!";
		
	}
	private String orderRoom(HttpServletRequest request,
			HttpServletResponse response) {
		String id = Keys.createKey("O");
		String orderno = Keys.createKey("SLH");
		String orderuser = ((Users)request.getSession().getAttribute("user")).getId();
		String ordertime = DateUtil.dateFormat();
		String ordermoney = request.getParameter("ordermoney")==null?"":request.getParameter("ordermoney");
		String ordertype = "1";
		String roomno = request.getParameter("roomno")==null?"":request.getParameter("roomno");
		String isoccupancy = "2";
		String occupancytime = request.getParameter("occupancytime")==null?"":request.getParameter("occupancytime");
		String day = request.getParameter("day")==null?"1":request.getParameter("day");
		if(roomno.equals("")) return "error:房间号不能为空!";
		if(ordermoney.equals("")) return "error:订单价格不能为空";
		if(occupancytime.equals("")) return "error:入住时间不能为空!";
		
		
		String rsql = "update rooms set isempty = 2 where roomno = ?";
		int room = new DBHelper().alertData(rsql, new String[]{roomno});
		if(room <= 0) return "error:房间的状态修改失败!";
		
		
		String sql = "insert into orders(id,orderno,orderuser,ordertime,ordermoney,ordertype,roomno,isoccupancy,occupancytime,day)values(?,?,?,?,?,?,?,?,?,?)";
		String params[]={id,orderno,orderuser,ordertime,ordermoney,ordertype,roomno,isoccupancy,occupancytime,day};
		int rows = new DBHelper().alertData(sql, params);
		if(rows > 0) return "下单成功";
		else return "error:下单失败";
	}
	private String customerInfo(HttpServletRequest request,
			HttpServletResponse response) {
		if(request.getSession().getAttribute("user")!=null)
			return JSONObject.fromObject((Users)request.getSession().getAttribute("user")).toString();
		else return "error:获取用户信息失败,session失效!";
	}
	public void init() throws ServletException {

	}

}

如果也想学习本系统,下面领取。关注并回复:109jsp 

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

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

相关文章

leetcode《图解数据结构》刷题日志【第五周】(2022/11/21-2022/11/28)

leetcode《图解数据结构》刷题日志【第五周】1. 剑指 Offer 60. n 个骰子的点数1.1 题目1.2 解题思路1.3 数据类型功能函数总结1.4 java代码1.5 踩坑小记1.6 进阶做法2. 剑指 Offer 63. 股票的最大利润2.1 题目2.2 解题思路2.3 数据类型功能函数总结2.4 java代码3. 剑指 Offer …

SpringBoot SpringBoot 原理篇 1 自动配置 1.16 自动配置原理【2】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.16 自动配置原理【2】1.16.1 看源码了1.16.2 Import({AutoConfig…

archlinux 安装matlab

最近在学matlab使用的是windows版本的&#xff0c;比起windows我更喜欢在linux中写代码。于是乎就想在Linux中安装一下。 主要过程参考此篇文章&#xff1a; 《【首发】 ubuntu20.04安装matlab2021b/matlab2020b》 https://blog.csdn.net/hanjuefu5827/article/details/1151677…

【Hack The Box】Linux练习-- Forge

HTB 学习笔记 【Hack The Box】Linux练习-- Forge &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1f36…

队列(C语言实现)

文章目录&#xff1a;1.队列的概念2.队列的结构3.接口实现3.1初始化队列3.2判断队列是否为空3.3入队3.4出队3.5查看队头元素3.6查看队尾元素3.7统计队列数据个数3.8销毁队列1.队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特…

jQuery插件【validate】国际化校验插件

jQuery插件系列 相信大家在网站上都遇到过这种注册的情况吧&#xff0c;有的时候我们什么也不输入点登录或者注册或者鼠标失去焦点的时候&#xff0c;就会自动提示xxx为空&#xff0c;密码不正确&#xff0c;请输入xxx等一系列的提示信息。 那么这是怎么实现的呢&#xff0c;其…

【LeetCode】No.101. Symmetric Tree -- Java Version

题目链接&#xff1a;https://leetcode.com/problems/symmetric-tree/ 1. 题目介绍&#xff08;Symmetric Tree&#xff09; Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center). 【Translate】&#xff1a; 给定…

QT实战项目1——无边框窗口拖拽和阴影

课时2 开发环境,无边框窗口拖拽和阴影_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV14t411b7EL?p2&vd_source0471cde1c644648fafd07b54e303c905 目录 一、设置无边框 和 鼠标可以拖动窗口 1.1 设置无边框 1.2 鼠标拖动 1.3 展示阴影 一、设置无边框 和 鼠标可…

设计模式-组合模式

组合模式一、学校院系展示需求二、传统方案解决学校院系展示三、组合模式基本介绍四、组合模式原理类图五、组合模式解决的问题六、使用组合模式解决院校展示问题6.1、类图6.2、代码一、学校院系展示需求 编写程序展示一个学校院系结构&#xff1a;需求是这样&#xff0c;要在…

SQL练习题

新建数据表 首先建立测试数据库的表&#xff0c;新建数据库的sql语句如下&#xff0c;大家可以粘贴成一个sql文件&#xff0c;然后新建所有的表并插入所有的数据&#xff1a; 新建数据库sql文件&#xff1a; DROP TABLE IF EXISTS EMP; DROP TABLE IF EXISTS DEPT; DROP TAB…

Unity UI锚点和位置关系

一、Anchors锚点 Anchors的设置会直接改变RectTransform中它的位置信息&#xff1b;Anchors设置中的X 改变会影响&#xff08;PosX和Width&#xff09;或&#xff08;left和right&#xff09; 1、Anchors改变位置信息 下图中X锚点的Min和Max值相同时&#xff0c;上面的一栏中…

Java调用命令行并返回打印的内容

博主在最近的工作中&#xff0c;收到了这样一个需求。 调用别人以前完成开发的 jar 包或 python 程序&#xff0c;并将原程序在命令行中输出的内容封装为 JSON 对象后通过 RESTFul 接口返回。 面对以上的需求&#xff0c;博主给出了以下解决方案。话不多说&#xff0c;上代码。…

Mathematica for Linux v13.1.0 科学计算软件多语言版

Wolfram Mathematica for Linux 中文正式版是一款强大的数学计算科学计算软件&#xff0c;MathWorks MATLAB 和 Wolfram Mathematica 、Maplesoft Maple 并称为三大数学软件&#xff0c;Wolfram Mathematica 中文正式版主要用于符号计算软件&#xff0c;也称为计算机代数系统&a…

MySQL如何恢复不小心误删的数据记录(binlog)

前言 题主于今天&#xff08;2022年11月27日&#xff09; 在线上环境误操作删除了记录&#xff0c;且没有备份数据&#xff0c;通宵排查事故原因&#xff0c;终于没有酿成生产事故。谨以此文记录。 参考资料 https://blog.csdn.net/qq_23543983/article/details/127298578 …

单源最短路径问题(Java)

单源最短路径问题&#xff08;Java&#xff09; 文章目录单源最短路径问题&#xff08;Java&#xff09;1、问题描述2、算法思路3、代码实现4、算法正确性和计算复杂性4.1 贪心选择性质4.2 最优子结构性质4.3 计算复杂性5、参考资料1、问题描述 给定带权有向图G(V,E),其中每条…

分布式电源接入对配电网的影响matlab程序(IEEE9节点系统算例)

分布式电源接入对配电网的影响matlab程序&#xff08;IEEE9节点系统算例&#xff09; 摘 要&#xff1a;分布式电源的接入使得配电系统从放射状无源网络变为分布有中小型电源的有源网络。带来了使单向流动的电流方向具有了不确定性等等问题&#xff0c;使得配电系统的控制和管…

Android反编译apk

文章目录安装Android Studio1. 解压apk文件方法一&#xff1a;使用apktool反编译&#xff08;得到的是.smali文件和可直接读的资源文件&#xff0c;如果要得到.dex文件&#xff0c;还要看方法二&#xff09;方法二&#xff1a;使用解压工具解压&#xff08;得到的是.dex文件和二…

SpringBoot项目集成Dubbo

1.环境搭建 为整合Dubbo之前&#xff0c;我们所写的项目都是单一应用架构&#xff0c;只需要一个应用&#xff0c;将所有功能都部署在一起&#xff0c;在应用内部是控制层调用业务层&#xff0c;业务层调用数据持久层&#xff1b;如今&#xff0c;整合Dubbo后&#xff0c;我们…

独立产品灵感周刊 DecoHack #039 - 制作自己的音乐墙

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。自荐产品 1. planet-tab - 由独立开发者 ha…

【云原生】Docker的私有仓库部署——Harbor

内容预知 1.Docker原生私有仓库—— Registry 1.1 Registry的简单了解 1.2 Registry的部署过程 步骤一&#xff1a;拉取相关的镜像 步骤二&#xff1a;进行 Registry的相关yml文件配置&#xff08;docker-compose&#xff09; 步骤三&#xff1a;镜像的推送 2. Registry的…