java实现多表联查(从数据库查询数据)

实现购物管理系统的购物结算功能,选择商品的id,生成消费清单。

其中要调用数据库判断库存是否满足所需数量,生成消费清单后要在数据库orders表中添加一条购买记录。

难点在于,数据库的多表查询在dao层如何调用,这里采用创建一个多表联查的实体类,把要查询的字段放在一个entity中new

dao包实现与数据库的连接查询

service包实现业务逻辑

view包实现界面

entity包实现实体类

主界面

 public static void shopping() throws SQLException, IllegalAccessException {
        System.out.println("购物管理系统 > 购物结算\n");
        System.out.println("");
        System.out.println("********************************************************");
        System.out.println("请选择购买的商品编号:");
        //显示商品
        List<Goods> list = ordersService.getGoods();
        while(true){
        for (Goods goods : list) {
            System.out.print(goods.getId() + ":\t" + goods.getBrand() + goods.getGoodsName());
            System.out.println();
        }
        //输入商品编号选择购买的商品 输入商品数量
        System.out.print("请输入商品编号:");
        int goodsId = ShopUI.scanner.nextInt();
        System.out.print("请输入购买的商品数量:");
        int goodsNum = ShopUI.scanner.nextInt();
        //判断库存是否满足购买数量
        if(ordersService.isEnough(goodsId,goodsNum)) {
            System.out.println("********************************************************");
            System.out.print("请输入会员号:");
            int memberNumber = ShopUI.scanner.nextInt();
            if(memberService.isMemberExists(memberNumber)) {
                //添加一条订单记录
                orders.setMemberNum(memberNumber);
                orders.setGoodsId(goodsId);
                orders.setNum(goodsNum);
                ordersService.addOrders(orders);

                //显示消费清单
                showBill(memberNumber);

                System.out.println("请按'n'返回上一级菜单");
                String str = ShopUI.scanner.next();
                if (str.equals("n")) {
                    ShopUI.vipManage();
                    break;
                }

            }else {
                System.out.println("该会员号不存在!请重新操作");
            }
        }else {
            System.out.println("该商品库存不足!");
        }
        }
    }

这里的while(true)用于循环调用,如果符合,break跳出循环,不符合从头开始循环

显示商品:从数据库查询,JDBCUtils是自己写的一个连接查询数据库的通用工具类。

dao包

定义一个全局变量,减少重复代码

OrdersDao ordersDao;
MemberDao memberDao;

{
    ordersDao = new OrdersDao();
    memberDao = new MemberDao();
}
 //显示所有商品信息
    public List<Goods> selectAll() throws SQLException {
        String sql = "select id,brand,goods_name,price,stock,discount from goods";
        List<Goods> list = JDBCUtils.select(Goods.class, sql, null);
        return list;
    }
 //通过id查询
    public Goods findById(Integer id) throws SQLException {
        String sql = "select id,brand,goods_name,price,stock,discount from goods where id=?";
        return JDBCUtils.findOne(Goods.class, sql, id);
    }

 

 //查询订单记录 根据会员号
    //多表联查,创建一个要查询字段的实体类
    public List<OrdersMember> selectBill(Integer memberNum) throws SQLException {
        String sql = "select o.member_num, brand, goods_name, price, num from orders o,goods g,member m where o.goods_id=g.id and o.member_num=m.member_num and m.member_num=?";

        List<OrdersMember> list =JDBCUtils.select(OrdersMember.class,sql,memberNum);
      /*  String sql = "select * from orders where member_num=?";
        List<Orders> list = JDBCUtils.select(Orders.class,sql,memberNum);*/
        return list;
    }

 

 //更新库存
    public void update(Goods goods) throws SQLException {
        String sql = "update goods set stock=? where id=?";
        JDBCUtils.update(sql,goods.getStock(),goods.getId());
    }

 service包

 public List<Goods> getGoods() {
        try {
            return ordersDao.selectAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
  //判断库存是否足够
    public boolean isEnough(int id, int number) throws SQLException {
        Goods goods = ordersDao.findById(id);
        if (goods != null && goods.getStock() >= number) {
            return true;
        }
        return false;
    }
public List<OrdersMember> getBill(Integer memberNum) throws SQLException {
        return ordersDao.selectBill(memberNum);
    }

消费清单界面

 public static void showBill(Integer memberNum) throws SQLException {
        System.out.println("*************************消费清单***************************");
        System.out.println("物品\t\t\t\t单价\t\t\t\t个数\t\t\t\t金额");

        List<OrdersMember> list = ordersService.getBill(memberNum);
        BigDecimal total = new BigDecimal(0);
        for (OrdersMember om : list) {
            System.out.print(om.getBrand()+om.getGoodsName()+"\t\t");
            System.out.print("¥" + om.getPrice()+"\t\t\t\t");
            System.out.print(om.getNum()+"\t\t\t\t");
            BigDecimal price = om.getPrice();
            BigDecimal prices = price.multiply(new BigDecimal(om.getNum()));
            System.out.print("¥" +prices);
            total = total.add(prices);
            System.out.println();
        }
        System.out.println("折扣:" + DISCOUNT);
        System.out.println("金额总计: "+ total.multiply(new BigDecimal(DISCOUNT)).setScale(2,BigDecimal.ROUND_UP));
        System.out.println("实际消费: ");
        System.out.println("********************************************************");
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值