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

news2024/10/7 18:31:11

文章目录

  • 任务6
    • 【任务6.1】创建数据分析接口
    • 【任务6.2】创建数据过滤抽象类
    • 【任务6.3】编写日志数据分析类
    • 【任务6.4】创建日志数据分析测试类,测试任务6.1-6.3中的程序,演示日志信息的采集、分析及打印输出

任务6

【任务6.1】创建数据分析接口

在com.qst.dms.gather 下创建接口IDataAnalyse.java
功能要求:

  1. 包含的抽象方法如下
    // 进行数据匹配
    Object[] matchData();

程序设计

package com.qst.dms.gather;

public interface IDataAnalyse {
    Object[] matchData();
}

【任务6.2】创建数据过滤抽象类

在com.qst.dms.gather 下创建抽象类DataFilter.java

功能要求:

  1. 成员属性如下
    // 数据集合
	private DataBase[] datas;
  1. 构造方法、get/set方法

  2. 抽象方法

    // 数据过滤抽象方法
    public abstract void doFilter();

程序设计

package com.qst.dms.gather;

import com.qst.dms.entity.DataBase;
import com.qst.dms.entity.LogRec;

public abstract class DataFilter {
    // 数据集合
    private DataBase[] datas;

    // 构造方法
    public DataFilter(DataBase[] datas) {
        this.datas = datas;
    }

    // 获取数据集合
    public DataBase[] getDatas() {
        return datas;
    }

    // 设置数据集合
    public void setDatas(DataBase[] datas) {
        this.datas = datas;
    }

    // 数据过滤抽象方法
    public abstract void doFilter();
}

【任务6.3】编写日志数据分析类

在com.qst.dms.gather 下创建LogRecAnalyse.java,继承DataFilter抽象类,实现数据分析IDataAnalyse接口

功能要求:

  1. 成员属性如下
    // “登录”集合
	private LogRec[] logIns;
	// “登出”集合
	private LogRec[] logOuts;
  1. 实现DataFilter抽象类中的过滤抽象方法
        // 获取数据集合
		……
		// 根据日志登录状态统计不同状态的日志个数
		int numIn = 0;
		int numOut = 0;
		// 遍历统计
		……
		// 创建登录、登出数组
		logIns = new LogRec[numIn];
		logOuts = new LogRec[numOut];
		// 数组下标记录
		int indexIn = 0;
		int indexOut = 0;
		// 遍历,对日志数据进行过滤,根据日志登录状态分别放在不同的数组中
		for (LogRec rec : logs) {
			……
		}
  1. 实现IDataAnalyse接口中数据分析方法
        // 创建日志匹配数组
		MatchedLogRec[] matchLogs = new MatchedLogRec[logIns.length];
		// 日志匹配数组下标记录
		int index = 0;
		// 数据匹配分析
		for (LogRec in : logIns) {
			for (LogRec out : logOuts) {
				if ((in.getUser().equals(out.getUser()))
						&& (in.getIp().equals(out.getIp()))
						&& out.getType()!=DataBase.MATHCH) {
					//修改in和out日志状态类型为“匹配”
					in.setType(DataBase.MATHCH);
					out.setType(DataBase.MATHCH);
					//添加到匹配数组中
					matchLogs[index++] = new MatchedLogRec(in, out);
				}
			}
		}
		return matchLogs;

程序设计

package com.qst.dms.gather;

import com.qst.dms.entity.DataBase;
import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;

public class LogRecAnalyse extends DataFilter implements IDataAnalyse {
    // “登录”集合
    private LogRec[] logIns;
    // “登出”集合
    private LogRec[] logOuts;

    public LogRecAnalyse(LogRec[] datas) {
        super(datas);
    }

    // 实现DataFilter抽象类中的过滤抽象方法
    @Override
    public void doFilter() {
        // 获取数据集合
        LogRec[] datas = (LogRec[]) getDatas();
        // 根据日志登录状态统计不同状态的日志个数
        int numIn = 0;
        int numOut = 0;
        // 遍历统计
        for (LogRec data : datas) {
            if (data.getLogType() == LogRec.LOG_IN) {
                numIn++;
            } else if (data.getLogType() == LogRec.LOG_OUT) {
                numOut++;
            }
        }
        // 创建登录、登出数组
        logIns = new LogRec[numIn];
        logOuts = new LogRec[numOut];
        // 数组下标记录
        int indexIn = 0;
        int indexOut = 0;
        // 遍历,对日志数据进行过滤,根据日志登录状态分别放在不同的数组中
        for (LogRec data : datas) {
            if (data.getLogType() == LogRec.LOG_IN) {
                logIns[indexIn++] = data;
            } else if (data.getLogType() == LogRec.LOG_OUT) {
                logOuts[indexOut++] = data;
            }
        }
    }

