基于SSM實(shí)現(xiàn)酒店入住預(yù)定管理系統(tǒng)
作者主頁(yè):
作者簡(jiǎn)介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、掘金特邀作者、多年架構(gòu)師設(shè)計(jì)經(jīng)驗(yàn)、騰訊課堂常駐講師
主要內(nèi)容:Java項(xiàng)目、畢業(yè)設(shè)計(jì)、簡(jiǎn)歷模板、學(xué)習(xí)資料、面試題庫(kù)、技術(shù)互助
文末獲取源碼?
項(xiàng)目編號(hào):BS-XX-138
一,項(xiàng)目簡(jiǎn)介
本項(xiàng)目主要基于SSM框架開發(fā)實(shí)現(xiàn)了一個(gè)酒店預(yù)定入住管理系統(tǒng),前端用戶可以實(shí)現(xiàn)注冊(cè)登陸,并在前端頁(yè)面進(jìn)行全文檢索,預(yù)定需要的酒店。在個(gè)人中心處可以查看自己預(yù)定的酒店信息,管理個(gè)人信息等。后臺(tái)管理人員登陸系統(tǒng)后可以進(jìn)行用戶和權(quán)限角色的管理和分配,酒店信息的管理,預(yù)定信息的管理,入住信息的管理,營(yíng)業(yè)報(bào)表的圖形統(tǒng)計(jì)功能等等。
二,環(huán)境介紹
語(yǔ)言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫(kù):Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
前端開發(fā)技術(shù): easyUI+Jquery+Ajax
后臺(tái)開發(fā)技術(shù):SSM開發(fā)框架
三,系統(tǒng)展示
前臺(tái)用戶功能展示:
首頁(yè)展示

用戶注冊(cè)

用戶登陸

用戶中心

后臺(tái)管理功能:

?菜單管理

角色管理

用戶管理

樓層管理

房型管理

房間管理

客戶管理

預(yù)定管理

入住管理
營(yíng)業(yè)統(tǒng)計(jì)

