JAVA集中学习第三周小组项目开发[仓库管理系统]

系列文章目录

第一章 JAVA集中学习第一周学习记录(一)
第二章 JAVA集中学习第一周项目实践
第三章 JAVA集中学习第一周学习记录(二)
第四章 JAVA集中学习第一周课后习题
第五章 JAVA集中学习第二周学习记录(一)
第六章 JAVA集中学习第二周项目实践
第七章 JAVA集中学习第二周学习记录(二)
第八章 JAVA集中学习第二周课后习题
第九章 JAVA集中学习第二周学习记录(三)
第十章 JAVA集中学习第二周学习记录(四)
第十一章 JAVA集中学习第三周学习记录(一)
第十二章 JAVA集中学习第三周小组项目开发



前言

我消失了几天,大家可能不知道我去干什么了,其实我是回我们ൠ♄§星参加我朋友∰◉░ · ▚バが的脱单party了,顺便跟我的三位好组员做了个项目。本项目题材由不可名状的好心教育机构提供。最近一直在忙这个party,嗨呀,累死我啦!在下乃攸攸太上,现居地球,又想一起去海王星玩的外星同胞可以联系我。
代码有些,我用百度网盘存下了——全部代码网盘链接
通过百度网盘分享的文件:240731_warehouseManageProject
链接:https://pan.baidu.com/s/1YirCVHhmviq5y98GmCUGKA?pwd=0803
提取码:0803


一、项目介绍

1.项目要求

1.1 数据库表结构:

在这里插入图片描述

1.2 实现以下功能(详细要求会在具体实现功能时讲解):

在这里插入图片描述

1.3 题目要求

1、进入某个菜单后根据实际情况添加返回上一级菜单。
2、删除操作要进行二次确认。
3、分页展示处理操作菜单选项外,还要有翻页操作按钮。
4、库存类型包括三种:常温、低温、高温,产品类型同库存类型。

二、代码实现

2.1 项目分析

主菜单结构(递归):
在这里插入图片描述
要使用的sql语句:

2.2 重难点分析

1、分页仓库数据,每页10条数据。
计数器++ == 10后,让用户输入回车,计数器=0,继续输出

2、修改容量要判断当前仓库存放的货物容量是否充足。
遍历所有库存数据,根据仓库主键判断是否为此仓库下的,将所有此仓库下的库存容量求和,跟改变后的容量比较

3、删除仓库要判断仓库是否有货物,如果有货物不允许删除。
遍历库存表,将此仓库下的库存容量求和,如果容量不为0说明有货物

4、要校验库存容量是否超过仓库容量。
2

5、删除操作要进行二次确认。
删除前加一个请用户输入0返回菜单

2.3 功能实现

2.3.1 用户管理

注册:
输入用户名、密码、确认密码,注册新用户
Dao层

    public int insertUser(User user) {
        String sql = "insert into user values(?, ?, ?)";
        return db.update(sql, user.getuId(), user.getuName(), user.getuPassword());
    }

Service层

    private UserDao ud = new UserDaoImpl();
    static Scanner scanner = new Scanner(System.in);
    public boolean addUser() {
        User user = new User();
        user.setuId((UUID.randomUUID().toString().substring(24)));
        System.out.println("请输入要注册用户的名字:");
        String name = scanner.next();
        user.setuName(name);
        System.out.println("请输入要注册用户的密码:");
        String password = scanner.next();
        user.setuPassword(password);
        return ud.insertUser(user) != 0 ? true : false;
    }

登录:
通过用户名和密码登录
Dao层

    public int selectUser(String name, String password) {
        String sql = "select * from user where uName = ? and uPassword = ?";
        return db.query(sql, User.class, name, password).size();
    }

Service层

    public boolean login() {
        System.out.println("请输入要登录用户的名字:");
        String name = scanner.next();
        System.out.println("请输入要登录用户的密码:");
        String password = scanner.next();
        return ud.selectUser(name, password) != 0 ? true : false;
    }
2.3.2 仓库管理

1、新建仓库
输入项:仓库名称、仓库容量、仓库地址。
Dao层

    public int insertWarehouse(Warehouse warehouse) {
        String sql = "insert into warehouse values(?, ?, ?, ?, ?)";
        return db.update(sql, warehouse.getwId(), warehouse.getwNo(), warehouse.getwName(), warehouse.getwVol(), warehouse.getwAdress());
    }

