Java项目:SSM餐厅点餐收银管理系统

作者主页:夜未央5788

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

文末获取源码

项目介绍

用于餐厅的收银管理系统,包含了四个模块
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数据库;

技术栈

1. 后端:Spring+SpringMVC+Mybatis

2. 前端:JSP+Bootstrap+jQuery

使用说明

1. 使用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

运行截图

 

 

 

 

 

 

 

代码相关

桌位管理控制器

@Controller
public class DeskController {
	@Autowired
	private DeskService deskService;
	@Resource(name="redisUtil")
	private RedisUtil redisUtil;
	@Autowired
	private DishMapper dishMapper;

	//显示桌位列表页面
	@RequestMapping(value="/desklist.html")
	public String showDeskList(Model model, HttpSession session, @RequestParam(required=false)String show){
		if(session.getAttribute("user")==null){//权限控制
			return "redirect:login.html";
		}
		List<Desk> desks=deskService.getDesks();
		model.addAttribute("desks", desks);
		if(!"desk".equals(show)){
			return "redirect:desklist.html?show=desk";
		}else{
			return "/desk/desklist";
		}
	}

	//桌位详情页面
	@RequestMapping(value="/deskinfo.html")
	public String showDeskInfo(@RequestParam(required=false)String id,Model model,HttpSession session){
		if(session.getAttribute("user")==null){//权限控制
			return "redirect:login.html";
		}
		Desk desk=null;
		int status=0;
		String deskCode=null;
		if(id!=null && id!=""){
			desk=deskService.getDeskById(id);
		}
		if(desk!=null){
			status=desk.getStatus();
			deskCode=desk.getDeskCode();
		}
		if(status==1){//如果桌位状态为空
			if(deskCode!=null && deskCode!=""){//传过来的桌位编号不为空时
				redisUtil.del(deskCode);//删除缓存内的桌位菜单信息
			}
		}else if(status==2){//如果桌位状态为未买单
			if(deskCode!=null && deskCode!=""){//传过来的桌位编号不为空时
				List<DeskInfo_detail> deskDish=redisUtil.getList(deskCode);//从缓存取出当前桌位的点菜信息
				Double totalMoney=0.0;//总计
				if (deskDish==null || deskDish.size()==0) {
					deskDish=new ArrayList<DeskInfo_detail>();
					redisUtil.addList(deskCode, deskDish);
				}
				for (int i = 0; i < deskDish.size(); i++) {
					if(deskDish.get(i).getCost()!=null){
						totalMoney+=deskDish.get(i).getCost();
					}			
				}
				model.addAttribute("totalMoney", totalMoney);
				model.addAttribute("deskDish", deskDish);
			}
		}
		List dishes=redisUtil.getList("allDishes");//先从缓存中查询
		if(dishes == null || dishes.size()==0){//如果缓存中没有则从数据库查
			dishes=dishMapper.getDish();
			redisUtil.addList("allDishes",dishes);
		}
		Dishes dishesUtil=Dishes.getDishes();//菜单工具类
		dishesUtil.setAllDish(dishes);//将查询出来的菜品放在工具类中
		dishesUtil.count();//格式化菜品(分类)
		//session.setAttribute("dishUtil",dishesUtil);
		model.addAttribute("desk", desk);
		return "/desk/deskinfo";
	}
	
