请参考前面的第一篇博文
流程图


SysManger类代码片段

if(checkIsLogin()){System.out.println("1:我要下单 2:签收 3:订单管理 4:退出 \n选择输入:");int choose=sc.nextInt();if(choose==1){// 下订单,进入OrderServiceorder.order(LOGINEDUSER.getId());// 每执行完一步操作询问用户是返回主菜单还是直接退出areYouReturn();return;}if(choose==2){// 进入OrderService处理// 每执行完一步操作询问用户是返回主菜单还是直接退出areYouReturn();return;}if(choose==3){// OrderService处理// 每执行完一步操作询问用户是返回主菜单还是直接退出areYouReturn();return;}System.out.println("byebye");LOGINEDUSER.setLogin(false);// 退出系统把当前用户 isLogin设为falseSystem.exit(3);}

OrderService.java

package org.jnx.service;import org.apache.ibatis.session.SqlSession;
import org.jnx.exp.CopeException;
import org.jnx.mapper.OrderDetailMapper;
import org.jnx.mapper.OrderMapper;
import org.jnx.pojo.Order;
import org.jnx.pojo.OrderDetail;
import org.jnx.pojo.Produce;
import org.jnx.util.MyBatisUtil;
import org.jnx.util.SecurityUtils;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class OrderService {Scanner sc = new Scanner(System.in);/*** 下订单,需要执行以下步骤* 1: 查询列表,注意分页,1页5条记录,查询所有的菜单项* 2: 建立订单项集合* 3: 显示订单项信息* 4: 订单项集合加入订单中,向数据库进行批量添加* */public void order(Integer userId){//   1:分页显示所有的产品,注意方法的内聚性,一个方法只干一件事//  查询列表,注意分页,1页5条记录,查询所有的菜单项ProduceService service=new ProduceService();try {service.quaryItemByPage(1, 5);} catch (CopeException e) {System.out.println(e.getMessage());System.out.println("系统从新调回翻页");service.quaryItemByPage(1, 5);}// 2:建立订单项集合. 点餐,将订单项添加到集合中List<OrderDetail> orderDetails=new ArrayList<>();OrderDetailService detail=new OrderDetailService();detail.chooseCaiPinItem(orderDetails);// 4: 订单项集合加入订单中,向数据库进行批量添加Order order=new Order();order.setUserId(userId);order.setOrderDetails(orderDetails);addBatchOrder(order);// 3:显示订单项信息showItemInfo(orderDetails);}private void showItemInfo(List<OrderDetail> orderDetails){System.out.println("您于"+SecurityUtils.formateDate(new Date())+"订购了");System.out.println("菜品ID\t菜品名称\t分数\t单价\t价格");orderDetails.forEach(e->{System.out.println(e.getProduce().getId() + "\t" + e.getProduce().getProname() + "\t" + e.getNum() + "\t" + e.getProduce().getPrice() + "\t" + e.getTotalPrice());});}/*** 3: 订单项集合加入订单中,向数据库进行批量添加 具体实现方法* */private void addBatchOrder( Order order){SqlSession sqlSession=null;try {// 获取订单集合List<OrderDetail> orderDetails = order.getOrderDetails();// 对订单执行批量插入try {sqlSession = MyBatisUtil.openSession();int i = sqlSession.getMapper(OrderMapper.class).saveOrder(order);sqlSession.getMapper(OrderDetailMapper.class).saveOrderDetail(order.getOrderId(),orderDetails);sqlSession.commit();} catch (Exception e) {sqlSession.rollback();e.printStackTrace();} finally {MyBatisUtil.closeSession(sqlSession);}} catch (Exception e) {/*这里的错误可能发生在*/System.out.println("发生错误,从新选择 错误code:500"+e.getMessage());}}
}

ProduceService.java代码

package org.jnx.service;import org.apache.ibatis.session.SqlSession;
import org.jnx.exp.CopeException;
import org.jnx.exp.ErrorEnum;
import org.jnx.mapper.OrderDetailMapper;
import org.jnx.mapper.OrderMapper;
import org.jnx.mapper.ProduceMapper;
import org.jnx.pojo.Order;
import org.jnx.pojo.OrderDetail;
import org.jnx.pojo.Produce;
import org.jnx.util.MyBatisUtil;
import org.jnx.util.SecurityUtils;import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class ProduceService {Scanner sc=new Scanner(System.in);/*** 查询所有的菜品列表* @param curPage 当前页* @param pageSize 每页条数* */public void quaryItemByPage(Integer curPage,Integer pageSize) throws CopeException{SqlSession sqlSession = MyBatisUtil.openSession();int count = 0;List<Produce> produces = null;try {// 查询一共有多少条记录count = sqlSession.getMapper(ProduceMapper.class).count();// 查询当前页的菜品produces = sqlSession.getMapper(ProduceMapper.class).queryAll((curPage-1)*pageSize, pageSize);} catch (Exception e) {throw new CopeException(e);} finally {MyBatisUtil.closeSession(sqlSession);}System.out.println("输入页码翻页,点餐按:0");// 显示页码,放在工具类里面,提高代码的复用性SecurityUtils.showPageNum(count);System.out.println("菜品ID\t菜品名称\t销售量\t库存量\t单价");produces.forEach(e->{System.out.print(e.getId() + "\t\t" + e.getProname()+ "\t\t" + e.getSellnum()+ "\t\t" + e.getStock() + "\t\t"+ e.getPrice()+"\n");});//     显示页码SecurityUtils.showPageNum(count);System.out.println("请输入操作 输入页数翻页,点餐按 :0");int choose = sc.nextInt();/* 这里应该判断输入是否合法,输入的数字只能在0--总页数之间*/if(choose<0 || choose>count){throw  new CopeException(ErrorEnum.PAGEOUTOFLIMIT);}// 如果不是0 代表翻页if(choose !=0){quaryItemByPage(choose, 5);}}// 根据产品的ID查询产品信息public Produce queryProduceById(Serializable id){Produce produce = null;SqlSession sqlSession = MyBatisUtil.openSession();try {produce = sqlSession.getMapper(ProduceMapper.class).queryById(id);} catch (Exception e) {throw new CopeException(ErrorEnum.UNKONERROR);} finally {MyBatisUtil.closeSession(sqlSession);}return produce;}}

OrderDetailService.java

package org.jnx.service;import org.jnx.exp.CopeException;
import org.jnx.exp.ErrorEnum;
import org.jnx.pojo.OrderDetail;
import org.jnx.pojo.Produce;
import org.jnx.util.MyBatisUtil;import java.math.BigDecimal;
import java.util.List;
import java.util.Scanner;public class OrderDetailService {/*** 选择菜品项* */Scanner sc=new Scanner(System.in);/*** 选择订单项操作* */public void chooseCaiPinItem(List<OrderDetail> detailList){// 这里需要根据选择的产品ID获取产品的信息ProduceService produceService=new ProduceService();// 生成订单项实体对象OrderDetail detail=new OrderDetail();System.out.println("请输入菜品ID:");int id=sc.nextInt();System.out.println("请输入订购份数");int num=sc.nextInt();// 根据ID到数据库查询该产品的数据信息Produce produce = produceService.queryProduceById(id);// 检查如果超出库存数量 抛出异常if(num> produce.getStock()){throw  new CopeException(ErrorEnum.OUTOFSTOCK);}detail.setProduce(produce);detail.setNum(num);// 由于涉及到钱 double不准确,我们使用BigDecimal;在此使用有点多此一举,主要是为了熟悉他的用法int tp=num * produce.getPrice().intValue();detail.setTotalPrice(BigDecimal.valueOf(tp));detailList.add(detail);System.out.println("继续选购(Y/N): ");String isGO=sc.next();if("y".equals(isGO)){chooseCaiPinItem(detailList);}}
}

订餐系统java+mybatis+mysql8项目练习(二) 添加订单项相关推荐

  1. 订餐系统jsp模板_基于jsp的订餐系统-JavaEE实现订餐系统 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的订餐系统, 该项目可用各类java课程设计大作业中, 订餐系统的系统架构分为前后台两部分, 最终实现在线上进行订餐 ...

  2. Java项目:手机WAP版外卖订餐系统(java+SSM+jsp+jquery+mysql)

    源码获取:博客首页 "资源" 里下载! jsp+ssm框架实现手机WAP版外卖订餐系统 项目介绍 这是一款由jsp+ssm框架(spring.springMVC.mybaits)实 ...

  3. (附源码)SSM校园食堂订餐系统JAVA计算机毕业设计项目

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. java吃货联盟app讲解_吃货联盟订餐系统——JAVA实现

    package com.chihuo; import java.util.Scanner; public class OrderingMgr { public static void main(Str ...

  5. 吃货联盟订餐系统 java

    package com.chi; import java.util.Scanner; public class OrderingUtil { Scanner input = new Scanner(S ...

  6. 吃货联盟订餐系统Java代码

    吃货联盟java代码 思路 七步骤 第一步:数据初始化 第二步:实现菜单显示与切换 第三步:实现订餐功能 第四步:实现查看餐袋功能 第五步:实现订餐签收功能 第六步:实现删除订餐功能 第七步:实现点赞 ...

  7. 网上订餐系统java论文_网上订餐系统的毕业设计

    本系统是使用JSP和SQL SERVER数据库为工具开发的,采用B/S结构的管理系统.本系统运行在Tomcat服务器环境下,可以由计算机通过IE浏览器的登陆上该订餐系统进行浏览使用.该订餐系统,包括前 ...

  8. Java Swing 小项目:二维码生成器(支持添加 LOGO 图片、前景背景颜色)

    原文链接:https://xiets.blog.csdn.net/article/details/130652535 版权声明:原创文章禁止转载 Java Swing 图形界面开发(目录) 使用 Ja ...

  9. java电商项目源码_电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码...

    本篇我们根据架构图进行代码的构建.根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现.治理.配置化管理.路由负载.安全控制等优秀解决方案,使用Maven技术将框架进行模块化. ...

  10. 饿团外卖系统-Java Web版

    饿团外卖系统-Java Web版 项目包含文件: 1.etwm.sql(数据库文件) 2.项目源码 3.饿团外卖系统_需求分析.doc 4.饿团外卖系统_概要设计.doc 5.饿团外卖系统_数据库设计 ...

最新文章

  1. Android 计时器 Chronometer
  2. SecureCRT快捷键
  3. Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
  4. ThreadLocal原理与使用
  5. 数据埋点:用户唯一标识
  6. 专访 TensorFlow 贡献者唐源:掌握 Google 深度学习框架的正确姿势
  7. 汇编语言典型例子详解_从架构到 RTOS 详解 DSP 和 MCU 的区别和联系
  8. HashSet源码解析
  9. Silverlight 2 应用程序部署到任意HTML页面
  10. 微软说它深爱着Linux,现在它用行动证明了
  11. 双拓扑排序 HDOJ 5098 Smart Software Installer
  12. 【clickhouse】clickhouse Exception: Table is in readonly mode
  13. Android安装后没有完成和打开按钮
  14. el-input 提示不能为空那个_dede后台发布文章的时候显示标题不能为空?
  15. 照片视频拼接软件哪个好?一半图片一半视频的快速上手教程,朋友圈超吸赞效果
  16. DataLogic 工业串口扫码器Python读取说明
  17. 认识影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)
  18. 从零開始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程
  19. c语言之sizeof与strlen全
  20. python 实现任务管理清单案例

热门文章

  1. 转义sed替换模式字符串
  2. startup_stm32xxxx.s文件问题
  3. 继电器互锁功能的实现
  4. 【Java加密】JCA体系结构
  5. 香港服务器的数据泄露是什么?怎样预防?
  6. iOS 13 SceneDelegate适配
  7. kubernetes networkpolicy网络策略详解
  8. hdu1728 逃离迷宫
  9. 计算机听录测试,电脑自带可以录音但是QQ语音检测不行
  10. 用python写1加到100怎么写_python计算1到100的和