Service层

    ReserveDao rd = new ReserveDaoImpl();
    WarehouseDao wd = new WarehouseDaoImpl();
    ProductService ps = new ProductServiceImpl();
    Scanner scanner = new Scanner(System.in);
    public boolean addWarehouse() {
        Warehouse warehouse = new Warehouse();
        System.out.println("请输入要新建仓库的编号(数字only):");
        int no = scanner.nextInt();
        System.out.println("请输入要新建仓库的名字:");
        String name = scanner.next();
        System.out.println("请输入要新建仓库的容量(数字only):");
        int vol = scanner.nextInt();
        System.out.println("请输入要新建仓库的地址:");
        String adress = scanner.next();
        warehouse.setwId((UUID.randomUUID().toString().substring(24)));
        warehouse.setwNo(no);
        warehouse.setwName(name);
        warehouse.setwVol(vol);
        warehouse.setwAdress(adress);
        return wd.insertWarehouse(warehouse) != 0 ? true : false;
    }

2、删除仓库
删除在列表中选中的仓库。
注意:删除仓库要判断仓库是否有货物,如果有货物不允许删除。
Dao层

    public int deleteWarehouseById(String wId) {
        String sql = "delete from warehouse where wId = ?";
        return db.update(sql, wId);
    }

Service层

    public boolean deleteWarehouse() {
        System.out.println("请输入要删除的仓库的主键:");
        String id = scanner.next();
        int volSum = 0;
        ArrayList<Reserve> rlist = rd.selectReserve(id);
        for (Reserve reserve :
                rlist) {
            volSum += reserve.getrVol();
        }
        if (volSum > 0){
            System.out.println("仓库内有库存,无法删除");
            return false;
        }

        System.out.println("确认删除请输入0,不删除请输入其他数字");
        if (0 != scanner.nextInt())
            return false;
        return wd.deleteWarehouseById(id) != 0 ? true : false;
    }

3、修改仓库
首先在仓库列表中选中仓库,然后对仓库数据进行修改
输入项:仓库名称、仓库容量、仓库地址。
注意:修改容量要判断当前仓库存放的货物容量是否充足。
Dao层

    public int updateWarehouse(Warehouse warehouse) {
        String sql ="update warehouse set wName = ?, wVol = ?, wAdress = ? where wId = ?";
        return db.update(sql, warehouse.getwName(), warehouse.getwVol(), warehouse.getwAdress(), warehouse.getwId());
    }

Service层

    public boolean changeWarehouse() {
        Warehouse warehouse = new Warehouse();
        System.out.println("请输入要修改的仓库的主键:");
        String id = scanner.next();
        System.out.println("请输入修改后的仓库的名字:");
        String name = scanner.next();
        System.out.println("请输入修改后的仓库的容量:");
        int vol = scanner.nextInt();

        ArrayList<Reserve> rlist = rd.selectReserve(id);
        int volSum = 0;
        for (Reserve reserve :
                rlist) {
            volSum += reserve.getrVol();
        }
        if (volSum >vol){
            System.out.println("仓库容量不足以容纳以前库存");
            return false;
        }

        System.out.println("请输入修改后的仓库的地址:");
        String adress = scanner.next();
        warehouse.setwId(id);
        warehouse.setwName(name);
        warehouse.setwVol(vol);
        warehouse.setwAdress(adress);
        return wd.updateWarehouse(warehouse) != 0 ? true : false;
    }

4、仓库查询
可以根据用户输入的数据按照仓库名称或仓库类型查询仓库。分页仓库数据,每页10条数据。
展示项包括:仓库标识、仓库名称、仓库容量、仓库地址。
Dao层

    public ArrayList<Warehouse> selectWarehouse(Warehouse warehouse) {
        String sql = "select * from warehouse where wId = ?";
        return db.query(sql, Warehouse.class, warehouse.getwId());
    }