	//ajax点菜
	@RequestMapping("/selectDish.do")
	@ResponseBody
	public Object selectDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
		List<DeskInfo_detail> deskDish=redisUtil.getList(deskCode);
		if(deskDish==null){
			deskDish=new ArrayList<DeskInfo_detail>();
			System.out.println("------------------------------新建桌位号"+deskCode+"菜单列表------------------------------");
		}
		boolean addFlag=true;//标记是否有相同的菜品,默认为true表名不存在相同菜名
		for (int i = 0; i < deskDish.size(); i++) {
			if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//如果存在相同的菜品
				int oldNum=deskDish.get(i).getDishNum();//得到原来的数目
				String newContent=deskInfo_detail.getContent();
				int newNum=oldNum+deskInfo_detail.getDishNum();//将新添加的数目和原来的数目相加得到新数目
				deskDish.get(i).setDishNum(newNum);//修改数目
				deskDish.get(i).setCost(newNum*deskDish.get(i).getPrice());//修改小计
				deskDish.get(i).setContent(newContent);
				addFlag=false;//存在相同的,将标记设置为false
				break;
			}
		}
		if(addFlag){//如果不存在相同的菜品,addFlag的值为true
			deskDish.add(deskInfo_detail);
		}		
		redisUtil.addList(deskCode, deskDish);//更新缓存
		return JSON.toJSONString(deskDish);
	}
	
	//更改桌位状态
	@RequestMapping("/changeStatus.do")
	@ResponseBody
	public Object changeDeskStatus(Desk desk){
		boolean flag=false;
		if(desk!=null){
			if(desk.getStatus()!=null && desk.getStatus()!=2 ){
				desk.setStatus(2);
				flag=deskService.updateDeskStatus(desk);
			}else{
				return JSON.toJSONString("OK");
			}
		}	
		if(flag){
			return JSON.toJSONString("OK");
		}else{
			return JSON.toJSONString("NO");
		}
	}
	
	//更改桌位
	@RequestMapping("/changeDesk.do")
	@ResponseBody
	public Object changeDesk(Desk desk){
		boolean flag=deskService.updateDesk(desk);
		String str="";
		if(flag){
			str="true";
		}else{
			str="false";
		}
		return JSON.toJSONString(str);
	}

	//更改菜品
	@RequestMapping("/updateDish.do")
	@ResponseBody
	public Object updateDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
		List<DeskInfo_detail> deskDish=redisUtil.getList(deskCode);
		for (int i = 0; i < deskDish.size(); i++) {
			if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//找到相同的菜品
				String newContent=deskInfo_detail.getContent();//得到新的备注
				int newNum=deskInfo_detail.getDishNum();//得到修改过后的数目
				deskDish.get(i).setDishNum(newNum);//修改数目
				deskDish.get(i).setCost(newNum*deskDish.get(i).getPrice());//修改小计
				deskDish.get(i).setContent(newContent);//修改备注
				redisUtil.addList(deskCode, deskDish);//更新缓存
				break;
			}
		}
		return JSON.toJSONString(deskDish);
	}
	
	//删除菜品
	@RequestMapping("/delDish.do")
	@ResponseBody
	public Object delDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
		List<DeskInfo_detail> deskDish=redisUtil.getList(deskCode);
		for (int i = 0; i < deskDish.size(); i++) {
			if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//找到相同的菜品
				deskDish.remove(i);//删除该菜品
				redisUtil.addList(deskCode, deskDish);//更新缓存
				break;
			}
		}
		return JSON.toJSONString(deskDish);
	}


	@ResponseBody
	@RequestMapping("/alldish.do")
	public ModelAndView showAlldish(ModelAndView modelAndView,
	Pager pager
	){
		Dishes dishes=Dishes.getDishes();
		if("allDish".equals(pager.getOpr())){
			pager.setTotalCount(dishes.getAllDishCount());
			pager.setPageSize(PagerTools.dishMenuPagerSize);
			pager.count();
			List<Dish> list=dishes.getAllDish(pager);
			pager.setList(list);
		}else if("soup".equals(pager.getOpr())){
			pager.setTotalCount(dishes.getSoupsCount());
			pager.setPageSize(PagerTools.dishMenuPagerSize);
			pager.count();
			List<Dish> list=dishes.getSoups(pager);
			pager.setList(list);
		}else if("fry".equals(pager.getOpr())){
			pager.setTotalCount(dishes.getFrysCount());
			pager.setPageSize(PagerTools.dishMenuPagerSize);
			pager.count();
			List<Dish> list=dishes.getFrys(pager);
			pager.setList(list);
		}else if("other".equals(pager.getOpr())){
			pager.setTotalCount(dishes.getOthersCount());
			pager.setPageSize(PagerTools.dishMenuPagerSize);
			pager.count();
			List<Dish> list=dishes.getOthers(pager);
			pager.setList(list);
		}else if("drink".equals(pager.getOpr())){
			pager.setTotalCount(dishes.getDrinksCount());
			pager.setPageSize(PagerTools.dishMenuPagerSize);
			pager.count();
			List<Dish> list=dishes.getDrinks(pager);
			pager.setList(list);
		}
		modelAndView.setViewName("/desk/dishMenu/allDish");
		modelAndView.addObject("pager",pager);
		return modelAndView;
	}


	//桌位维护
	//添加桌位 ajax验证
	@ResponseBody
	@RequestMapping("/deskCodeIsExist.do")
	public Object deskCodeIsExist(@RequestParam(required =false) String deskCode){
		boolean flag=deskService.isExist(deskCode);
		return flag?JSON.toJSONString("1"):JSON.toJSONString("0");
	}

	//添加桌位
	@ResponseBody
	@RequestMapping("/addDesk.do")
	public Object addDesk(Desk desk){
		System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"~~~~~~~~~~~~~~~~~~~~~");
		boolean flag=deskService.addDesk(desk);
		if(flag){
			System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"成功~~~~~~~~~~~~~~~~~~~~~");
		}else{
			System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"失败~~~~~~~~~~~~~~~~~~~~~");
		}
		return flag?JSON.toJSONString("1"):JSON.toJSONString("0");
	}

	//ajax分页加载桌位
	@ResponseBody
	@RequestMapping("/ajaxShowDesk.do")
	public ModelAndView ajaxShowDesk(DeskPager pager, ModelAndView modelAndView){
		modelAndView.setViewName("/daily/desk/deskList");
		pager.setPageSize(PagerTools.delDishListPagerSize);
		pager.setTotalCount(deskService.getTotalCount(pager));
		pager.count();
		pager.setList(deskService.getDesksByPager(pager));
		modelAndView.addObject("pager",pager);
		return modelAndView;
	}

	//删除桌位
	@ResponseBody
	@RequestMapping("/delDesk.do")
	public Object delDesk(@RequestParam(required=false) String id){
		int data=deskService.delDesk(id);
		return JSON.toJSONString(data);
	}

	//更改桌位
	@ResponseBody
	@RequestMapping("/alertDesk.do")
	public Object delDesk(Desk desk){
		boolean data=deskService.updateDesk(desk);
		return JSON.toJSONString(data?"1":"0");
	}


}

 登录管理控制器

