文章目录
- 任务6
- 【任务6.5】编写物流数据分析类
- 【任务6.6】创建物流数据分析测试类,测试任务6.5-6.6中的程序,演示物流信息的采集、分析及打印输出
任务6
【任务6.1】创建数据分析接口
在com.qst.dms.gather 下创建接口IDataAnalyse.java
【任务6.2】创建数据过滤抽象类
在com.qst.dms.gather 下创建抽象类DataFilter.java
【任务6.3】编写日志数据分析类
在com.qst.dms.gather 下创建LogRecAnalyse.java,继承DataFilter抽象类,实现数据分析IDataAnalyse接口
从6.5开始做
【任务6.5】编写物流数据分析类
在com.qst.dms.gather 下创建TransportAnalyse.java,继承DataFilter抽象类,实现数据分析IDataAnalyse接口
功能要求:
- 成员属性如下
// 发货集合
private Transport[] transSends;
// 送货集合
private Transport[] transIngs;
// 已签收集合
private Transport[] transRecs;
- 构造方法
// 构造方法
public TransportAnalyse() {
}
public TransportAnalyse(Transport[] trans) {
super(trans);
}
- 实现DataFilter抽象类中的过滤抽象方法
// 获取数据集合
……
// 根据物流状态统计不同状态的物流个数
int numSend = 0;
int numTran = 0;
int numRec = 0;
// 遍历统计
……
// 创建不同状态的物流数组
transSends = new Transport[numSend];
transIngs = new Transport[numTran];
transRecs = new Transport[numRec];
// 数组下标记录
int indexSend = 0;
int indexTran = 0;
int indexRec = 0;
// 遍历,对物流数据进行过滤,根据物流状态分别放在不同的数组中 for (Transport tran : trans) {
……
}
4实现IDataAnalyse接口中数据分析方法
// 创建物流匹配数组
MatchedTransport[] matchTrans = new MatchedTransport[transSends.length];
// 日志匹配数组下标记录
int index = 0;
// 数据匹配分析
for (Transport send : transSends) {
for (Transport tran : transIngs) {
for (Transport rec : transRecs) {
if ((send.getReciver().equals(tran.getReciver()))
&& (send.getReciver().equals(rec.getReciver()))
&& (tran.getType()!=DataBase.MATHCH)
&& (rec.getType()!=DataBase.MATHCH)) {
// 修改物流状态类型为“匹配”
send.setType(DataBase.MATHCH);
tran.setType(DataBase.MATHCH);
rec.setType(DataBase.MATHCH);
// 添加到匹配数组中
matchTrans[index++] = new MatchedTransport(send, tran,
rec);
}
}
}
}
return matchTrans;
程序设计
package com.qst.dms.gather;
// 导入需要的类
import com.qst.dms.entity.DataBase;
import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;
public class TransportAnalyse extends DataFilter implements IDataAnalyse {
// 成员属性
private Transport[] transSends;
private Transport[] transIngs;
private Transport[] transRecs;
// 构造方法
public TransportAnalyse(Transport[] trans) {
super(trans);
}
// 实现DataFilter抽象类中的过滤抽象方法
@Override
public void doFilter() {
// 获取数据集合
Transport[] trans = (Transport[]) getDatas();
// 根据物流状态统计不同状态的物流个数
int numSend = 0;
int numTran = 0;
int numRec = 0;
// 遍历统计
for (Transport tran : trans) {
if (tran.getTransportType() == Transport.SENDING) {
numSend++;
} else if (tran.getTransportType() == Transport.TRANSPORTING) {
numTran++;
} else if (tran.getTransportType() == Transport.RECEIVED) {
numRec++;
}
}
// 创建不同状态的物流数组
transSends = new Transport[numSend];
transIngs = new Transport[numTran];
transRecs = new Transport[numRec];
// 数组下标记录
int indexSend = 0;
int indexTran = 0;
int indexRec = 0;
// 遍历,对物流数据进行过滤,根据物流状态分别放在不同的数组中
for (Transport tran : trans) {
if (tran.getTransportType() == Transport.SENDING) {
transSends[indexSend++] = tran;
} else if (tran.getTransportType() == Transport.TRANSPORTING) {
transIngs[indexTran++] = tran;
} else if (tran.getTransportType() == Transport.RECEIVED) {
transRecs[indexRec++] = tran;
}
}
}
// 实现IDataAnalyse接口中数据分析方法
@Override
public MatchedTransport[] matchData() {
// 创建物流匹配数组
MatchedTransport[] matchTrans = new MatchedTransport[transSends.length];
// 日志匹配数组下标记录
int index = 0;
// 数据匹配分析
for (Transport send : transSends) {
for (Transport tran : transIngs) {
for (Transport rec : transRecs) {
if (send.getReciver().equals(tran.getReciver())
&& send.getReciver().equals(rec.getReciver())
&& tran.getType() != DataBase.MATHCH
&& rec.getType() != DataBase.MATHCH) {
// 修改物流状态类型为“匹配”
send.setType(DataBase.MATHCH);
tran.setType(DataBase.MATHCH);
rec.setType(DataBase.MATHCH);
// 添加到匹配数组中
matchTrans[index++] = new MatchedTransport(send, tran, rec);
}
}
}
}
return matchTrans;
}
}
【任务6.6】创建物流数据分析测试类,测试任务6.5-6.6中的程序,演示物流信息的采集、分析及打印输出
在com.qst.dms.dos 下创建TransportDataAnalyseDemo.java
功能要求:
采集4组物流信息,放到数组中,进行物流分析、过滤,对于匹配的物流信息打印输出
// 创建一个物流业务类
// 创建一个物流对象数组,用于存放采集的四个物流信息
// 创建物流数据分析对象
;
// 物流数据过滤
;
// 物流数据分析
;
// 判断objs数组是否是配置物流数组
if (objs instanceof MatchedLogRec[]) {
// 将对象数组强制类型转换成配置物流数组
;
// 输出匹配的物流信息
;
}
程序设计
package com.qst.dms.dos;
// 导入需要的类
import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;
import com.qst.dms.gather.TransportAnalyse;
import com.qst.dms.service.TransportService;
public class TransportDataAnalyseDemo {
public static void main(String[] args) {
// 创建一个物流业务类
TransportService tb = new TransportService();
// 创建一个物流对象数组,用于存放采集的四个物流信息
Transport[] transports = new Transport[4];
// 假设采集到的物流信息放在transports数组中
transports[0] = tb.inputTransport();
transports[1] = tb.inputTransport();
transports[2] = tb.inputTransport();
transports[3] = tb.inputTransport();
// 创建物流数据分析对象
TransportAnalyse ta = new TransportAnalyse(transports);
// 物流数据过滤
ta.doFilter();
// 物流数据分析
Object[] objs = ta.matchData();
// 判断objs数组是否是匹配物流数组
if (objs instanceof MatchedTransport[]) {
// 将对象数组强制类型转换成匹配物流数组
MatchedTransport[] matchedTransports = (MatchedTransport[]) objs;
// 输出匹配的物流信息
for (MatchedTransport log : matchedTransports) {
if(log!=null) {
System.out.println(log);
}
}
}
}
}
测试