任务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); } } } } }
测试