@Controller
public class LoginController {
	@Autowired
	private UserService userService;
	
	//登录页面入口
	@RequestMapping(value="login.html",method=RequestMethod.GET)
	public String showLogin(){
		return "login";
	}
	
	//处理登录
	@RequestMapping(value="login.html",method=RequestMethod.POST)
	public String doLogin(User user,HttpSession session,Model model){
		User logUser=userService.login(user);
		if(logUser!=null){
			session.setAttribute("user", logUser);
			return "redirect:desklist.html?show=desk";
		}else{
			model.addAttribute("error", "账号和密码不匹配");
			return "login";
		}	
	}
	
	//处理注销
	@RequestMapping(value="/logout.html")
	public String logout(HttpSession session){
		session.invalidate();
		return "redirect:login.html";
	}
}

货物管理控制器

@Controller
public class DrinkController {
    @Autowired
    private ProviderService providerService;

    @RequestMapping("/drink.html")
    public String drink(HttpSession session) {
        if(session.getAttribute("user")==null){//权限控制
            return "redirect:login.html";
        }
        return "/drink/drink";
    }

    //加载供应下拉列表
    @RequestMapping("/loadProviderSelect.do")
    @ResponseBody
    public Object loadProviderSelect() {
        return JSON.toJSONString(providerService.getProvider());
    }

