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

任务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

猜你喜欢

转载自blog.csdn.net/m0_68111267/article/details/131525086