Service层

    public boolean searchWarehouse() {
        int i = 0;
        boolean b = false;
        Warehouse warehouse = new Warehouse();
        System.out.println("请输入要查询的仓库的主键:");
        String id= scanner.next();
        warehouse.setwId(id);
        ArrayList list = wd.selectWarehouse(warehouse);
        Iterator<Warehouse> iterator = list.iterator();
        System.out.println("仓库标识\t仓库名称\t\t仓库容量\t\t仓库地址");
        while (iterator.hasNext()){
            b = true;
            Warehouse next = iterator.next();
            System.out.println(next.getwNo() + "\t\t" + next.getwName() + "\t\t" + next.getwVol().toString() + "\t\t" + next.getwAdress());
            if (i++ == 10){
                System.out.println("输入回车翻页");
                scanner.next();
                i = 0;
            }
        }
        ps.warnProductByDeadTime();
        return b;
    }
2.3.3 库存管理

1、添加库存
首先选择仓库,添加库存。
输入项:库存容量、库存已用容量、库存预警容量、库存类型。
注意:要校验库存容量是否超过仓库容量。
Dao层

    public int insertReserve(Reserve reserve) {
        String sql = "insert into reserve values(?, ?, ?, ?, ?, ?)";
        return db.update(sql, reserve.getrId(), reserve.getRwId(), reserve.getrVol(), reserve.getrVolUsed(), reserve.getrVolWarn(), reserve.getrType());
    }

Service层

    ReserveDao rd = new ReserveDaoImpl();
    WarehouseDao wd = new WarehouseDaoImpl();
    ProductService ps = new ProductServiceImpl();
    Scanner scanner = new Scanner(System.in);
    public boolean addReserve() {
        String id = (UUID.randomUUID().toString().substring(24));
        System.out.println("请输入你要添加到那个仓库的主键:");
        String wid = scanner.next();
        Warehouse warehouse = new Warehouse();
        warehouse.setwId(wid);
        ArrayList<Warehouse> wlist = wd.selectWarehouse(warehouse);
        if (wlist.size() == 0){
            System.out.println("输入仓库不存在,返回菜单");
            return false;
        }
        System.out.println("请输入要新建库存的容量(数字only):");
        int vol = scanner.nextInt();

        ArrayList<Reserve> rlist = rd.selectReserve(wid);
        int volSum = vol;
        for (Reserve reserve :
                rlist) {
            volSum += reserve.getrVol();
        }
        if (volSum > wlist.get(0).getwVol()){
            System.out.println("库存不足以添加新库存");
            return false;
        }

        System.out.println("请输入要新建库存的已用容量(数字only):");
        int volUsed = scanner.nextInt();
        System.out.println("请输入要新建库存的预警容量(数字only):");
        int volWarn = scanner.nextInt();
        System.out.println("请输入要新建库存的库存类型(仅限常温、低温、高温):");
        String type = scanner.next();
        Reserve reserve = new Reserve(id, wid, vol, volUsed, volWarn, type);
        return rd.insertReserve(reserve) != 0 ? true : false;
    }

2、库存查询
分页展示库存数据,每页10条数据。
展示项包括:库存标识、仓库名称、库存类型、库存最大容量、库存已用容量、预警容量、仓库地址。
Dao层

    public ArrayList<Reserve> selectReserve(String rwId) {
        StringBuffer sql = new StringBuffer("select * from reserve");
        if (rwId != null){
            sql.append(" where rwId = ?");
            return db.query(sql.toString(), Reserve.class, rwId);
        }
        return db.query(sql.toString(), Reserve.class);
    }

Service层

    public boolean searchReserve() {
        boolean b = false;//红绿灯判断器
        int i = 0;//翻页计数
        System.out.println("库存标识\t\t\t仓库名称\t库存类型\t库存最大容量\t库存已用容量\t预警容量\t仓库地址");
        Warehouse warehouse = new Warehouse();//需要根据库存找到仓库数据
        ArrayList<Reserve> list = rd.selectReserve(null);
        Iterator<Reserve> iterator = list.iterator();
        while (iterator.hasNext()){//迭代所有的库存数据
            b = true;//红绿灯变!
            Reserve next = iterator.next();
            warehouse.setwId(next.getRwId());//准备selectWarehouse方法参数
            ArrayList<Warehouse> warehouses = wd.selectWarehouse(warehouse);//根据库存表存储的仓库主键寻找仓库数据
            warehouse = warehouses.get(0);//主键UUID唯一,所以如果有仓库,一定会返回一条数据
            System.out.println(next.getrId() + "\t" + warehouse.getwName() + "\t" + next.getrType() + "\t" + next.getrVol() + "\t" + next.getrVolUsed() + "\t" + next.getrVolWarn() + "\t" + warehouse.getwAdress());
            if (i++ == 10){//实现回车翻页
                System.out.println("输入随机字母后回车翻页");
                scanner.next();
                i = 0;
            }
        }
        ps.warnProductByDeadTime();//按照题目要求,输出快过期的商品
        return b;//返回红绿灯成功与否
    }