    //加载进货信息
    @RequestMapping("/loadDrinkBill.do")
    @ResponseBody
    public ModelAndView loadDrinkBill(ModelAndView modelAndView, DrinkBillPager pager) {
        int totalCount = providerService.getDrinkBillCount(pager);
        if (totalCount != 0) {
            pager.setTotalCount(totalCount);
        } else {
            pager.setTotalCount(1);
        }
        pager.setPageSize(PagerTools.drinkBillPagerSize);
        pager.count();
        pager.setList(providerService.getDrinkBill(pager));
        modelAndView.addObject("pager", pager);
        modelAndView.setViewName("/drink/ajaxJinhuoList");
        return modelAndView;
    }

    //加载进货信息
    @RequestMapping("/loadDrinkBillCode.do")
    @ResponseBody
    public Object loadDrinkBillCode(DrinkBillPager pager) {
        int totalCount = providerService.getDrinkBillCount(pager);
        if (totalCount != 0) {
            pager.setTotalCount(totalCount);
        } else {
            pager.setTotalCount(1);
        }
        pager.setPageSize(100);
        pager.count();
        List<Drinkbill> drinkBills=providerService.getDrinkBill(pager);
        return JSON.toJSONString(drinkBills);
    }

    //del删除进货信息
    @RequestMapping("/delDrinkBill.do")
    @ResponseBody
    public Object delDrinkBill(@RequestParam(required = false) String id) {
        providerService.delDrinkSellBill(id);
        return JSON.toJSONString(providerService.delDrinkBill(id));
    }

    //del删除销售信息
    @RequestMapping("/delDrinkSellBill.do")
    @ResponseBody
    public Object delDrinkSellBill(@RequestParam(required = false) String id) {
        return JSON.toJSONString(providerService.delDrinkSellBill(id));
    }

    //更新进货信息
    @RequestMapping("/updateDrinkBill.do")
    @ResponseBody
    public Object delDrinkBill(Drinkbill drinkbill) {
        drinkbill.setIsPay(2);
        return JSON.toJSONString(providerService.updateDrinkBill(drinkbill));
    }

    //添加进货信息
    @RequestMapping("/addDrinkBill.do")
    @ResponseBody
    public Object addDrinkBill(Drinkbill drinkbill, DrinkSellBill drinkSellBill) {
        String drinkBillCode = BillCodeUtil.getBillCode();
        drinkbill.setDrinbillCode(drinkBillCode);
        int addDrinkBillFlag = providerService.addDrinkBill(drinkbill);
        drinkSellBill.setDrinkbillId(drinkbill.getId());
        drinkSellBill.setDrinkBillCode(drinkBillCode);
        int addDrinkSellBillFlag = providerService.addDrinkSellBill(drinkSellBill);
        return "{\"addDrinkBillFlag\":\"" + addDrinkBillFlag + "\",\"addDrinkSellBillFlag\":\"" + addDrinkSellBillFlag + "\"}";
    }

    //加载销售信息
    @RequestMapping("/loadDrinkSellBill.do")
    @ResponseBody
    public ModelAndView loadDrinkSellBill(ModelAndView modelAndView, DrinkBillPager pager) {
        int totalCount = providerService.getDrinkSellBillCount(pager);
        if (totalCount != 0) {
            pager.setTotalCount(totalCount);
        } else {
            pager.setTotalCount(1);
        }
        pager.setPageSize(PagerTools.drinkBillPagerSize);
        pager.count();
        pager.setList(providerService.getDrinkSellBill(pager));
        modelAndView.addObject("pager", pager);
        modelAndView.setViewName("/drink/sellList");
        return modelAndView;
    }

