【技能实训】DMS数据挖掘项目-Day06

news2024/11/23 7:36:28

文章目录

  • 任务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接口

功能要求:

  1. 成员属性如下
    // 发货集合
	private Transport[] transSends;
	// 送货集合
	private Transport[] transIngs;
	// 已签收集合
	private Transport[] transRecs;
  1. 构造方法
    // 构造方法
	public TransportAnalyse() {
	}

	public TransportAnalyse(Transport[] trans) {
		super(trans);
	}
  1. 实现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);
                }
            }
        }
    }
}

测试

1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【多线程进阶】多线程进阶学习(高并发、线程池、多线程使用场景)

文章目录 1、线程基础知识1.1、线程和进程线程和进程的区别? 1.2、并行与并发并行与并发有什么区别? 1.3、线程的创建方式创建线程的方式有哪些?刚才你说过,使用runnable和callable都可以创建线程,它们有什么区别呢&am…

MySQL数值

1.整数类型 TINYINT:非常小的整数,存储空间为1字节, 取值范围:有符号:-128---127,无符号:0---255 SMALLINT:小整数,存储空间为2字节 取值范围:有符号&#…

岩土工程振动在线监测:以道路桥梁基础为例

岩土工程振动在线监测:以道路桥梁基础为例 使用振弦传感器、采集仪和在线监测系统进行岩土工程监测:以道路桥梁基础振动监测为例 一个应用振弦传感器、振弦采集仪和在线监测系统构成的岩土工程监测案例是道路桥梁基础的振动监测。 在道路桥梁基础的振动…

力扣 455. 分发饼干

题目来源&#xff1a;https://leetcode.cn/problems/assign-cookies/description/ C题解1&#xff1a;将大饼干优先大胃口的孩子。 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.…

代码随想录二刷 day50 | 动态规划 之 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

day50 123.买卖股票的最佳时机III1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 188.买卖股票的最佳时机IV1.确定dp数组以及下标的含义2.确定递推公式4.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 123.买卖股票的最佳时机I…

java.lang.UnsatisfiedLinkError: no opencv_java410 in java.library.path

-Djava.library.pathhome/zwf/eclipse-workspace/DIPS_YTPC/lib/opencv-410/x64/

Element el-table 列表自定义样式

效果图 页面代码块 <el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"selection-change"handleSelectionChange"><el-table-columntype"selection"width"55&qu…

设计模式【行为型】-- 模板方法模式

模板方法模式&#xff08;Template method pattern&#xff09; 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;将一些步骤的具体实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步…

hydra详解(仅供学习参考)

一、概述。 Hydra是一款非常强大的渗透工具&#xff0c;由著名的黑客组织THC开发的一款开源工具。 二、使用方法。 hybra基础语法&#xff1a; hydra 参数 IP 服务 参数&#xff1a; -l login 小写&#xff0c;指定用户名进行破解 -L file 大写&#xff0c;指定用户的用户名…

uniapp uni实人认证

uni实人认证依赖 目前仅支持App平台。 h5端活体人脸检测&#xff0c;使用的是百度云的h5人脸实名认证 使用要求 1、app端 在使用前&#xff0c;请确保您已注册DCloud账号&#xff0c;并已完成实名认证。 然后需要按文档开通服务 业务开通 | uni-app官网 2、h5端 在使用前…

工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

FFmpeg、x264以及fdk-aac 编译整合

接上文 FFMPEG 编译流程(极客版) 编译 fdk-aac libfdk-aac version:0.1.5 下载 wget http://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.5.tar.gz#!/bin/bash NDK/home/maqi/Desktop/android-ndk-r20b # 这里需要替换成你本地的 NDK 路径&#x…

【来不及刷题之】43、最小栈(PriorityQueue)

因为要在常量时间内查询出最小值&#xff0c;所以需要有另外的数据结构维护最小值&#xff0c;很自然地想到了“堆”这个结构&#xff0c;“最小堆”的堆顶元素刚好是最小值因此出栈和入栈的同时也要维护好最小堆 class MinStack {PriorityQueue<Integer> heap;LinkedLi…

软件测试前途如何?要学吗?

1.前言 当我们面临择业问题的时候&#xff0c;因为我们本身对自己认知的不清晰和对现有自己能选择的岗位的不了解&#xff0c;往往不知道如何选择才是最优解。这个博客就专门来解答大家对于软件测试这个岗位的疑惑&#xff0c;让大家对软件测试这个岗位有更广义的了解。 本博…

观察者模式(下):如何实现一个异步非阻塞的EventBus框架?

上一节课中&#xff0c;我们学习了观察者模式的原理、实现、应用场景&#xff0c;重点介绍了不同应用场景下&#xff0c;几种不同的实现方式&#xff0c;包括&#xff1a;同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞是最经典的实现方式&#xff0c;主要是为了…

C++之std::is_same用法(一百五十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Flink HA方案介绍

1.Flink HA方案介绍 每个Flink集群只有单个JobManager&#xff0c;存在单点失败的情况。Flink有YARN、Standalone和Local三种模式&#xff0c;其中YARN和Standalone是集群模式&#xff0c;Local是指单机模式。但Flink对于YARN模式和Standalone模式提供HA机制&#xff0c;使集群…

【历史上的今天】7 月 12 日:世界上第一台商用数字计算机;Python 之父卸任 BDFL;Wacom 成立

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 7 月 12 日&#xff0c;在 1854 年的今天&#xff0c;伊士曼柯达公司的创始人、胶卷的发明者乔治伊斯曼&#xff08;George Eastman &#xff09;出生&#xf…

NC55 最长公共前缀

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param strs string字符串一维数组* return string字符串*/public String longestCommonPrefix (String[] strs) {int n s…

类和对象(—)

今天&#xff0c;我带来类和对象的基础篇。 目录 面向对象和面向过程类类的概念类的定义类的访问限定符c中struct和class的区别封装类的作用域类的实例化类的存储结构体内存对齐规则【面试题】this指针this指针的概念this指针的特性 【面试题】 面向对象和面向过程 C语言是面向…