• 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

    运行截图

     

     

     

     

     

     

     

    代码相关

    桌位管理控制器

    1. @Controller
    2. public class DeskController {
    3. @Autowired
    4. private DeskService deskService;
    5. @Resource(name="redisUtil")
    6. private RedisUtil redisUtil;
    7. @Autowired
    8. private DishMapper dishMapper;
    9. //显示桌位列表页面
    10. @RequestMapping(value="/desklist.html")
    11. public String showDeskList(Model model, HttpSession session, @RequestParam(required=false)String show){
    12. if(session.getAttribute("user")==null){//权限控制
    13. return "redirect:login.html";
    14. }
    15. List desks=deskService.getDesks();
    16. model.addAttribute("desks", desks);
    17. if(!"desk".equals(show)){
    18. return "redirect:desklist.html?show=desk";
    19. }else{
    20. return "/desk/desklist";
    21. }
    22. }
    23. //桌位详情页面
    24. @RequestMapping(value="/deskinfo.html")
    25. public String showDeskInfo(@RequestParam(required=false)String id,Model model,HttpSession session){
    26. if(session.getAttribute("user")==null){//权限控制
    27. return "redirect:login.html";
    28. }
    29. Desk desk=null;
    30. int status=0;
    31. String deskCode=null;
    32. if(id!=null && id!=""){
    33. desk=deskService.getDeskById(id);
    34. }
    35. if(desk!=null){
    36. status=desk.getStatus();
    37. deskCode=desk.getDeskCode();
    38. }
    39. if(status==1){//如果桌位状态为空
    40. if(deskCode!=null && deskCode!=""){//传过来的桌位编号不为空时
    41. redisUtil.del(deskCode);//删除缓存内的桌位菜单信息
    42. }
    43. }else if(status==2){//如果桌位状态为未买单
    44. if(deskCode!=null && deskCode!=""){//传过来的桌位编号不为空时
    45. List deskDish=redisUtil.getList(deskCode);//从缓存取出当前桌位的点菜信息
    46. Double totalMoney=0.0;//总计
    47. if (deskDish==null || deskDish.size()==0) {
    48. deskDish=new ArrayList();
    49. redisUtil.addList(deskCode, deskDish);
    50. }
    51. for (int i = 0; i < deskDish.size(); i++) {
    52. if(deskDish.get(i).getCost()!=null){
    53. totalMoney+=deskDish.get(i).getCost();
    54. }
    55. }
    56. model.addAttribute("totalMoney", totalMoney);
    57. model.addAttribute("deskDish", deskDish);
    58. }
    59. }
    60. List dishes=redisUtil.getList("allDishes");//先从缓存中查询
    61. if(dishes == null || dishes.size()==0){//如果缓存中没有则从数据库查
    62. dishes=dishMapper.getDish();
    63. redisUtil.addList("allDishes",dishes);
    64. }
    65. Dishes dishesUtil=Dishes.getDishes();//菜单工具类
    66. dishesUtil.setAllDish(dishes);//将查询出来的菜品放在工具类中
    67. dishesUtil.count();//格式化菜品(分类)
    68. //session.setAttribute("dishUtil",dishesUtil);
    69. model.addAttribute("desk", desk);
    70. return "/desk/deskinfo";
    71. }
    72. //ajax点菜
    73. @RequestMapping("/selectDish.do")
    74. @ResponseBody
    75. public Object selectDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
    76. List deskDish=redisUtil.getList(deskCode);
    77. if(deskDish==null){
    78. deskDish=new ArrayList();
    79. System.out.println("------------------------------新建桌位号"+deskCode+"菜单列表------------------------------");
    80. }
    81. boolean addFlag=true;//标记是否有相同的菜品,默认为true表名不存在相同菜名
    82. for (int i = 0; i < deskDish.size(); i++) {
    83. if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//如果存在相同的菜品
    84. int oldNum=deskDish.get(i).getDishNum();//得到原来的数目
    85. String newContent=deskInfo_detail.getContent();
    86. int newNum=oldNum+deskInfo_detail.getDishNum();//将新添加的数目和原来的数目相加得到新数目
    87. deskDish.get(i).setDishNum(newNum);//修改数目
    88. deskDish.get(i).setCost(newNum*deskDish.get(i).getPrice());//修改小计
    89. deskDish.get(i).setContent(newContent);
    90. addFlag=false;//存在相同的,将标记设置为false
    91. break;
    92. }
    93. }
    94. if(addFlag){//如果不存在相同的菜品,addFlag的值为true
    95. deskDish.add(deskInfo_detail);
    96. }
    97. redisUtil.addList(deskCode, deskDish);//更新缓存
    98. return JSON.toJSONString(deskDish);
    99. }
    100. //更改桌位状态
    101. @RequestMapping("/changeStatus.do")
    102. @ResponseBody
    103. public Object changeDeskStatus(Desk desk){
    104. boolean flag=false;
    105. if(desk!=null){
    106. if(desk.getStatus()!=null && desk.getStatus()!=2 ){
    107. desk.setStatus(2);
    108. flag=deskService.updateDeskStatus(desk);
    109. }else{
    110. return JSON.toJSONString("OK");
    111. }
    112. }
    113. if(flag){
    114. return JSON.toJSONString("OK");
    115. }else{
    116. return JSON.toJSONString("NO");
    117. }
    118. }
    119. //更改桌位
    120. @RequestMapping("/changeDesk.do")
    121. @ResponseBody
    122. public Object changeDesk(Desk desk){
    123. boolean flag=deskService.updateDesk(desk);
    124. String str="";
    125. if(flag){
    126. str="true";
    127. }else{
    128. str="false";
    129. }
    130. return JSON.toJSONString(str);
    131. }
    132. //更改菜品
    133. @RequestMapping("/updateDish.do")
    134. @ResponseBody
    135. public Object updateDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
    136. List deskDish=redisUtil.getList(deskCode);
    137. for (int i = 0; i < deskDish.size(); i++) {
    138. if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//找到相同的菜品
    139. String newContent=deskInfo_detail.getContent();//得到新的备注
    140. int newNum=deskInfo_detail.getDishNum();//得到修改过后的数目
    141. deskDish.get(i).setDishNum(newNum);//修改数目
    142. deskDish.get(i).setCost(newNum*deskDish.get(i).getPrice());//修改小计
    143. deskDish.get(i).setContent(newContent);//修改备注
    144. redisUtil.addList(deskCode, deskDish);//更新缓存
    145. break;
    146. }
    147. }
    148. return JSON.toJSONString(deskDish);
    149. }
    150. //删除菜品
    151. @RequestMapping("/delDish.do")
    152. @ResponseBody
    153. public Object delDish(DeskInfo_detail deskInfo_detail,@RequestParam(required=false)String deskCode){
    154. List deskDish=redisUtil.getList(deskCode);
    155. for (int i = 0; i < deskDish.size(); i++) {
    156. if(deskDish.get(i).getDishName().equals(deskInfo_detail.getDishName())){//找到相同的菜品
    157. deskDish.remove(i);//删除该菜品
    158. redisUtil.addList(deskCode, deskDish);//更新缓存
    159. break;
    160. }
    161. }
    162. return JSON.toJSONString(deskDish);
    163. }
    164. @ResponseBody
    165. @RequestMapping("/alldish.do")
    166. public ModelAndView showAlldish(ModelAndView modelAndView,
    167. Pager pager
    168. ){
    169. Dishes dishes=Dishes.getDishes();
    170. if("allDish".equals(pager.getOpr())){
    171. pager.setTotalCount(dishes.getAllDishCount());
    172. pager.setPageSize(PagerTools.dishMenuPagerSize);
    173. pager.count();
    174. List list=dishes.getAllDish(pager);
    175. pager.setList(list);
    176. }else if("soup".equals(pager.getOpr())){
    177. pager.setTotalCount(dishes.getSoupsCount());
    178. pager.setPageSize(PagerTools.dishMenuPagerSize);
    179. pager.count();
    180. List list=dishes.getSoups(pager);
    181. pager.setList(list);
    182. }else if("fry".equals(pager.getOpr())){
    183. pager.setTotalCount(dishes.getFrysCount());
    184. pager.setPageSize(PagerTools.dishMenuPagerSize);
    185. pager.count();
    186. List list=dishes.getFrys(pager);
    187. pager.setList(list);
    188. }else if("other".equals(pager.getOpr())){
    189. pager.setTotalCount(dishes.getOthersCount());
    190. pager.setPageSize(PagerTools.dishMenuPagerSize);
    191. pager.count();
    192. List list=dishes.getOthers(pager);
    193. pager.setList(list);
    194. }else if("drink".equals(pager.getOpr())){
    195. pager.setTotalCount(dishes.getDrinksCount());
    196. pager.setPageSize(PagerTools.dishMenuPagerSize);
    197. pager.count();
    198. List list=dishes.getDrinks(pager);
    199. pager.setList(list);
    200. }
    201. modelAndView.setViewName("/desk/dishMenu/allDish");
    202. modelAndView.addObject("pager",pager);
    203. return modelAndView;
    204. }
    205. //桌位维护
    206. //添加桌位 ajax验证
    207. @ResponseBody
    208. @RequestMapping("/deskCodeIsExist.do")
    209. public Object deskCodeIsExist(@RequestParam(required =false) String deskCode){
    210. boolean flag=deskService.isExist(deskCode);
    211. return flag?JSON.toJSONString("1"):JSON.toJSONString("0");
    212. }
    213. //添加桌位
    214. @ResponseBody
    215. @RequestMapping("/addDesk.do")
    216. public Object addDesk(Desk desk){
    217. System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"~~~~~~~~~~~~~~~~~~~~~");
    218. boolean flag=deskService.addDesk(desk);
    219. if(flag){
    220. System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"成功~~~~~~~~~~~~~~~~~~~~~");
    221. }else{
    222. System.out.println("~~~~~~~~~~~~~~~~~~~~~添加桌位:"+desk.getDeskCode()+"失败~~~~~~~~~~~~~~~~~~~~~");
    223. }
    224. return flag?JSON.toJSONString("1"):JSON.toJSONString("0");
    225. }
    226. //ajax分页加载桌位
    227. @ResponseBody
    228. @RequestMapping("/ajaxShowDesk.do")
    229. public ModelAndView ajaxShowDesk(DeskPager pager, ModelAndView modelAndView){
    230. modelAndView.setViewName("/daily/desk/deskList");
    231. pager.setPageSize(PagerTools.delDishListPagerSize);
    232. pager.setTotalCount(deskService.getTotalCount(pager));
    233. pager.count();
    234. pager.setList(deskService.getDesksByPager(pager));
    235. modelAndView.addObject("pager",pager);
    236. return modelAndView;
    237. }
    238. //删除桌位
    239. @ResponseBody
    240. @RequestMapping("/delDesk.do")
    241. public Object delDesk(@RequestParam(required=false) String id){
    242. int data=deskService.delDesk(id);
    243. return JSON.toJSONString(data);
    244. }
    245. //更改桌位
    246. @ResponseBody
    247. @RequestMapping("/alertDesk.do")
    248. public Object delDesk(Desk desk){
    249. boolean data=deskService.updateDesk(desk);
    250. return JSON.toJSONString(data?"1":"0");
    251. }
    252. }

     登录管理控制器

    1. @Controller
    2. public class LoginController {
    3. @Autowired
    4. private UserService userService;
    5. //登录页面入口
    6. @RequestMapping(value="login.html",method=RequestMethod.GET)
    7. public String showLogin(){
    8. return "login";
    9. }
    10. //处理登录
    11. @RequestMapping(value="login.html",method=RequestMethod.POST)
    12. public String doLogin(User user,HttpSession session,Model model){
    13. User logUser=userService.login(user);
    14. if(logUser!=null){
    15. session.setAttribute("user", logUser);
    16. return "redirect:desklist.html?show=desk";
    17. }else{
    18. model.addAttribute("error", "账号和密码不匹配");
    19. return "login";
    20. }
    21. }
    22. //处理注销
    23. @RequestMapping(value="/logout.html")
    24. public String logout(HttpSession session){
    25. session.invalidate();
    26. return "redirect:login.html";
    27. }
    28. }

    货物管理控制器

    1. @Controller
    2. public class DrinkController {
    3. @Autowired
    4. private ProviderService providerService;
    5. @RequestMapping("/drink.html")
    6. public String drink(HttpSession session) {
    7. if(session.getAttribute("user")==null){//权限控制
    8. return "redirect:login.html";
    9. }
    10. return "/drink/drink";
    11. }
    12. //加载供应下拉列表
    13. @RequestMapping("/loadProviderSelect.do")
    14. @ResponseBody
    15. public Object loadProviderSelect() {
    16. return JSON.toJSONString(providerService.getProvider());
    17. }
    18. //加载进货信息
    19. @RequestMapping("/loadDrinkBill.do")
    20. @ResponseBody
    21. public ModelAndView loadDrinkBill(ModelAndView modelAndView, DrinkBillPager pager) {
    22. int totalCount = providerService.getDrinkBillCount(pager);
    23. if (totalCount != 0) {
    24. pager.setTotalCount(totalCount);
    25. } else {
    26. pager.setTotalCount(1);
    27. }
    28. pager.setPageSize(PagerTools.drinkBillPagerSize);
    29. pager.count();
    30. pager.setList(providerService.getDrinkBill(pager));
    31. modelAndView.addObject("pager", pager);
    32. modelAndView.setViewName("/drink/ajaxJinhuoList");
    33. return modelAndView;
    34. }
    35. //加载进货信息
    36. @RequestMapping("/loadDrinkBillCode.do")
    37. @ResponseBody
    38. public Object loadDrinkBillCode(DrinkBillPager pager) {
    39. int totalCount = providerService.getDrinkBillCount(pager);
    40. if (totalCount != 0) {
    41. pager.setTotalCount(totalCount);
    42. } else {
    43. pager.setTotalCount(1);
    44. }
    45. pager.setPageSize(100);
    46. pager.count();
    47. List drinkBills=providerService.getDrinkBill(pager);
    48. return JSON.toJSONString(drinkBills);
    49. }
    50. //del删除进货信息
    51. @RequestMapping("/delDrinkBill.do")
    52. @ResponseBody
    53. public Object delDrinkBill(@RequestParam(required = false) String id) {
    54. providerService.delDrinkSellBill(id);
    55. return JSON.toJSONString(providerService.delDrinkBill(id));
    56. }
    57. //del删除销售信息
    58. @RequestMapping("/delDrinkSellBill.do")
    59. @ResponseBody
    60. public Object delDrinkSellBill(@RequestParam(required = false) String id) {
    61. return JSON.toJSONString(providerService.delDrinkSellBill(id));
    62. }
    63. //更新进货信息
    64. @RequestMapping("/updateDrinkBill.do")
    65. @ResponseBody
    66. public Object delDrinkBill(Drinkbill drinkbill) {
    67. drinkbill.setIsPay(2);
    68. return JSON.toJSONString(providerService.updateDrinkBill(drinkbill));
    69. }
    70. //添加进货信息
    71. @RequestMapping("/addDrinkBill.do")
    72. @ResponseBody
    73. public Object addDrinkBill(Drinkbill drinkbill, DrinkSellBill drinkSellBill) {
    74. String drinkBillCode = BillCodeUtil.getBillCode();
    75. drinkbill.setDrinbillCode(drinkBillCode);
    76. int addDrinkBillFlag = providerService.addDrinkBill(drinkbill);
    77. drinkSellBill.setDrinkbillId(drinkbill.getId());
    78. drinkSellBill.setDrinkBillCode(drinkBillCode);
    79. int addDrinkSellBillFlag = providerService.addDrinkSellBill(drinkSellBill);
    80. return "{\"addDrinkBillFlag\":\"" + addDrinkBillFlag + "\",\"addDrinkSellBillFlag\":\"" + addDrinkSellBillFlag + "\"}";
    81. }
    82. //加载销售信息
    83. @RequestMapping("/loadDrinkSellBill.do")
    84. @ResponseBody
    85. public ModelAndView loadDrinkSellBill(ModelAndView modelAndView, DrinkBillPager pager) {
    86. int totalCount = providerService.getDrinkSellBillCount(pager);
    87. if (totalCount != 0) {
    88. pager.setTotalCount(totalCount);
    89. } else {
    90. pager.setTotalCount(1);
    91. }
    92. pager.setPageSize(PagerTools.drinkBillPagerSize);
    93. pager.count();
    94. pager.setList(providerService.getDrinkSellBill(pager));
    95. modelAndView.addObject("pager", pager);
    96. modelAndView.setViewName("/drink/sellList");
    97. return modelAndView;
    98. }
    99. //加载销售信息
    100. @RequestMapping("/loadSuplusDrinkBill.do")
    101. @ResponseBody
    102. public ModelAndView loadSuplusDrinkBill(ModelAndView modelAndView, DrinkBillPager pager) {
    103. int totalCount = providerService.getDrinkSellBillCount(pager);
    104. if (totalCount != 0) {
    105. pager.setTotalCount(totalCount);
    106. } else {
    107. pager.setTotalCount(1);
    108. }
    109. pager.setPageSize(PagerTools.drinkBillPagerSize);
    110. pager.count();
    111. pager.setList(providerService.getSuplusDrinkBill(pager));
    112. modelAndView.addObject("pager", pager);
    113. modelAndView.setViewName("/drink/suplusDrinkBillList");
    114. return modelAndView;
    115. }
    116. //添加供应商
    117. @RequestMapping("/addProvider.do")
    118. @ResponseBody
    119. public Object addProvider(Provider provider){
    120. return JSON.toJSONString(providerService.addProvider(provider));
    121. }
    122. //验证供应商是否存在
    123. @RequestMapping("/isProExist.do")
    124. @ResponseBody
    125. public Object isProExist(@RequestParam(required = false) String proName){
    126. return JSON.toJSONString(providerService.isProExist(proName));
    127. }
    128. //加载供应商列表
    129. @RequestMapping("/showProviderList.do")
    130. public ModelAndView showProviderList(ModelAndView modelAndView,Pager pager){
    131. pager.setTotalCount(providerService.getTotalCount(pager));
    132. pager.setPageSize(3);
    133. pager.count();
    134. if("".equals(pager.getOpr()) || pager.getOpr()==null){
    135. modelAndView.addObject("provider",providerService.getProviderList(pager).get(0));
    136. modelAndView.setViewName("daily/provider/updateProvider");
    137. }else{
    138. pager.setList(providerService.getProviderList(pager));
    139. modelAndView.setViewName("daily/provider/providerList");
    140. modelAndView.addObject("pager",pager);
    141. }
    142. return modelAndView;
    143. }
    144. //删除供应商
    145. @RequestMapping("/delProviderById.do")
    146. @ResponseBody
    147. public Object delProviderById(Pager pager){
    148. return JSON.toJSONString(providerService.delProviderById(pager));
    149. }
    150. //更改供应商
    151. @RequestMapping("/updateProvider.do")
    152. @ResponseBody
    153. public Object updateProvider(Provider provider){
    154. return JSON.toJSONString(providerService.updateProvider(provider));
    155. }
    156. }

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

  • 相关阅读:
    简单使用 Hugo 博客
    卸载各种方式安装的K8S集群
    【MySQL】查询语句
    vue3 父组件使用ref获取获取子组件的属性方法
    web课程设计【网页设计】期末大作业html+css(个人网站)
    Spring中InitializingBean接口的功能
    vue单页面应用使用 history模式路由时刷新页面404的一种可能性
    ABB机器人关于重定位移动讲解
    [SQL开发笔记]创建SQL数据库
    1-2Java程序运行机制以及运行过程
  • 原文地址:https://blog.csdn.net/hanyunlong1989/article/details/126539469