    // 实现IDataAnalyse接口中数据分析方法
    @Override
    public Object[] matchData() {
        // 创建日志匹配数组
        MatchedLogRec[] matchLogs = new MatchedLogRec[logIns.length];
        // 日志匹配数组下标记录
        int index = 0;
        // 数据匹配分析
        for (LogRec in : logIns) {
            for (LogRec out : logOuts) {
                if ((in.getUser().equals(out.getUser()))
                        && (in.getIp().equals(out.getIp()))
                        && out.getType() != DataBase.MATHCH) {
                    // 修改in和out日志状态类型为“匹配”
                    in.setType(DataBase.MATHCH);
                    out.setType(DataBase.MATHCH);
                    // 添加到匹配数组中
                    matchLogs[index++] = new MatchedLogRec(in, out);
                }
            }
        }
        return matchLogs;
    }
}

【任务6.4】创建日志数据分析测试类,测试任务6.1-6.3中的程序,演示日志信息的采集、分析及打印输出

在com.qst.dms.dos 下创建EntityDataDemo.java

功能要求:
采集3组日志信息,放到数组中,进行日志分析、过滤,对于匹配的日志信息打印输出

        // 创建一个日志业务类
		
		// 创建一个日志对象数组,用于存放采集的三个日志信息
		
		// 创建日志数据分析对象
		;
		// 日志数据过滤
		;
		// 日志数据匹配分析
		;
		// 判断objs数组是否是配置日志数组
		if (objs instanceof MatchedLogRec[]) {
			// 将对象数组强制类型转换成配置日志数组
			;
			// 输出匹配的日志信息
			;
		}

程序设计

package com.qst.dms.dos;

import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.gather.LogRecAnalyse;
import com.qst.dms.service.LogRecService;

public class EntityDataDemos {
    public static void main(String[] args) {
        // 创建一个日志业务类
        LogRecService logService = new LogRecService();

        // 创建一个日志对象数组,用于存放采集的三个日志信息
        LogRec[] logs = new LogRec[3];
        // 采集日志信息,将采集到的日志对象存放到logs数组中
        logs[0] = logService.inputLog();
        logs[1] = logService.inputLog();
        logs[2] = logService.inputLog();

        // 创建日志数据分析对象
        LogRecAnalyse logAnalyse = new LogRecAnalyse(logs);

        // 日志数据过滤
        logAnalyse.doFilter();

        // 日志数据匹配分析
        Object[] objs = logAnalyse.matchData();

        // 判断objs数组是否是配置日志数组
        if (objs instanceof MatchedLogRec[]) {
            // 将对象数组强制类型转换成配置日志数组
            MatchedLogRec[] matchedLogs = (MatchedLogRec[]) objs;

            // 输出匹配的日志信息
            for (MatchedLogRec log : matchedLogs) {
                if(log!=null) {
                    System.out.println(log);
                }
            }
        }
    }
}

测试

1

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

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

相关文章

单片机如何开启TFTP服务器

一、开发测试环境 野火stm32开发板,w5500模块,Tftpd64软件,rt-thread操作系统和netutils软件包(网络小工具集)。(RT-Thread 目前支持 TFTP 服务器和 TFTP 客户端)。 二、tftp介绍-简单文件传输的…

matlab学习指南(1):matlab初步入门详细介绍

🌅*🔹** φ(゜▽゜*)♪ **🔹*🌅 欢迎来到馒头侠的博客,该类目主要讲数学建模的知识,大家一起学习,联系最后的横幅! 喜欢的朋友可以关注下,私信下次更新不迷路&#xff0…

Linux C程序开发,多线程编程、网络编程

目录 多线程编程 网络编程 Linux C程序开发是指在Linux操作系统下使用C语言进行开发的过程。Linux是一种开源的操作系统,具有稳定性、安全性和灵活性等优点,因此在很多领域都得到了广泛的应用。 多线程编程 多线程编程是指在一个程序中同时运行多个线…

二、OAuth2 client对接Spring Authorization Server

这里用的是授权码模式 搭建&#xff1a;Spring Authorization Server 代码结构如下&#xff1a; 代码实现 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> …

Failed to connect to github.com port 443: Connection refused问题解决

文章目录 一、问题描述&#xff1a;Failed to connect to github.com port 443: Connection refused问题解决二、解决方法一&#xff1a;排查代理问题1、尝试重置代理或者取消代理的方式2、添加全局代理 三、解决方法二&#xff1a;排查DNS解析问题1、第一步&#xff1a;查找gi…

软考高级之系统架构师系列之软件开发模型

概述 如标题所述。本文面向于软考高级&#xff0c;具体来说是系统架构师。 本来几乎是纯粹的理论知识汇总&#xff0c;用于应付软考&#xff0c;在理解基础上注意抠字眼。 软件开发方法 分类描述结构化法强调用户至上&#xff0c;严格区分工作阶段&#xff0c;每阶段都有任…