四,核心代碼展示
package com.ischoolbar.programmer.controller.home;import java.util.Date;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.ischoolbar.programmer.entity.Account;import com.ischoolbar.programmer.entity.BookOrder;import com.ischoolbar.programmer.entity.RoomType;import com.ischoolbar.programmer.service.AccountService;import com.ischoolbar.programmer.service.BookOrderService;import com.ischoolbar.programmer.service.RoomTypeService;/**
* 前臺(tái)用戶控制器
* @author Administrator
*
*/public class HomeAccountController {
private RoomTypeService roomTypeService;
private AccountService accountService;
private BookOrderService bookOrderService; /**
* 前臺(tái)用戶中心首頁(yè)
* @param model
* @param name
* @return
*/
public ModelAndView list(ModelAndView model,HttpServletRequest request
){ Account account = (Account)request.getSession().getAttribute("account");
Map<String,Object> queryMap = new HashMap<String, Object>();
queryMap.put("accountId", account.getId());
queryMap.put("offset", 0);
queryMap.put("pageSize", 999);
model.addObject("bookOrderList", bookOrderService.findList(queryMap));
model.addObject("roomTypeList", roomTypeService.findAll());
model.setViewName("home/account/index"); return model;
} /**
* 預(yù)定房間頁(yè)面
* @param model
* @return
*/
public ModelAndView bookOrder(ModelAndView model,Long roomTypeId
){
model.addObject("roomType", roomTypeService.find(roomTypeId));
model.setViewName("home/account/book_order"); return model;
} /**
* 預(yù)定信息提交
* @param account
* @return
*/
public Map<String,String> bookOrderAct(BookOrder bookOrder,HttpServletRequest request){
Map<String, String> ret = new HashMap<String, String>(); if(bookOrder == null){
ret.put("type", "error");
ret.put("msg", "請(qǐng)?zhí)顚懻_的預(yù)定訂單信息!"); return ret;
} Account account = (Account)request.getSession().getAttribute("account"); if(account == null){
ret.put("type", "error");
ret.put("msg", "客戶不能為空!"); return ret;
}
bookOrder.setAccountId(account.getId()); if(bookOrder.getRoomTypeId() == null){
ret.put("type", "error");
ret.put("msg", "房型不能為空!"); return ret;
} if(StringUtils.isEmpty(bookOrder.getName())){
ret.put("type", "error");
ret.put("msg", "預(yù)定訂單聯(lián)系人名稱不能為空!"); return ret;
} if(StringUtils.isEmpty(bookOrder.getMobile())){
ret.put("type", "error");
ret.put("msg", "預(yù)定訂單聯(lián)系人手機(jī)號(hào)不能為空!"); return ret;
} if(StringUtils.isEmpty(bookOrder.getIdCard())){
ret.put("type", "error");
ret.put("msg", "聯(lián)系人身份證號(hào)不能為空!"); return ret;
} if(StringUtils.isEmpty(bookOrder.getArriveDate())){
ret.put("type", "error");
ret.put("msg", "到達(dá)時(shí)間不能為空!"); return ret;
} if(StringUtils.isEmpty(bookOrder.getLeaveDate())){
ret.put("type", "error");
ret.put("msg", "離店時(shí)間不能為空!"); return ret;
}
bookOrder.setCreateTime(new Date());
bookOrder.setStatus(0); if(bookOrderService.add(bookOrder) <= 0){
ret.put("type", "error");
ret.put("msg", "添加失敗,請(qǐng)聯(lián)系管理員!"); return ret;
} RoomType roomType = roomTypeService.find(bookOrder.getRoomTypeId()); //預(yù)定成功后去修改該房型的預(yù)定數(shù)
if(roomType != null){
roomType.setBookNum(roomType.getBookNum() + 1);
roomType.setAvilableNum(roomType.getAvilableNum() - 1);
roomTypeService.updateNum(roomType); //如果可用的房間數(shù)為0,則設(shè)置該房型狀態(tài)已滿
if(roomType.getAvilableNum() == 0){
roomType.setStatus(0);
roomTypeService.edit(roomType);
}
}
ret.put("type", "success");
ret.put("msg", "預(yù)定成功!"); return ret;
} /**
* 修改個(gè)人信息提交
* @param account
* @return
*/
public Map<String,String> updateInfoAct(Account account,HttpServletRequest request){
Map<String,String> retMap = new HashMap<String, String>(); if(account == null){
retMap.put("type", "error");
retMap.put("msg", "請(qǐng)?zhí)顚懻_的用戶信息!"); return retMap;
} if(StringUtils.isEmpty(account.getName())){
retMap.put("type", "error");
retMap.put("msg", "用戶名不能為空!"); return retMap;
} Account loginedAccount = (Account)request.getSession().getAttribute("account"); if(isExist(account.getName(),loginedAccount.getId())){
retMap.put("type", "error");
retMap.put("msg", "該用戶名已經(jīng)存在!"); return retMap;
}
loginedAccount.setAddress(account.getAddress());
loginedAccount.setIdCard(account.getIdCard());
loginedAccount.setMobile(account.getMobile());
loginedAccount.setName(account.getName());
loginedAccount.setRealName(account.getRealName()); if(accountService.edit(loginedAccount) <= 0){
retMap.put("type", "error");
retMap.put("msg", "修改失敗,請(qǐng)聯(lián)系管理員!"); return retMap;
}
request.getSession().setAttribute("account", loginedAccount);
retMap.put("type", "success");
retMap.put("msg", "修改成功!"); return retMap;
} /**
* 修改密碼提交
* @param account
* @return
*/
public Map<String,String> updatePwdAct(String oldPassword,String newPassword,HttpServletRequest request){
Map<String,String> retMap = new HashMap<String, String>(); if(StringUtils.isEmpty(oldPassword)){
retMap.put("type", "error");
retMap.put("msg", "請(qǐng)?zhí)顚懺瓉?lái)的密碼!"); return retMap;
} if(StringUtils.isEmpty(newPassword)){
retMap.put("type", "error");
retMap.put("msg", "請(qǐng)?zhí)顚懶旅艽a!"); return retMap;
} Account loginedAccount = (Account)request.getSession().getAttribute("account"); if(!oldPassword.equals(loginedAccount.getPassword())){
retMap.put("type", "error");
retMap.put("msg", "原密碼錯(cuò)誤!"); return retMap;
}
loginedAccount.setPassword(newPassword); if(accountService.edit(loginedAccount) <= 0){
retMap.put("type", "error");
retMap.put("msg", "修改失敗,請(qǐng)聯(lián)系管理員!"); return retMap;
}
retMap.put("type", "success");
retMap.put("msg", "修改密碼成功!"); return retMap;
} /**
* 判斷用戶是否存在
* @param name
* @param id
* @return
*/
private boolean isExist(String name,Long id){ Account account = accountService.findByName(name); if(account == null)return false; if(account != null && account.getId().longValue() == id)return false; return true;
}
}
package com.ischoolbar.programmer.controller.home;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.ischoolbar.programmer.entity.Account;import com.ischoolbar.programmer.service.AccountService;import com.ischoolbar.programmer.service.RoomTypeService;/**
* 前臺(tái)首頁(yè)控制器
* @author Administrator
*
*/public class HomeController {
private RoomTypeService roomTypeService;
private AccountService accountService; /**
* 前臺(tái)首頁(yè)
* @param model
* @param name
* @return
*/
public ModelAndView list(ModelAndView model, {
Map<String,Object> queryMap = String name
)new HashMap<String, Object>();
queryMap.put("name", name);
queryMap.put("offset", 0);
queryMap.put("pageSize", 999);
model.addObject("roomTypeList", roomTypeService.findList(queryMap));
model.setViewName("home/index/index");
model.addObject("kw", name); return model;
} /**
* 登錄頁(yè)面
* @param model
* @return
*/
public ModelAndView login(ModelAndView model
){
model.setViewName("home/index/login"); return model;
} /**
* 注冊(cè)頁(yè)面
* @param model
* @return
*/
public ModelAndView reg(ModelAndView model
){
model.setViewName("home/index/reg"); return model;
} /**
* 登錄信息提交
* @param account
* @return
*/
public Map<String,String> loginAct(Account account,String vcode,HttpServletRequest request){
Map<String,String> retMap = new HashMap<String, String>(); if(account == null){
retMap.put("type", "error");
retMap.put("msg", "請(qǐng)?zhí)顚懻_的用戶信息!"); return retMap;
} if(StringUtils.isEmpty(account.getName())){
retMap.put("type", "error");
retMap.put("msg", "用戶名不能為空!"); return retMap;
} if(StringUtils.isEmpty(account.getPassword())){
retMap.put("type", "error");
retMap.put("msg", "密碼不能為空!"); return retMap;
} if(StringUtils.isEmpty(vcode)){
retMap.put("type", "error");
retMap.put("msg", "驗(yàn)證碼不能為空!"); return retMap;
} Object attribute = request.getSession().getAttribute("accountLoginCpacha"); if(attribute == null){
retMap.put("type", "error");
retMap.put("msg", "驗(yàn)證碼過期,請(qǐng)刷新!"); return retMap;
} if(!vcode.equalsIgnoreCase(attribute.toString())){
retMap.put("type", "error");
retMap.put("msg", "驗(yàn)證碼錯(cuò)誤!"); return retMap;
} Account findByName = accountService.findByName(account.getName()); if(findByName == null){
retMap.put("type", "error");
retMap.put("msg", "用戶名不存在!"); return retMap;
} if(!account.getPassword().equals(findByName.getPassword())){
retMap.put("type", "error");
retMap.put("msg", "密碼錯(cuò)誤!"); return retMap;
} if(findByName.getStatus() == -1){
retMap.put("type", "error");
retMap.put("msg", "該用戶已被禁用,請(qǐng)聯(lián)系管理員!"); return retMap;
}
request.getSession().setAttribute("account", findByName);
request.getSession().setAttribute("accountLoginCpacha", null);
retMap.put("type", "success");
retMap.put("msg", "登錄成功!"); return retMap;
} /**
* 注冊(cè)信息提交
* @param account
* @return
*/
public Map<String,String> regAct(Account account){
Map<String,String> retMap = new HashMap<String, String>(); if(account == null){
retMap.put("type", "error");
retMap.put("msg", "請(qǐng)?zhí)顚懻_的用戶信息!"); return retMap;
} if(StringUtils.isEmpty(account.getName())){
retMap.put("type", "error");
retMap.put("msg", "用戶名不能為空!"); return retMap;
} if(StringUtils.isEmpty(account.getPassword())){
retMap.put("type", "error");
retMap.put("msg", "密碼不能為空!"); return retMap;
} if(StringUtils.isEmpty(account.getMobile())){
retMap.put("type", "error");
retMap.put("msg", "手機(jī)號(hào)不能為空!"); return retMap;
} if(isExist(account.getName())){
retMap.put("type", "error");
retMap.put("msg", "該用戶名已經(jīng)存在!"); return retMap;
} if(accountService.add(account) <= 0){
retMap.put("type", "error");
retMap.put("msg", "注冊(cè)失敗,請(qǐng)聯(lián)系管理員!"); return retMap;
}
retMap.put("type", "success");
retMap.put("msg", "注冊(cè)成功!"); return retMap;
} /**
* 退出登錄
* @param request
* @return
*/
public String logout(HttpServletRequest request){
request.getSession().setAttribute("account", null); return "redirect:login";
} private boolean isExist(String name){ Account account = accountService.findByName(name); if(account == null)return false; return true;
}
}
package com.ischoolbar.programmer.controller.admin;import java.util.HashMap;import java.util.Map;import org.apache.commons.lang.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.ischoolbar.programmer.entity.Account;import com.ischoolbar.programmer.page.admin.Page;import com.ischoolbar.programmer.service.AccountService;/**
* 客戶管理后臺(tái)控制器
* @author Administrator
*
*/public class AccountController {
private AccountService accountService;
/**
* 客戶管理列表頁(yè)面
* @param model
* @return
*/
public ModelAndView list(ModelAndView model){
model.setViewName("account/list"); return model;
}
/**
* 客戶信息添加操作
* @param account
* @return
*/
public Map<String, String> add(Account account){
Map<String, String> ret = new HashMap<String, String>(); if(account == null){
ret.put("type", "error");
ret.put("msg", "請(qǐng)?zhí)顚懻_的客戶信息!"); return ret;
} if(StringUtils.isEmpty(account.getName())){
ret.put("type", "error");
ret.put("msg", "客戶名稱不能為空!"); return ret;
} if(StringUtils.isEmpty(account.getPassword())){
ret.put("type", "error");
ret.put("msg", "客戶密碼不能為空!"); return ret;
} if(isExist(account.getName(), 0l)){
ret.put("type", "error");
ret.put("msg", "該用戶名已經(jīng)存在!"); return ret;
} if(accountService.add(account) <= 0){
ret.put("type", "error");
ret.put("msg", "添加失敗,請(qǐng)聯(lián)系管理員!"); return ret;
}
ret.put("type", "success");
ret.put("msg", "添加成功!"); return ret;
}
/**
* 客戶信息編輯操作
* @param account
* @return
*/
public Map<String, String> edit(Account account){
Map<String, String> ret = new HashMap<String, String>(); if(account == null){
ret.put("type", "error");
ret.put("msg", "請(qǐng)?zhí)顚懻_的客戶信息!"); return ret;
} if(StringUtils.isEmpty(account.getName())){
ret.put("type", "error");
ret.put("msg", "客戶名稱不能為空!"); return ret;
} if(StringUtils.isEmpty(account.getPassword())){
ret.put("type", "error");
ret.put("msg", "客戶密碼不能為空!"); return ret;
} if(isExist(account.getName(), account.getId())){
ret.put("type", "error");
ret.put("msg", "該用戶名已經(jīng)存在!"); return ret;
} if(accountService.edit(account) <= 0){
ret.put("type", "error");
ret.put("msg", "添加失敗,請(qǐng)聯(lián)系管理員!"); return ret;
}
ret.put("type", "success");
ret.put("msg", "修改成功!"); return ret;
}
/**
* 分頁(yè)查詢客戶信息
* @param name
* @param page
* @return
*/
public Map<String,Object> list( {
Map<String,Object> ret = String name, String realName, String idCard, String mobile, Integer status,
Page page
)new HashMap<String, Object>();
Map<String,Object> queryMap = new HashMap<String, Object>();
queryMap.put("name", name);
queryMap.put("status", status);
queryMap.put("realName", realName);
queryMap.put("idCard", idCard);
queryMap.put("mobile", mobile);
queryMap.put("offset", page.getOffset());
queryMap.put("pageSize", page.getRows());
ret.put("rows", accountService.findList(queryMap));
ret.put("total", accountService.getTotal(queryMap)); return ret;
}
/**
* 客戶信息刪除操作
* @param id
* @return
*/
public Map<String, String> delete(Long id){
Map<String, String> ret = new HashMap<String, String>(); if(id == null){
ret.put("type", "error");
ret.put("msg", "請(qǐng)選擇要?jiǎng)h除的信息!"); return ret;
} try { if(accountService.delete(id) <= 0){
ret.put("type", "error");
ret.put("msg", "刪除失敗,請(qǐng)聯(lián)系管理員!"); return ret;
}
} catch (Exception e) { // TODO: handle exception
ret.put("type", "error");
ret.put("msg", "該客戶下存在訂單信息,請(qǐng)先刪除該客戶下的所有訂單信息!"); return ret;
}
ret.put("type", "success");
ret.put("msg", "刪除成功!"); return ret;
}
/**
* 判斷用戶名是否存在
* @param name
* @param id
* @return
*/
private boolean isExist(String name,Long id){ Account findByName = accountService.findByName(name); if(findByName == null)return false; if(findByName.getId().longValue() == id.longValue())return false; return true;
}
}
五,項(xiàng)目總結(jié)
? ?本項(xiàng)目基本功能完整,界面簡(jiǎn)潔大方,適合做畢業(yè)設(shè)計(jì)或課程設(shè)計(jì)使用,使用了常見的開發(fā)的工具和數(shù)據(jù)庫(kù),使用SSM框架和easyUI來(lái)完成酒店管理系統(tǒng)的開發(fā)和設(shè)計(jì),值得學(xué)習(xí)和研究。