700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql)

基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql)

时间:2022-12-01 10:48:22

相关推荐

基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql)

基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的餐厅点餐收银管理系统(java+SSM+JSP+Bootstrap+mysql)

项目介绍

用于餐厅的收银管理系统,包含了四个模块 1.桌位模块 桌位模块主要是用于管理桌位的模块,包括点菜到结账的流程 将桌位人数设置为0可以滞空当前桌位

2.账单模块 账单模块记录了每一天的帐单汇总,同时提供了年月日账单的统计,在日账单内可以查看当日的所有消费详情,还提供了按日期或日期区间搜索账单的功能

3.日常维护模块 提供了桌位菜单用户供应商的配置功能,也就是增删改查

添加菜品时,添加酒水类时,可以选择进货内的酒水,这样的话在结账后若客人点了该酒水,会将销售信息记录在酒水库存内的销售信息里

4.酒水库存模块 查看添加酒水的进销存信息

管理员角色包含以下功能:

登录,查看桌位,开桌,点菜,结账,查看账单,添加菜品,查看菜品,桌位维护,添加桌位,添加账号,查看账号,添加供应商,进货信息管理,添加进货信息等功能。

环境需要

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项目:否; 7.Redis数据库;

技术栈

后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+Bootstrap+jQuery

使用说明

使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中applicationcontext-mybatis.xml配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/login.html 登录 管理员账号/密码:admin/adminadmin

用户管理控制器:

/**

用户管理控制器

*/

@RequestMapping(“/admin/user”)

@Controller