老电脑如何用U盘重装系统?老电脑用U盘重装系统教程

老电脑如何用U盘重装系统&#xff1f;用户利用U盘来给老电脑重装系统&#xff0c;能够帮助解决老电脑运行缓慢、系统出现故障或感染病毒等问题&#xff0c;通过重装系统&#xff0c;可以清除旧的系统文件和应用程序&#xff0c;重新安装一个干净且高效的操作系统&#xff0c;那…

Java8实战-总结1

Java8实战-总结1 基础知识流处理用行为参数化把代码传递给方法并行与共享的可变数据Java需要演变 Java 中的函数 基础知识 流处理 流是一系列数据项&#xff0c;一次只生成一项。程序可以从输入流中一个一个读取数据项&#xff0c;然后以同样的方式将数据项写入输出流。一个程…

TypeScript 学习笔记(二):接口与类型别名、字面量类型

一、接口的定义 在面向对象的编程中&#xff0c;接口是一种规范的定义&#xff0c;它定义了行为和动作的规范&#xff0c;在程序设计里面&#xff0c;接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范&#xff0c;接口不关心这些类的内部状态数据&#xff0…

qt 聊天室

服务器端 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器对象server new QTcpServer(this);}Widget::~Widget() {delete ui; }…

ELK插件介绍

ELK插件介绍 一、Grok 正则捕获插件1、概述2、内置正则表达式调用3、自定义表达式调用 二、multiline 多行合并插件1、概念2、安装3、使用 multiline 插件 三、date 时间处理插件1、概念2、操作3、时间戳详解 四、mutate 数据修改插件1、概念2、案例 一、Grok 正则捕获插件 1、…

上海亚商投顾:沪指震荡反弹 新能源车产业链再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡反弹&#xff0c;创业板指午后涨近1%。新能源车产业链再度爆发&#xff0c;整车、零部件、智能驾驶等…

python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

简介 前边几篇&#xff0c;已经教小伙伴们掌握了如何生成HTML的测试报告&#xff0c;那么生成测试报告&#xff0c;我们也不能放在那里不管了&#xff0c;这样即使你报告在漂亮&#xff0c;领导也看不到。因此如果想向领导汇报工作&#xff0c;不仅需要提供更直观的测试报告。而…

大学生活动社交小程序开发笔记(1)

可研分析 大学生活动社交小程序是一种基于移动互联网的社交平台&#xff0c;旨在为大学生提供一个方便、快捷、安全的社交和活动交流平台 功能规划 活动发布&#xff1a;平台可以发布将要举行的活动&#xff0c;包括时间、地点、费用等信息&#xff0c;并邀请其他用户参加。…

《UNUX环境高级编程》(8)进程控制

1、引言 2、进程标识 每个进程都用一个唯一的非负整数标识&#xff0c;即为进程id&#xff1a;pid。进程ID是可以复用的&#xff0c;当一个进程终止时&#xff0c;其进程ID就可以用来标识其他进程。系统中有一些专用进程&#xff1a; 进程ID为0的是调度进程&#xff0c;也称交…

【软件测试】Git 远程仓库的使用(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 查看远程仓库 想…

Docker笔记 容器的数据卷

1. 数据卷概念 思考&#xff1a; Docker容器删除后&#xff0c;在容器中产生的数据还在吗&#xff1f; 答案是不在了&#xff0c;数据存放在容器中&#xff0c;如果将容器删除&#xff0c;数据也会被一并删除 Docker容器和外部机器可以直接交换文件吗&#xff1f; 答案是不…

为什么需要Promises ?

同步"异步操作", 避免Block多层嵌套造成的"回调地狱" The problem with async code (without Promises) Typically, async operations take a completion handler in a form of a block, which is called to provide either a result or an error. To per…

银河麒麟服务器v10 sp1 部署 redis 及redis gui 客户端工具

上一篇&#xff1a;银河麒麟服务器v10 sp1 redis开机自动启动_csdn_aspnet的博客-CSDN博客 本文介绍另一种redis安装方式及客户端工具安装。 Redis 是一种内存数据模型存储&#xff0c;可用作数据库、缓冲区和消息传递中继。它是开源的&#xff08;BSD 许可&#xff09;。字符…

热爱python的第一天:初识python,搭建python环境,运行第一个python小程序

目录 1 初始python python 概述 python的应用领域 应用python的公司 2 搭建python 开发环境 2.1 安装python&#xff08;以windows 系统为例&#xff09;&#xff08;1&#xff09;下载安装包 &#xff08;2&#xff09; 下载保存后打开文件夹点击以管理员身份运行 &…