    //加载销售信息
    @RequestMapping("/loadSuplusDrinkBill.do")
    @ResponseBody
    public ModelAndView loadSuplusDrinkBill(ModelAndView modelAndView, DrinkBillPager pager) {
        int totalCount = providerService.getDrinkSellBillCount(pager);
        if (totalCount != 0) {
            pager.setTotalCount(totalCount);
        } else {
            pager.setTotalCount(1);
        }
        pager.setPageSize(PagerTools.drinkBillPagerSize);
        pager.count();
        pager.setList(providerService.getSuplusDrinkBill(pager));
        modelAndView.addObject("pager", pager);
        modelAndView.setViewName("/drink/suplusDrinkBillList");
        return modelAndView;
    }

    //添加供应商
    @RequestMapping("/addProvider.do")
    @ResponseBody
    public Object addProvider(Provider provider){
        return JSON.toJSONString(providerService.addProvider(provider));
    }
    //验证供应商是否存在
    @RequestMapping("/isProExist.do")
    @ResponseBody
    public Object isProExist(@RequestParam(required = false) String proName){
        return JSON.toJSONString(providerService.isProExist(proName));
    }
    //加载供应商列表
    @RequestMapping("/showProviderList.do")
    public ModelAndView showProviderList(ModelAndView modelAndView,Pager pager){
        pager.setTotalCount(providerService.getTotalCount(pager));
        pager.setPageSize(3);
        pager.count();
        if("".equals(pager.getOpr()) || pager.getOpr()==null){
            modelAndView.addObject("provider",providerService.getProviderList(pager).get(0));
            modelAndView.setViewName("daily/provider/updateProvider");
        }else{
            pager.setList(providerService.getProviderList(pager));
            modelAndView.setViewName("daily/provider/providerList");
            modelAndView.addObject("pager",pager);
        }
        return modelAndView;
    }
    //删除供应商
    @RequestMapping("/delProviderById.do")
    @ResponseBody
    public Object delProviderById(Pager pager){
        return JSON.toJSONString(providerService.delProviderById(pager));
    }
    //更改供应商
    @RequestMapping("/updateProvider.do")
    @ResponseBody
    public Object updateProvider(Provider provider){
        return JSON.toJSONString(providerService.updateProvider(provider));
    }
}

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
"SSM服装出租服装店租赁服装管理系统" 是一个基于Java项目。该系统旨在帮助服装店有效管理其库存、租赁流程和顾客信息,以提升运营效率。 该系统的主要功能包括库存管理,租赁管理和顾客管理。首先,库存管理模块允许店主添加、删除和更新服装的详细信息,包括服装名称、类型、尺码和价格等。店主可以通过该模块随时了解实时库存情况,并及时补充库存。其次,租赁管理模块允许店主记录租赁订单,包括租赁日期、租赁时长和顾客信息等。系统可以自动计算租赁费用并生成相应的发票。最后,顾客管理模块允许店主维护顾客的基本信息,并记录顾客的租赁历史以及积累的租赁次数和会员等级。 为了提高系统的稳定性和安全性,该项目采用SSM(Spring+Spring MVC+MyBatis)框架进行开发。Spring作为业务层框架,负责处理系统的业务逻辑;Spring MVC作为视图层框架,负责接收用户请求和展示数据;MyBatis作为持久层框架,负责与数据库进行交互。此外,项目还使用MySQL作为数据库,保证数据的可靠存储和快速检索。 该项目的优势在于提高了服装店的管理效率。通过系统化的库存管理和租赁管理,店主可以实时掌握库存情况和租赁订单,避免了重复和遗漏,提高了工作效率。而顾客管理模块的引入,使店主能够更好地了解顾客的需求和偏好,从而提供个性化的服务,增加顾客的满意度和忠诚度。 综上所述,SSM服装出租服装店租赁服装管理系统是一个基于Java开发的项目,旨在提高服装店的库存管理、租赁管理和顾客管理效率。该系统通过SSM框架和MySQL数据库的应用,保证了系统的稳定性和安全性。它的优势在于提高了店主的工作效率和顾客满意度,帮助服装店实现更好的运营表现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央5788

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值