public class UserController {

@Autowired

private UserService userService;

@Autowired

private RoleService roleService;

/**

用户列表页面

@param model

@return

*/

@RequestMapping(value=“/list”,method=RequestMethod.GET)

public ModelAndView list(ModelAndView model){

Map<String, Object> queryMap = new HashMap<String, Object>();

model.addObject(“roleList”, roleService.findList(queryMap));

model.setViewName(“user/list”);

return model;

/**

获取用户列表

@param page

@param username

@param roleId

@param sex

@return

*/

@RequestMapping(value=“/list”,method=RequestMethod.POST)

@ResponseBody

public Map<String, Object> getList(Page page,

@RequestParam(name=“username”,required=false,defaultValue=“”) String username,

@RequestParam(name=“roleId”,required=false) Long roleId,

@RequestParam(name=“sex”,required=false) Integer sex

){

Map<String, Object> ret = new HashMap<String, Object>();

Map<String, Object> queryMap = new HashMap<String, Object>();

queryMap.put(“username”, username);

queryMap.put(“roleId”, roleId);

queryMap.put(“sex”, sex);

queryMap.put(“offset”, page.getOffset());

queryMap.put(“pageSize”, page.getRows());

ret.put(“rows”, userService.findList(queryMap));

ret.put(“total”, userService.getTotal(queryMap));

return ret;

/**

添加用户

@param user

@return

*/

@RequestMapping(value=“/add”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> add(User user){

Map<String, String> ret = new HashMap<String, String>();

if(user == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写正确的用户信息!”);

return ret;

if(StringUtils.isEmpty(user.getUsername())){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写用户名!”);

return ret;

if(StringUtils.isEmpty(user.getPassword())){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写密码!”);

return ret;

if(user.getRoleId() == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请选择所属角色!”);

return ret;

if(isExist(user.getUsername(), 0l)){

ret.put(“type”, “error”);

ret.put(“msg”, “该用户名已经存在,请重新输入!”);

return ret;

if(userService.add(user) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “用户添加失败,请联系管理员!”);

return ret;

ret.put(“type”, “success”);

ret.put(“msg”, “角色添加成功!”);

return ret;

/**

编辑用户

@param user

@return

*/

@RequestMapping(value=“/edit”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> edit(User user){

Map<String, String> ret = new HashMap<String, String>();

if(user == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写正确的用户信息!”);

return ret;

if(StringUtils.isEmpty(user.getUsername())){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写用户名!”);

return ret;

// if(StringUtils.isEmpty(user.getPassword())){

// ret.put(“type”, “error”);

// ret.put(“msg”, “请填写密码!”);

// return ret;

// }

if(user.getRoleId() == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请选择所属角色!”);

return ret;

if(isExist(user.getUsername(), user.getId())){

ret.put(“type”, “error”);

ret.put(“msg”, “该用户名已经存在,请重新输入!”);

return ret;

if(userService.edit(user) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “用户添加失败,请联系管理员!”);

return ret;

ret.put(“type”, “success”);

ret.put(“msg”, “角色添加成功!”);

return ret;

/**

批量删除用户

@param ids

@return

*/

@RequestMapping(value=“/delete”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> delete(String ids){

Map<String, String> ret = new HashMap<String, String>();

if(StringUtils.isEmpty(ids)){

ret.put(“type”, “error”);

ret.put(“msg”, “选择要删除的数据!”);

return ret;

if(ids.contains(“,”)){

ids = ids.substring(0,ids.length()-1);

if(userService.delete(ids) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “用户删除失败,请联系管理员!”);

return ret;

ret.put(“type”, “success”);

ret.put(“msg”, “用户删除成功!”);

return ret;

/**

上传图片

@param photo

@param request

@return

*/

@RequestMapping(value=“/upload_photo”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> uploadPhoto(MultipartFile photo,HttpServletRequest request){

Map<String, String> ret = new HashMap<String, String>();

if(photo == null){

ret.put(“type”, “error”);

ret.put(“msg”, “选择要上传的文件!”);

return ret;

if(photo.getSize() > 102410241024){

ret.put(“type”, “error”);

ret.put(“msg”, “文件大小不能超过10M!”);

return ret;

//获取文件后缀

String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf(“.”)+1,photo.getOriginalFilename().length());

if(!“jpg,jpeg,gif,png”.toUpperCase().contains(suffix.toUpperCase())){

ret.put(“type”, “error”);

ret.put(“msg”, “请选择jpg,jpeg,gif,png格式的图片!”);

return ret;

String savePath = request.getServletContext().getRealPath(“/”) + “/resources/upload/”;

File savePathFile = new File(savePath);

if(!savePathFile.exists()){

//若不存在改目录,则创建目录

savePathFile.mkdir();

String filename = new Date().getTime()+“.”+suffix;

try {

//将文件保存至指定目录

photo.transferTo(new File(savePath+filename));

}catch (Exception e) {

// TODO Auto-generated catch block

ret.put(“type”, “error”);

ret.put(“msg”, “保存文件异常!”);

e.printStackTrace();

return ret;

ret.put(“type”, “success”);

ret.put(“msg”, “用户删除成功!”);

ret.put(“filepath”,request.getServletContext().getContextPath() + “/resources/upload/” + filename );

return ret;

/**

判断该用户名是否存在

@param username

@param id

@return

*/

private boolean isExist(String username,Long id){

User user = userService.findByUsername(username);

if(user == null)return false;

if(user.getId().longValue() == id.longValue())return false;

return true;

系统操作类控制器:

/**

系统操作类控制器

*/

@Controller

@RequestMapping(“/system”)

public class SystemController {

@Autowired

private UserService userService;

@Autowired

private RoleService roleService;

@Autowired

private AuthorityService authorityService;

@Autowired

private MenuService menuService;

@Autowired

private LogService logService;

/**

系统登录后的主页

@param model

@return

*/

@RequestMapping(value=“/index”,method=RequestMethod.GET)

public ModelAndView index(ModelAndView model,HttpServletRequest request){

List

userMenus = (List)request.getSession().getAttribute(“userMenus”);

model.addObject(“topMenuList”, MenuUtil.getAllTopMenu(userMenus));

model.addObject(“secondMenuList”, MenuUtil.getAllSecondMenu(userMenus));

model.setViewName(“system/index”);

return model;//WEB-INF/views/+system/index+.jsp = WEB-INF/views/system/index.jsp

/**

系统登录后的欢迎页

@param model

@return

*/

@RequestMapping(value=“/welcome”,method=RequestMethod.GET)

public ModelAndView welcome(ModelAndView model){

model.setViewName(“system/welcome”);

return model;

/**

登陆页面

@param model

@return

*/

@RequestMapping(value=“/login”,method=RequestMethod.GET)

public ModelAndView login(ModelAndView model){

model.setViewName(“system/login”);

return model;

/**

登录表单提交处理控制器

@param user

@param cpacha

@return

*/

@RequestMapping(value=“/login”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> loginAct(User user,String cpacha,HttpServletRequest request){

Map<String, String> ret = new HashMap<String, String>();

if(user == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写用户信息!”);

return ret;

if(StringUtils.isEmpty(cpacha)){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写验证码!”);

return ret;

if(StringUtils.isEmpty(user.getUsername())){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写用户名!”);

return ret;

if(StringUtils.isEmpty(user.getPassword())){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写密码!”);

return ret;

Object loginCpacha = request.getSession().getAttribute(“loginCpacha”);

if(loginCpacha == null){

ret.put(“type”, “error”);

ret.put(“msg”, “会话超时,请刷新页面!”);

return ret;

if(!cpacha.toUpperCase().equals(loginCpacha.toString().toUpperCase())){

ret.put(“type”, “error”);

ret.put(“msg”, “验证码错误!”);

logService.add(“用户名为”+user.getUsername()+“的用户登录时输入验证码错误!”);

return ret;

User findByUsername = userService.findByUsername(user.getUsername());

if(findByUsername == null){

ret.put(“type”, “error”);

ret.put(“msg”, “该用户名不存在!”);

logService.add(“登录时,用户名为”+user.getUsername()+“的用户不存在!”);

return ret;

if(!user.getPassword().equals(findByUsername.getPassword())){

ret.put(“type”, “error”);

ret.put(“msg”, “密码错误!”);

logService.add(“用户名为”+user.getUsername()+“的用户登录时输入密码错误!”);

return ret;

//说明用户名密码及验证码都正确

//此时需要查询用户的角色权限

Role role = roleService.find(findByUsername.getRoleId());

List authorityList = authorityService.findListByRoleId(role.getId());//根据角色获取权限列表

String menuIds = “”;

for(Authority authority:authorityList){

menuIds += authority.getMenuId() + “,”;

if(!StringUtils.isEmpty(menuIds)){

menuIds = menuIds.substring(0,menuIds.length()-1);

List

userMenus = menuService.findListByIds(menuIds);

//把角色信息、菜单信息放到session中

request.getSession().setAttribute(“admin”, findByUsername);

request.getSession().setAttribute(“role”, role);

request.getSession().setAttribute(“userMenus”, userMenus);

ret.put(“type”, “success”);

ret.put(“msg”, “登录成功!”);

logService.add(“用户名为{”+user.getUsername()+“},角色为{”+role.getName()+“}的用户登录成功!”);

return ret;

/**

后台退出注销功能

@param request

@return

*/

@RequestMapping(value=“/logout”,method=RequestMethod.GET)

public String logout(HttpServletRequest request){

HttpSession session = request.getSession();

session.setAttribute(“admin”, null);

session.setAttribute(“role”, null);

request.getSession().setAttribute(“userMenus”, null);

return “redirect:login”;

/**

修改密码页面

@param model

@return

*/

@RequestMapping(value=“/edit_password”,method=RequestMethod.GET)

public ModelAndView editPassword(ModelAndView model){

model.setViewName(“system/edit_password”);

return model;

@RequestMapping(value=“/edit_password”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> editPasswordAct(String newpassword,String oldpassword,HttpServletRequest request){

Map<String, String> ret = new HashMap<String, String>();

if(StringUtils.isEmpty(newpassword)){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写新密码!”);

return ret;

User user = (User)request.getSession().getAttribute(“admin”);

if(!user.getPassword().equals(oldpassword)){

ret.put(“type”, “error”);

ret.put(“msg”, “原密码错误!”);

return ret;

user.setPassword(newpassword);

if(userService.editPassword(user) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “密码修改失败,请联系管理员!”);

return ret;

ret.put(“type”, “success”);

ret.put(“msg”, “密码修改成功!”);

logService.add(“用户名为{”+user.getUsername()+“},的用户成功修改密码!”);

return ret;

/**

本系统所有的验证码均采用此方法

@param vcodeLen

@param width

@param height

@param cpachaType:用来区别验证码的类型,传入字符串

@param request

@param response

*/

@RequestMapping(value=“/get_cpacha”,method=RequestMethod.GET)

public void generateCpacha(

@RequestParam(name=“vl”,required=false,defaultValue=“4”) Integer vcodeLen,

@RequestParam(name=“w”,required=false,defaultValue=“100”) Integer width,

@RequestParam(name=“h”,required=false,defaultValue=“30”) Integer height,

@RequestParam(name=“type”,required=true,defaultValue=“loginCpacha”) String cpachaType,

HttpServletRequest request,

HttpServletResponse response){

CpachaUtil cpachaUtil = new CpachaUtil(vcodeLen, width, height);

String generatorVCode = cpachaUtil.generatorVCode();

request.getSession().setAttribute(cpachaType, generatorVCode);

BufferedImage generatorRotateVCodeImage = cpachaUtil.generatorRotateVCodeImage(generatorVCode, true);

try {

ImageIO.write(generatorRotateVCodeImage, “gif”, response.getOutputStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

订单管理后台控制器:

/**

订单管理后台控制器

*/

@RequestMapping(“/admin/book_order”)

@Controller

public class BookOrderController {

@Autowired

private AccountService accountService;

@Autowired

private RoomTypeService roomTypeService;

@Autowired

private BookOrderService bookOrderService;

/**

订单管理列表页面

@param model

@return

*/

@RequestMapping(value=“/list”,method=RequestMethod.GET)

public ModelAndView list(ModelAndView model){

model.addObject(“roomTypeList”, roomTypeService.findAll());

model.addObject(“accountList”, accountService.findAll());

model.setViewName(“book_order/list”);

return model;

/**

预定订单信息添加操作

@param bookOrder

@return

*/

@RequestMapping(value=“/add”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> add(BookOrder bookOrder){

Map<String, String> ret = new HashMap<String, String>();

if(bookOrder == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写正确的预定订单信息!”);

return ret;

if(bookOrder.getAccountId() == null){

ret.put(“type”, “error”);

ret.put(“msg”, “客户不能为空!”);

return ret;

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”, “预定订单联系人名称不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getMobile())){

ret.put(“type”, “error”);

ret.put(“msg”, “预定订单联系人手机号不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getIdCard())){

ret.put(“type”, “error”);

ret.put(“msg”, “联系人身份证号不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getArriveDate())){

ret.put(“type”, “error”);

ret.put(“msg”, “到达时间不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getLeaveDate())){

ret.put(“type”, “error”);

ret.put(“msg”, “离店时间不能为空!”);

return ret;

bookOrder.setCreateTime(new Date());

if(bookOrderService.add(bookOrder) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “添加失败,请联系管理员!”);

return ret;

RoomType roomType = roomTypeService.find(bookOrder.getRoomTypeId());

//预定成功后去修改该房型的预定数

if(roomType != null){

roomType.setBookNum(roomType.getBookNum() + 1);

roomType.setAvilableNum(roomType.getAvilableNum() - 1);

roomTypeService.updateNum(roomType);

//如果可用的房间数为0,则设置该房型状态已满

if(roomType.getAvilableNum() == 0){

roomType.setStatus(0);

roomTypeService.edit(roomType);

ret.put(“type”, “success”);

ret.put(“msg”, “添加成功!”);

return ret;

/**

预定订单信息编辑操作

@param account

@return

*/

@RequestMapping(value=“/edit”,method=RequestMethod.POST)

@ResponseBody

public Map<String, String> edit(BookOrder bookOrder){

Map<String, String> ret = new HashMap<String, String>();

if(bookOrder == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请填写正确的预定订单信息!”);

return ret;

if(bookOrder.getAccountId() == null){

ret.put(“type”, “error”);

ret.put(“msg”, “客户不能为空!”);

return ret;

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”, “预定订单联系人名称不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getMobile())){

ret.put(“type”, “error”);

ret.put(“msg”, “预定订单联系人手机号不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getIdCard())){

ret.put(“type”, “error”);

ret.put(“msg”, “联系人身份证号不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getArriveDate())){

ret.put(“type”, “error”);

ret.put(“msg”, “到达时间不能为空!”);

return ret;

if(StringUtils.isEmpty(bookOrder.getLeaveDate())){

ret.put(“type”, “error”);

ret.put(“msg”, “离店时间不能为空!”);

return ret;

BookOrder existBookOrder = bookOrderService.find(bookOrder.getId());

if(existBookOrder == null){

ret.put(“type”, “error”);

ret.put(“msg”, “请选择正确的数据进行编辑!”);

return ret;

if(bookOrderService.edit(bookOrder) <= 0){

ret.put(“type”, “error”);

ret.put(“msg”, “编辑失败,请联系管理员!”);

return ret;

//判断房型是否发生变化

if(existBookOrder.getRoomTypeId().longValue() != bookOrder.getRoomTypeId().longValue()){

//房型发生了变化

//首先恢复原来房型的预定数及可用数

RoomType oldRoomType = roomTypeService.find(existBookOrder.getRoomTypeId());

oldRoomType.setAvilableNum(oldRoomType.getAvilableNum() + 1);

oldRoomType.setBookNum(oldRoomType.getBookNum() - 1);

roomTypeService.updateNum(oldRoomType);

if(oldRoomType.getStatus() == 0){

//旧的房间原来是满房,现在不满房的话,恢复状态

if(oldRoomType.getAvilableNum() > 0){

//设置成状态可用

oldRoomType.setStatus(1);

roomTypeService.edit(oldRoomType);

//修改新的房型的可用数和预定数

RoomType newRoomType = roomTypeService.find(bookOrder.getRoomTypeId());

newRoomType.setAvilableNum(newRoomType.getAvilableNum() - 1);

newRoomType.setBookNum(newRoomType.getBookNum() + 1);

roomTypeService.updateNum(newRoomType);

if(newRoomType.getAvilableNum() <= 0){

//没有可用房间数

newRoomType.setStatus(0);//设置成满房

roomTypeService.edit(newRoomType);

ret.put(“type”, “success”);

ret.put(“msg”, “修改成功!”);

return ret;

/**

分页查询预定订单信息

@param name

@param page

@return

*/

@RequestMapping(value=“/list”,method=RequestMethod.POST)

@ResponseBody

public Map<String,Object> list(

@RequestParam(name=“name”,defaultValue=“”) String name,

@RequestParam(name=“accountId”,defaultValue=“”) Long accountId,

@RequestParam(name=“roomTypeId”,defaultValue=“”) Long roomTypeId,

@RequestParam(name=“idCard”,defaultValue=“”) String idCard,

@RequestParam(name=“mobile”,defaultValue=“”) String mobile,

@RequestParam(name=“status”,required=false) Integer status,

Page page

){

Map<String,Object> ret = new HashMap<String, Object>();

Map<String,Object> queryMap = new HashMap<String, Object>();

queryMap.put(“name”, name);

queryMap.put(“status”, status);

queryMap.put(“accountId”, accountId);

queryMap.put(“roomTypeId”, roomTypeId);

queryMap.put(“idCard”, idCard);

queryMap.put(“mobile”, mobile);

queryMap.put(“offset”, page.getOffset());

queryMap.put(“pageSize”, page.getRows());

ret.put(“rows”, bookOrderService.findList(queryMap));

ret.put(“total”, bookOrderService.getTotal(queryMap));

return ret;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。