3、存量预警
在库存操作中要监控库存容量,如果超出限制,给出提示,没有超出限制则不做任何操作。
Dao层

    public ArrayList<Reserve> selectReserve(String rwId) {
        StringBuffer sql = new StringBuffer("select * from reserve");
        if (rwId != null){
            sql.append(" where rwId = ?");
            return db.query(sql.toString(), Reserve.class, rwId);
        }
        return db.query(sql.toString(), Reserve.class);
    }

Service层

    public boolean warnReserve() {
        boolean b = false;
        ArrayList<Reserve> list = rd.selectReserve(null);
        Iterator<Reserve> iterator = list.iterator();
        while (iterator.hasNext()){
            b = true;
            Reserve next = iterator.next();
            if (next.getrVolUsed() > next.getrVolWarn())
            System.out.println(next.toString() + "已超过内存警戒线!!请注意!!");
        }
        return b;
    }
2.3.4 产品管理

1、产品入库
输入产品编号、数量,根据产品编号和数量查询可以存放产品的库存,选择要存放的库存,将产品存入仓库。
产品数据不需要系统维护,从产品表中获取。
注意:存入产品要根据类型校验库存是否可以存放该产品。例如,冰淇淋不能存放在常温仓库中。同样产品数量和库存容量也要做校验。
Dao层

	public ArrayList<Product> selectProduct(String pId) {
        StringBuffer sql = new StringBuffer("select * from product");
        if (pId != null){
            sql.append(" where pId = ?");
            return db.query(sql.toString(), Product.class, pId);
        }
        return db.query(sql.toString(), Product.class);
    }
    public int insertProRes(ProRes proRes) {
        String sql = "insert into prores values(?, ?, ?, ?)";
        return db.update(sql, proRes.getPrId(), proRes.getpId(), proRes.getrId(), proRes.getInTime());
    }
    public int insertProWare(ProWare proWare) {
        String sql = "insert into proware values(?, ?, ?)";
        return db.update(sql, proWare.getPwId(), proWare.getpId(), proWare.getwId());
    }

