Java实现快递管理系统二(Dao数据层)

目录

一、要实现的快递管理系统的功能 

二、模块分析 

 三、代码功能实现分析&&总览

四、代码展示

数据层ExpressDao类代码展示


 

在前面我们实现了视图层(Java实现快递管理系统一(View视图层)),在这一节我们实现其数据层,对快递数据进行保存,以及根据用户需求录入、修改、删除、取出快递数据。

一、要实现的快递管理系统的功能 

二、模块分析 

 三、代码功能实现分析&&总览

ExpressDao数据层类
属性 
private Express[][] data = new Express[10][];
用二维数组存储快递,其中下标表示快递柜位置
int size;
保存快递柜的目前快递数目
{
    for(int i=0;i<10;i++){
        data[i] = new Express[10];
    }
    size = 0;
}
构造快开辟二维空间,以及初始化size变量
Random random
用于生成随机数
方法 
boolean add(Express e)

 录入快递:

  • 判断快递柜是否满了
  • 随机生成快递柜子的位置(x,y),不能是已经有快递的柜子
  • 随机生成取件码,不能是已经被分配的取件码
  • 录入快递
  • 返回录入的结果
int randomCode()
  • 生成随机的取件码(6位),不能是已被分配的取件码
  • 返回生成的取件码
Express findByCode(int code)
  • 通过取件码查询快递,遍历二维数组比较即可
  • 返回查询到的快递对象
Express findByNumber(String number)
  • 通过快递单号查询快递,便利二维数组比较即可(用equals比较)
  • 返回查询到的快递对象
void update(Express oldExpress, Express newExpress)
  • 删除原来的快递
  • 加入新的快递
void delete(Express e)
  • 遍历二维数组,比较快递是否相同(equals)
  • 删除找到的快递
 Express[][] findAll()

返回所有快递信息,即返回二维数组引用

四、代码展示

1.数据层ExpressDao类代码展示

package day08.develop.dao;

import day08.develop.bean.Express;

import java.util.Random;

/**
 * 数据操作层Dao
 */
public class ExpressDao {
    private Express[][] data = new Express[10][];//快递位置是数组下标
    private int size;//当前存储的快递数
    {//构造快开辟二维空间
        for(int i=0;i<10;i++){
            data[i] = new Express[10];
        }
        size = 0;
    }
    private Random random = new Random();

    /**
     * 存储快递
     * @param e 要被存入的快递
     * @return 存储结果 true成功 false失败
     */
    public boolean add(Express e){
        if(size == 100)//快递柜满了
            return false;
        //1.位置的问题,随机生成2个0-9的下标
        int x = -1;
        int y = -1;
        while(true){
            x = random.nextInt(10);
            y = random.nextInt(10);
            if(data[x][y] == null){
                //此位置无快递
                break;
            }
        }
        //2.取件码的问题,重复?
        int code = randomCode();
        e.setCode(code);
        //3.存入快递
        data[x][y] = e;
        return true;
    }

    /**
     * 模板方法设计模式
     * @return 随机生成的取件码
     */
    private int randomCode(){
        while (true) {//一直循环直到生成可用的取件码
            int code = random.nextInt(899999) + 100000;//100000~999999
            Express e = findByCode(code);
            if (e == null) {//取件码可用
                return code;
            }
        }
    }

    /**
     * 通过取件码查询快递
     * @param code 取件码
     * @return 查找到的快递
     */
    public Express findByCode(int code){
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(data[i][j] != null && data[i][j].getCode() == code)
                    return data[i][j];
            }
        }
        return null;
    }

    /**
     * 快递员根据快递单号查询
     * @param number 快递单号
     * @return 查询到的快递
     */
    public Express findByNumber(String number){
        Express e= new Express();
        e.setNumber(number);
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(data[i][j] != null && e.equals(data[i][j]))//data[i][j].equals(e) 不同因为data[i][j]可能为空,e不会为空
                    return data[i][j];
            }
        }
        return null;
    }


    /**多余的操作,为了MVC更圆润
     *修改快递,将修改后的快递重新存入快递柜
     * @param oldExpress 原对象
     * @param newExpress 新对象
     */
    public void update(Express oldExpress, Express newExpress){
        delete(oldExpress);
        add(newExpress);
    }

    /**
     *删除快递
     * @param e 要删除的快递
     */
    public void delete(Express e){
        p:for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(e.equals(data[i][j])) {
                    data[i][j] = null;//删除快递
                    break p;//跳出循环
                }
            }
        }
    }

    /**
     * 返回所有快递
     */
    public Express[][] findAll(){
        return data;
    }

}

 

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hnu哈哈

请接受直女的么么哒????

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

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

打赏作者

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

抵扣说明:

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

余额充值