目录
在前面我们实现了视图层(Java实现快递管理系统一(View视图层)),在这一节我们实现其数据层,对快递数据进行保存,以及根据用户需求录入、修改、删除、取出快递数据。
一、要实现的快递管理系统的功能
二、模块分析
三、代码功能实现分析&&总览
ExpressDao | 数据层类 |
属性 | |
| 用二维数组存储快递,其中下标表示快递柜位置 |
| 保存快递柜的目前快递数目 |
| 构造快开辟二维空间,以及初始化size变量 |
| 用于生成随机数 |
方法 | |
| 录入快递:
|
|
|
|
|
|
|
|
|
|
|
| 返回所有快递信息,即返回二维数组引用 |
四、代码展示
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;
}
}