Service层

    ProductDao pd = new ProductDaoImpl();
    ReserveDao rd = new ReserveDaoImpl();
    ProResDao prd = new ProResDaoImpl();
    ProWareDao pwd = new ProWareDaoImpl();
    Scanner scanner = new Scanner(System.in);
    public boolean addProduct() {
        System.out.println("请输入产品主键:");
        String pId = scanner.next();
        Product product = pd.selectProduct(pId).get(0);
        System.out.println("请输入要存入的库存主键:");
        String rId = scanner.next();
        ArrayList<Reserve> list = rd.selectReserve(null);
        Reserve reserve = null;
        Iterator<Reserve> iterator = list.iterator();
        while (iterator.hasNext()){
            Reserve next = iterator.next();
            if (next.getrId().equals(rId)){
                reserve = next;
                break;
            }
        }
        if (reserve == null){
            System.out.println("该库存不存在,返回菜单");
            return false;
        }
        if (!product.getpType().equals(reserve.getrType())){
            System.out.println("库存类型(" + reserve.getrType() + ")与商品类型(" + product.getpType() + ")不匹配,返回菜单");
            return false;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sdf.format(new Date());
        ProRes proRes = new ProRes("", product.getpId(), reserve.getrId(), date);
        ProWare proWare = new ProWare("", product.getpId(), reserve.getRwId());
        proRes.setPrId((UUID.randomUUID().toString().substring(24)));
        proWare.setPwId((UUID.randomUUID().toString().substring(24)));
        int i = prd.insertProRes(proRes);
        int j = pwd.insertProWare(proWare);
        return i * j != 0 ? true : false;
    }

2、产品出库
输入产品编号、数量,根据产品编号和数量查询满足条件的库存,选择库存,将产品出库。
Dao层

	public ArrayList<ProRes> selectProRes(String prId) {
        StringBuffer sql = new StringBuffer("select * from prores");
        if (prId != null){
            sql.append(" where prId = ?");
            return db.query(sql.toString(), ProRes.class, prId);
        }
        return db.query(sql.toString(), ProRes.class);
    }
    public int deleteProResById(String prId) {
        String sql = "delete from prores where prId = ?";
        return db.update(sql, prId);
    }
    public ArrayList<ProWare> selectProWare(String pwId) {
        StringBuffer sql = new StringBuffer("select * from proware");
        if (pwId != null){
            sql.append(" where pwId = ?");
            return db.query(sql.toString(), ProWare.class, pwId);
        }
        return db.query(sql.toString(), ProWare.class);
    }
    public int deleteProWareById(String pwId) {
        String sql = "delete from proware where pwId = ?";
        return db.update(sql, pwId);
    }

Service层

    public boolean deleteProduct() {
        System.out.println("请输入产品主键:");
        String pId = scanner.next();
        System.out.println("请输入库存主键:");
        String rId = scanner.next();
        System.out.println("确认删除请输入0,不删除请输入其他数字");
        if (0 != scanner.nextInt())
            return false;
        int i = 0, j = 0;
        ArrayList<ProRes> PRList = prd.selectProRes(null);
        Iterator<ProRes> PRIterator = PRList.iterator();
        ProRes PRMatch = null;
        while (PRIterator.hasNext()){
            ProRes PRGet = PRIterator.next();
            if (PRGet.getrId().equals(rId) && PRGet.getpId().equals(pId)){
                PRMatch = PRGet;
                i = prd.deleteProResById(PRGet.getPrId());
                ArrayList<ProWare> PWList = pwd.selectProWare(null);
                Iterator<ProWare> PWIterator = PWList.iterator();
                while (PWIterator.hasNext()){
                    ProWare PWGet = PWIterator.next();
                    ArrayList<Reserve> RList = rd.selectReserve(null);
                    Iterator<Reserve> RIterator = RList.iterator();
                    Reserve RGet = null;
                    while (RIterator.hasNext()){
                        RGet = RIterator.next();
                        if (RGet.getrId().equals(PRMatch.getrId())){
                            break;
                        }
                    }
                    if (PWGet.getwId().equals(RGet.getRwId()) && PWGet.getpId().equals(pId)){
                        j = pwd.deleteProWareById(PWGet.getPwId());
                        break;
                    }
                }
                break;
            }
        }
        return i * j != 0 ? true : false;
    }

3、产品调拨
输入产品编号、数量,根据产品编号和数量查询满足条件的库存,选择库存,再查询可以存放产品的库存,进行产品调拨。
Dao层

	public int insertProRes(ProRes proRes) {
        String sql = "insert into prores values(?, ?, ?, ?)";
        return db.update(sql, proRes.getPrId(), proRes.getpId(), proRes.getrId(), proRes.getInTime());
    }
    public int deleteProResById(String prId) {
        String sql = "delete from prores where prId = ?";
        return db.update(sql, prId);
    }
    public ArrayList<ProRes> selectProRes(String prId) {
        StringBuffer sql = new StringBuffer("select * from prores");
        if (prId != null){
            sql.append(" where prId = ?");
            return db.query(sql.toString(), ProRes.class, prId);
        }
        return db.query(sql.toString(), ProRes.class);
    }
    public int insertProWare(ProWare proWare) {
        String sql = "insert into proware values(?, ?, ?)";
        return db.update(sql, proWare.getPwId(), proWare.getpId(), proWare.getwId());
    }

    @Override
    public int deleteProWareById(String pwId) {
        String sql = "delete from proware where pwId = ?";
        return db.update(sql, pwId);
    }

    @Override
    public int updateProWare(ProWare proWare) {
        return 0;
    }

    @Override
    public ArrayList<ProWare> selectProWare(String pwId) {
        StringBuffer sql = new StringBuffer("select * from proware");
        if (pwId != null){
            sql.append(" where pwId = ?");
            return db.query(sql.toString(), ProWare.class, pwId);
        }
        return db.query(sql.toString(), ProWare.class);
    }

Service层

    public boolean productChangeReserve() {
        //获取用户输入
        System.out.println("请输入产品主键:");
        String pId = scanner.next();
        System.out.println("请输入要更改的库存主键:");
        String rIdb = scanner.next();//reserveBefore
        System.out.println("请输入要存入的库存主键:");
        String rida = scanner.next();//reserveAfter
        //确认删除操作
        System.out.println("确认更改请输入0,不删除请输入其他");
        if (0 != scanner.nextInt())
            return false;
        Product product = pd.selectProduct(pId).get(0);
        int i = 0, j = 0, a = 0, b = 0;//用于最后判断

        ArrayList<Reserve> RListA = rd.selectReserve(null);
        Reserve reserve = null;
        Iterator<Reserve> RIteratorA = RListA.iterator();
        while (RIteratorA.hasNext()){//循环遍历获取要存的库存
            Reserve RSet = RIteratorA.next();
            if (RSet.getrId().equals(rida)){
                reserve = RSet;
                break;
            }
        }
        //以下判断库存是否符合要求
        if (reserve == null){
            System.out.println("该库存不存在,返回菜单");
            return false;
        }
        if (!product.getpType().equals(reserve.getrType())){
            System.out.println("库存类型(" + reserve.getrType() + ")与商品类型(" + product.getpType() + ")不匹配,返回菜单");
            return false;
        }
        //以上为新增部分,以下为删除部分
        ArrayList<ProRes> PRList = prd.selectProRes(null);
        Iterator<ProRes> PRIterator = PRList.iterator();
        ProRes PRMatch = null;
        while (PRIterator.hasNext()){//循环遍历产品库存关联表
            ProRes PRGet = PRIterator.next();
            if (PRGet.getrId().equals(rIdb) && PRGet.getpId().equals(pId)){
                //库存Id和产品Id匹配
                PRMatch = PRGet;
                i = prd.deleteProResById(PRMatch.getPrId());
                ArrayList<Reserve> RList = rd.selectReserve(null);
                Iterator<Reserve> RIterator = RList.iterator();
                Reserve RGet = null;
                while (RIterator.hasNext()){//循环遍历库存表
                    RGet = RIterator.next();
                    if (RGet.getrId().equals(PRMatch.getrId())){
                        break;
                    }
                }
                ArrayList<ProWare> PWList = pwd.selectProWare(null);
                Iterator<ProWare> PWIterator = PWList.iterator();
                while (PWIterator.hasNext()){//循环遍历产品仓库关联表
                    ProWare PWGet = PWIterator.next();
                    if (PWGet.getwId().equals(RGet.getRwId()) && PWGet.getpId().equals(pId)){
                        //仓库Id和产品Id是否匹配
                        j = pwd.deleteProWareById(PWGet.getPwId());
                        break;
                    }
                }
                break;
            }
        }
        //多线程可能好点,不是多线程可能中途死机时多出来数据少一条数据
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sdf.format(new Date());
        ProRes proRessave = new ProRes("", product.getpId(), reserve.getrId(), date);
        ProWare proWare = new ProWare("", product.getpId(), reserve.getRwId());
        proRessave.setPrId((UUID.randomUUID().toString().substring(24)));
        proWare.setPwId((UUID.randomUUID().toString().substring(24)));
        a = prd.insertProRes(proRessave);
        b = pwd.insertProWare(proWare);

        return a * b * i * j != 0 ? true : false;
    }

4、质量预警
查询仓库或库存时,根据产品保质期提示10天内要过期的产品,并显示所在仓库和库存。
Dao层

	public ArrayList<ProRes> selectProRes(String prId) {
        StringBuffer sql = new StringBuffer("select * from prores");
        if (prId != null){
            sql.append(" where prId = ?");
            return db.query(sql.toString(), ProRes.class, prId);
        }
        return db.query(sql.toString(), ProRes.class);
    }
    public ArrayList<ProWare> selectProWare(String pwId) {
        StringBuffer sql = new StringBuffer("select * from proware");
        if (pwId != null){
            sql.append(" where pwId = ?");
            return db.query(sql.toString(), ProWare.class, pwId);
        }
        return db.query(sql.toString(), ProWare.class);
    }

Service层

    public boolean warnProductByDeadTime() {
        ArrayList<Product> products = pd.selectProduct(null);
        ArrayList<Product> dyingProducts = new ArrayList<>();
        Iterator<Product> iterator = products.iterator();
        int i = 0, j = 0;
        ProRes proRes = null;
        while (iterator.hasNext()){//循环获取快到期或已过期的产品组成新集合
            Product next = iterator.next();
            if (countTime(next.getpDeadDate()) < 10){
                dyingProducts.add(next);
            }
        }
        Iterator<Product> iterator1 = dyingProducts.iterator();
        while (iterator1.hasNext()){//迭代器循环快过期的商品集合
            Product next = iterator1.next();
            ArrayList<ProRes> proRes1 = prd.selectProRes(null);
            Iterator<ProRes> iterator2 = proRes1.iterator();
            while (iterator2.hasNext()){//遍历产品库存关联表找到快过期的产品的库存
                ProRes next1 = iterator2.next();
                if (next1.getpId().equals(next.getpId())){
                    System.out.println(next.toString() + "快过期了!!");
                    System.out.println("所在库存主键为" + next1.getrId());
                    ArrayList<ProWare> proWare1 = pwd.selectProWare(null);
                    Iterator<ProWare> iterator3 = proWare1.iterator();
                    ArrayList<Reserve> list = rd.selectReserve(null);
                    Iterator<Reserve> iterator4 = list.iterator();
                    Reserve next4 = null;
                    while (iterator4.hasNext()){//遍历获得库存数据,为了获得数据内仓库Id
                        next4 = iterator4.next();
                        if (next4.getrId().equals(next1.getrId())){
                            break;//不break外层,以防有不同库存同时存储同一产品
                        }
                    }//需要判断库存的仓库Id,而不是直接使用产品仓库关联表根据产品Id查找是为了以防有不同库存同时存储同一产品
                    while (iterator3.hasNext()){//获得仓库Id,以及确认库存——产品——仓库三者互相对应
                        ProWare next2 = iterator3.next();
                        if (next2.getpId().equals(next1.getpId()) && next2.getwId().equals(next4.getRwId())){
                            System.out.println("所在仓库主键为" + next2.getwId());
                            break;
                        }
                    }
                    //不break,以防有不同库存同时存储同一产品
                    //break;
                }
            }
        }
        return true;
    }

    public int countTime(String dead1){
        SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");//设置格式化
        try{
            String nowTime1 = sdFormat.format(new Date());//获取格式化的当前时间
            Date nowTime2 = sdFormat.parse(nowTime1);
            long nowTime3 = nowTime2.getTime();
            Date dead2 = sdFormat.parse(dead1);
            long dead3 = dead2.getTime();
            return ((int)((dead3 - nowTime3)/1000/60/60/24));//将毫秒数转化为天数
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

全部代码网盘链接

总结

写的还是太慢了,本来11点就能结束的任务硬生生拖到凌晨1点,接口定的也没考虑周到。
但逻辑错误很少,也是这个题没什么逻辑复杂的地方。
本人sql语句都忘光了,所以只用了基础的增删改查,产品调拨的地方有很多不必要的循环,很多能用一句sql语句实现。
总的来说,忙得不可开交,结果还说得过去,80分吧。

以下是时间节点:
7.31进度:
3:00——4:00定数据库结构,创建数据库,做方法和表的思维导图分享给另外两位组长
4:00——5:50根据数据库内容创建pojo层,Dao层,Service层,以及Dao层、Service层的impl,向Dao层中每个接口添加基础的增删改查方法
7:00——8:00为了更好实现dbHelper类的多态,学习反射知识,学习如何改进dbHelper,以及如何导出导入数据库中的表
8:00——9:30写service层接口并添加详细注释,根据需求修改思维导图
9:30——9:55向组员介绍导入数据库方法,写好的pojo、Dao、Service层实体类与接口,介绍所有方法的实现方法、基本思路
9:55——10:30修改Dao层输入,以更好的接受Service层的传入,总结今日内容
8.01进度
8:00——9:00考虑到安全性,我将所有主键从int型改为UUID生成的String型,写Dao层的注册用户,测试写好的DBHelper能否正确运行
9:00——9:50写完注册、登录方法
9:50——11:30写完仓库表所用四个方法,未进行调试
12:10——12:30进行仓库表调试
12:30——1:21进行库存表增删改查
2:09——3:33给组员讲题
3:33——4:37进行库存表三个方法实现
5:10——6:00/6:30——10:30进行产品表、产品仓库关联表、产品库存关联表的方法实现。目前所有功能已经完成,主菜单还未实现
12:30——12:40绘制主菜单思维导图
12:45——1:09编写并调试主菜单

全部代码网盘链接

  • 34
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值