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

文章目录

  • 任务9
    • 【任务9.1.1】升级DataBase类为可序列化的类,以便在文件保存或网络中传递
    • 【任务9.1.2】升级LogRec类为可序列化的类,以便在文件保存或网络中传递
    • 【任务9.1.3】升级MatchedLogRec类为可序列化的类,以便在文件保存或网络中传递
    • 【任务9.1.4】升级Transport类为可序列化的类,以便在文件保存或网络中传递
    • 【任务9.1.5】升级MatchedTransport类为可序列化的类,以便在文件保存或网络中传递
    • 【任务9.2】修改LogRecService类,在该类中增加三个方法,分别用于保存匹配的日志信息,读取匹配的日志信息和读取匹配日志信息并返回日志实体集合,实现匹配日志的保存和读取功能
    • 【任务9.3】修改TransportService类,在该类中增加三个方法,分别用于保存匹配的物流信息,和读取匹配的物流信息,实现匹配物流信息的保存和读取功能.
    • 【任务9.4】在com.qst.dms.dos下创建测试类FileDemo,测试匹配的日志、物流信息的保存和读写功能
    • 【任务9.5】 以上的文件的保存,由于使用ObjectOutputStream,在多次进行打开—写入---关闭一个文件时,会出现异常,无法读取所有数据,可以利用下面的方法解决:
    • 【任务9.6】 将数据保存功能,集成到MenuDriver,并进行测试。

任务9

【任务9.1.1】升级DataBase类为可序列化的类,以便在文件保存或网络中传递

程序设计

package com.qst.dms.entity;import java.io.Serializable;
import java.util.Date;public class DataBase implements Serializable {public static final int IN = 1;public static final int OUT = 0;// ID标识private int id;// 时间private Date time;// 地点private String address;// 状态private int type;// 状态常量public static final int GATHER = 1;//"采集"public static final int MATHCH = 2;//"匹配";public static final int RECORD = 3;//"记录";public static final int SEND = 4;//"发送";public static final int RECIVE = 5;//"接收";public static final int WRITE = 6;//"归档";public static final int SAVE = 7;//"保存";public static final String DataType[]=new String[]{null,"GATHER","MATHCH","RECORD","SEND","RECIVE","WRITE","SAVE"};public DataBase(int id, Date time, String address, int type) {this.id = id;this.time = time;this.address = address;this.type = type;}public DataBase() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getType() {return type;}public void setType(int type) {this.type = type;}@Overridepublic String toString() {return  "\nid=" + id +"\ntime=" + time +"\naddress=" + address +"\ntype=" + DataType[type];}
}

【任务9.1.2】升级LogRec类为可序列化的类,以便在文件保存或网络中传递

程序设计

package com.qst.dms.entity;import java.io.Serializable;
import java.util.Date;public class LogRec extends DataBase implements Serializable {/***  登录用户名*/private String user;/*** 登录用户主机IP地址*/private String ip;/*** 登录状态:登录、登出*/private int logType;/*** 登录常量LOG_IN、登出常量常量LOG_OUT*/public static final int LOG_IN=1;public static final int LOG_OUT=0;public static final String LogTypeArray[]=new String[]{"LogOut","LogIn"};public LogRec(int id, Date time, String address, int type, String user, String ip, int logType) {super(id, time, address, type);this.user = user;this.ip = ip;this.logType = logType;}public LogRec() {super();}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public int getLogType() {return logType;}public void setLogType(int logType) {this.logType = logType;}@Overridepublic String toString() {return  "LogRec: " +super.toString() +"\nuser=" + user +"\nip=" + ip +"\nlogType=" + LogTypeArray[logType] +"\n";}public char[] toArray() {String data = this.getId() + "," + this.getTime().getTime() + "," + this.getAddress() + "," + this.getType() + "," + this.getUser() + "," + this.getIp() + "," + LogTypeArray[this.getLogType()];return data.toCharArray();}
}

【任务9.1.3】升级MatchedLogRec类为可序列化的类,以便在文件保存或网络中传递

程序设计

package com.qst.dms.entity;import java.io.Serializable;
import java.util.Date;public class MatchedLogRec extends MatchedDataBase implements Serializable {private LogRec login;private LogRec logout;// user用户登录名public String getUser() {return login.getUser();}// 登入时刻public Date getLogInTime() {return login.getTime();}// 登出时刻public Date getLogoutTime() {return logout.getTime();}// 登入记录public LogRec getLogin() {return login;}// 登出记录public LogRec getLogout() {return logout;}public MatchedLogRec() {}public MatchedLogRec(LogRec login, LogRec logout) {this.login = login;this.logout = logout;}@Overridepublic String toString() {return login.toString() + " | " + logout.toString();}
}

【任务9.1.4】升级Transport类为可序列化的类,以便在文件保存或网络中传递

程序设计

package com.qst.dms.entity;import java.io.Serializable;
import java.util.Date;public class Transport extends DataBase implements Serializable {/*** 经手人*/private String handler;/*** 收货人*/private String reciver;/*** 物流状态*/private int transportType;/*** 物流状态常量:发货中, 送货中, 已签收*/public static final int SENDING = 1;// 发货中public static final int TRANSPORTING = 2;// 送货中public static final int RECEIVED = 3;// 已签收public static final String TransportArray[]=new String[]{null,"SENDDING","TRANSPORTING","RECIEVED"};public Transport(int id, Date time, String address, int type, String handler, String reciver, int transportType) {super(id, time, address, type);this.handler = handler;this.reciver = reciver;this.transportType = transportType;}public String getHandler() {return handler;}public void setHandler(String handler) {this.handler = handler;}public String getReciver() {return reciver;}public void setReciver(String reciver) {this.reciver = reciver;}public int getTransportType() {return transportType;}public void setTransportType(int transportType) {this.transportType = transportType;}@Overridepublic String toString() {return  "Transport: " +super.toString() +"\nhandler=" + handler +"\nreciver=" + reciver +"\ntransportType=" + TransportArray[transportType] +"\n";}public char[] toArray() {String data = this.getId() + "," + this.getTime().getTime() + "," + this.getAddress() + "," + this.getType() + "," + this.getHandler() + "," + this.getReciver() + "," + TransportArray[this.getTransportType()];return data.toCharArray();}
}

【任务9.1.5】升级MatchedTransport类为可序列化的类,以便在文件保存或网络中传递

程序设计

package com.qst.dms.entity;import java.io.Serializable;public class MatchedTransport extends MatchedDataBase implements Serializable {private Transport send;private Transport trans;private Transport receive;public MatchedTransport(Transport send, Transport tran, Transport rec) {this.send=send;this.trans=tran;this.receive=rec;}public MatchedTransport() {}public Transport getSend() {return send;}public void setSend(Transport send) {this.send = send;}public Transport getTrans() {return trans;}public void setTrans(Transport trans) {this.trans = trans;}public Transport getReceive() {return receive;}public void setReceive(Transport receive) {this.receive = receive;}@Overridepublic String toString() {return send.toString() + " | " + trans.toString() + " | " + receive.toString();}
}

【任务9.2】修改LogRecService类,在该类中增加三个方法,分别用于保存匹配的日志信息,读取匹配的日志信息和读取匹配日志信息并返回日志实体集合,实现匹配日志的保存和读取功能

首先给类中,增加一个属性:

private static final String  saveFile = "MatchedLogRec.dat";
//存储本地存储文件的文件名。// 匹配日志信息保存,参数是集合
public void saveMatchLogRec(List<MatchedLogRec> matchLogs) {
// 创建一个ObjectOutputStream对象输出流,并连接文件输出流
// 以可追加的方式创建文件输出流,数据保存到MatchedLogRec.dat文件中}// 读匹配日志信息保存,参数是集合
public List<MatchedLogRec> readMatchLogRec(){
List<MatchedLogRec> matchLogs = new ArrayList<>();
// 创建一个ObjectInputStream对象输入流,并连接文件输入流,读MatchedLogRec.dat文件中
//读取文件之前,首先判断文件是否存在,如果不存在,则创建一个空文件
//读取文件中的所有对象时,可以使用异常处理和EOFException异常处理读取结束//读取数据结束后,关闭文件流。
}// 读匹配日志信息保存,参数是集合
public List<LogRec> readLogRec (){
List<LogRec> matchLogs = new ArrayList<>();
// 创建一个ObjectInputStream对象输入流,并连接文件输入流,读MatchedLogRec.dat文件中
//读取文件之前,首先判断文件是否存在,如果不存在,则创建一个空文件
//读取文件中的所有对象时,可以使用异常处理和EOFException异常处理读取结束//读取数据结束后,关闭文件流。
}

程序设计

package com.qst.dms.service;import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.exception.DataAnalyseException;
import com.qst.dms.gather.LogRecAnalyse;
import com.qst.dms.util.AppendObjectOutputStream;import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class LogRecService {private static final String saveFile = "MatchedLogRec.dat";private Scanner scanner;public LogRecService() {scanner = new Scanner(System.in);}public LogRec inputLog() {int id, type, logType;Date nowDate;String address;String user;String ip;while (true) {try {System.out.println("请输入ID标识:");id = scanner.nextInt();nowDate = new Date();System.out.println("请输入地址:");address = scanner.next();type = LogRec.GATHER;System.out.println("请输入登录用户名:");user = scanner.next();System.out.println("请输入主机IP:");ip = scanner.next();System.out.println("请输入登录状态(1表示登录,0表示登出):");logType = scanner.nextInt();if (logType == 0 || logType == 1) {break;} else {throw new IllegalArgumentException("非法的登录状态");}} catch (Exception e) {System.out.println("输入错误,请重新输入");scanner.nextLine();}}return new LogRec(id, nowDate, address, type, user, ip, logType);}public void showLog(List<LogRec> logRecs) {System.out.println("日志信息:");for (LogRec logRec : logRecs) {System.out.println(logRec);}}// 匹配日志信息输出,参数是集合public void showMatchLog(List<MatchedLogRec> matchLogs) {System.out.println("匹配日志信息:");for (MatchedLogRec matchLog : matchLogs) {System.out.println(matchLog);}}// 保存public static void saveLogRec(List<LogRec> matchLogs) {try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();FileOutputStream fileOut = new FileOutputStream(file, true);AppendObjectOutputStream objOut = new AppendObjectOutputStream(file);for (LogRec matchLog : matchLogs) {objOut.writeObject(matchLog);}objOut.close();fileOut.close();System.out.println("匹配日志信息保存成功\n");} catch (IOException e) {System.out.println("保存匹配日志信息发生异常:" + e.getMessage()+"\n");}}//匹配public static List<MatchedLogRec> readMatchLogRec() {List<MatchedLogRec> matchedLogs = new ArrayList<>();List<LogRec> logs = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 使用异常处理和EOFException异常处理读取结束try {while (true) {LogRec log = (LogRec) objIn.readObject();logs.add(log);}} catch (EOFException e) {// 读取结束,不做任何操作}// 创建日志数据分析对象LogRecAnalyse logAnalyse = new LogRecAnalyse(logs);// 日志数据过滤logAnalyse.doFilter();// 日志数据匹配分析try {List<MatchedLogRec> objs = logAnalyse.matchData(); // 进行数据匹配// 处理匹配的日志数据// 判断objs集合是否是配置日志集合if (objs instanceof List<?>) {// 将集合强制类型转换成配置日志集合matchedLogs = (List<MatchedLogRec>) objs;// 输出匹配的日志信息System.out.println("匹配日志信息如下:");for (MatchedLogRec log : matchedLogs) {if (log != null) {System.out.println(log);}}System.out.println("\n");}} catch (DataAnalyseException e) {System.out.println(e.getMessage());}objIn.close();fileIn.close();System.out.println("匹配日志信息读取完成\n");} catch (IOException | ClassNotFoundException e) {System.out.println("读取匹配日志信息发生异常:" + e.getMessage()+"\n");}return matchedLogs;}//显示public static List<LogRec> readLogRec() {List<LogRec> logs = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 使用异常处理和EOFException异常处理读取结束try {while (true) {LogRec log = (LogRec) objIn.readObject();logs.add(log);}} catch (EOFException e) {// 读取结束,不做任何操作}// 输出的日志信息System.out.println("日志信息如下:");for (LogRec log : logs) {if (log != null) {System.out.println(log);}}objIn.close();fileIn.close();System.out.println("日志信息读取完成\n");} catch (IOException | ClassNotFoundException e) {System.out.println("读取日志信息发生异常:" + e.getMessage() +"\n");}return logs;}
}

【任务9.3】修改TransportService类,在该类中增加三个方法,分别用于保存匹配的物流信息,和读取匹配的物流信息,实现匹配物流信息的保存和读取功能.

// 存储物流数据的文件名
private static final String  saveFile = "MatchedTransport.dat";
// 匹配物流信息保存,参数是集合
public void saveMatchedTransport(List<MatchedTransport> matchTrans) {
// 创建一个ObjectOutputStream对象输出流,并连接文件输出流
// 以可追加的方式创建文件输出流,数据保存到MatchedTransport.dat文件中}// 读匹配物流信息保存,参数是集合
public List<MatchedTransport> readMatchedTransport(){
List<MatchedTransport> matchTrans = new ArrayList<>();
// 创建一个ObjectInputStream对象输入流,并连接文件输入流,读MatchedTransport.dat文件中//读取文件之前,首先判断文件是否存在,如果不存在,则创建一个空文件
//读取文件中的所有对象时,可以使用异常处理和EOFException异常处理读取结束//读取数据结束后,关闭文件流。
}// 读匹配物流信息保存,参数是集合
public List<Transport> readTransport(){
List<Transport> matchTrans = new ArrayList<>();
// 创建一个ObjectInputStream对象输入流,并连接文件输入流,读MatchedTransport.dat文件中//读取文件之前,首先判断文件是否存在,如果不存在,则创建一个空文件
//读取文件中的所有对象时,可以使用异常处理和EOFException异常处理读取结束//读取数据结束后,关闭文件流。
}

程序设计

package com.qst.dms.service;import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;
import com.qst.dms.exception.DataAnalyseException;
import com.qst.dms.gather.TransportAnalyse;
import com.qst.dms.util.AppendObjectOutputStream;import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class TransportService {private static final String  saveFile = "MatchedTransport.dat";private Scanner scanner;public TransportService() {scanner = new Scanner(System.in);}public Transport inputTransport() {int transportType;int id, type;Date nowDate;String address, handler, receiver;while (true) {try {System.out.println("请输入ID标识:");id = scanner.nextInt();nowDate = new Date();System.out.println("请输入地址:");address = scanner.next();type = Transport.GATHER;System.out.println("请输入货物经手人:");handler = scanner.next();System.out.println("请输入收货人:");receiver = scanner.next();System.out.println("请输入物流状态(1表示发货中,2表示送货中,3表示已签收):");transportType = scanner.nextInt();if (transportType == 1 || transportType == 2 || transportType == 3) {break;} else {throw new IllegalArgumentException("非法的物流状态");}} catch (Exception e) {System.out.println("输入错误,请重新输入");scanner.nextLine();}}return new Transport(id, nowDate, address, type, handler, receiver, transportType);}public void showTransport(List<Transport> transports) {System.out.println("物流信息:");for (Transport transport : transports) {System.out.println(transport);}}// 匹配物流信息输出,参数是集合public void showMatchTransport(List<MatchedTransport> matchTrans) {System.out.println("匹配物流信息:");for (MatchedTransport matchTran : matchTrans) {System.out.println(matchTran);}}// 保存public static void saveTransport(List<Transport> transports) {try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();FileOutputStream fileOut = new FileOutputStream(file, true);AppendObjectOutputStream objOut = new AppendObjectOutputStream(file);for (Transport transport : transports) {objOut.writeObject(transport);}objOut.close();fileOut.close();System.out.println("匹配物流信息保存成功\n");} catch (IOException e) {System.out.println("保存匹配物流信息发生异常:" + e.getMessage()+"\n");}}//匹配public static List<MatchedTransport> readMatchTransport() {List<MatchedTransport> matchedTransports = new ArrayList<>();List<Transport> transports = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 创建物流数据分析对象TransportAnalyse ta = new TransportAnalyse(transports);// 物流数据过滤ta.doFilter();try {// 物流数据分析List<MatchedTransport> objs = ta.matchData();// 判断objs集合是否是匹配物流集合if (objs instanceof List<?>) {// 将集合强制类型转换成匹配物流集合matchedTransports = (List<MatchedTransport>) objs;// 输出匹配的物流信息System.out.println("匹配物流信息如下:");for (MatchedTransport transport : matchedTransports) {if (transport != null) {System.out.println(transport);}}System.out.println("\n");}} catch (DataAnalyseException e) {System.out.println(e.getMessage());}objIn.close();fileIn.close();System.out.println("匹配物流信息读取完成\n");} catch (IOException e) {System.out.println("读取匹配物流信息发生异常:" + e.getMessage() +"\n");}return matchedTransports;}//显示public static List<Transport> readTransport() {List<Transport> transports = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 使用异常处理和EOFException异常处理读取结束try {while (true) {Transport transport = (Transport) objIn.readObject();transports.add(transport);}} catch (EOFException e) {// 读取结束,不做任何操作}objIn.close();fileIn.close();// 输出的物流信息System.out.println("物流信息如下:");for (Transport transport : transports) {if (transport != null) {System.out.println(transport);}}System.out.println("物流信息读取完成\n");} catch (IOException | ClassNotFoundException e) {System.out.println("读取物流信息发生异常:" + e.getMessage() +"\n");}return transports;}
}

【任务9.4】在com.qst.dms.dos下创建测试类FileDemo,测试匹配的日志、物流信息的保存和读写功能

测试数据如下:

new LogRec(1001, new Date(), "青島",DataBase.GATHER, "zhangsan", "192.168.1.1", 1),
new LogRec(1002, new Date(), "青島", DataBase.GATHER, "zhangsan",	"192.168.1.1", 0)));
new LogRec(1003, new Date(), "北京",DataBase.GATHER, "lisi", "192.168.1.6", 1),
new LogRec(1004, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 0)));
new LogRec(1005, new Date(), "济南",DataBase.GATHER, "wangwu", "192.168.1.89", 1),
new LogRec(1006, new Date(), "济南", DataBase.GATHER,	"wangwu", "192.168.1.89", 0)));new Transport(2001, new Date(), "青島",DataBase.GATHER,"zhangsan","zhaokel",1),
new Transport(2002, new Date(), "北京",DataBase.GATHER,"lisi","zhaokel",2),
new Transport(2003, new Date(), "北京",DataBase.GATHER,"wangwu","zhaokel",3)));
new Transport(2004, new Date(), "青島",DataBase.GATHER,"maliu","zhaokel",1),
new Transport(2005, new Date(), "北京",DataBase.GATHER,"sunqi","zhaokel",2),
new Transport(2006, new Date(), "北京",DataBase.GATHER,"fengba","zhaokel",3)))

程序设计

package com.qst.dms.dos;import com.qst.dms.entity.*;
import com.qst.dms.service.LogRecService;
import com.qst.dms.service.TransportService;import java.util.*;public class FileDemo {public static void main(String[] args) {List<LogRec> logs = new ArrayList<>();List<Transport> transports = new ArrayList<>();//日志信息logs.add(new LogRec(1001, new Date(), "青島", DataBase.GATHER, "zhangsan", "192.168.1.1", 1));logs.add(new LogRec(1002, new Date(), "青島", DataBase.GATHER, "zhangsan", "192.168.1.1", 0));logs.add(new LogRec(1003, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 1));logs.add(new LogRec(1004, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 0));logs.add(new LogRec(1005, new Date(), "济南", DataBase.GATHER, "wangwu", "192.168.1.89", 1));logs.add(new LogRec(1006, new Date(), "济南", DataBase.GATHER, "wangwu", "192.168.1.89", 0));//物流信息transports.add(new Transport(2001, new Date(), "青島",DataBase.GATHER,"zhangsan","zhaokel",1));transports.add(new Transport(2002, new Date(), "北京",DataBase.GATHER,"lisi","zhaokel",2));transports.add(new Transport(2003, new Date(), "北京",DataBase.GATHER,"wangwu","zhaokel",3));transports.add(new Transport(2004, new Date(), "青島",DataBase.GATHER,"maliu","zhaokel",1));transports.add(new Transport(2005, new Date(), "北京",DataBase.GATHER,"sunqi","zhaokel",2));transports.add(new Transport(2006, new Date(), "北京",DataBase.GATHER,"fengba","zhaokel",3));//日志测试LogRecService.saveLogRec(logs);LogRecService.readMatchLogRec();LogRecService.readLogRec();//物流测试TransportService.saveTransport(transports);TransportService.readMatchTransport();TransportService.readTransport();}
}

【任务9.5】 以上的文件的保存,由于使用ObjectOutputStream,在多次进行打开—写入—关闭一个文件时,会出现异常,无法读取所有数据,可以利用下面的方法解决:

下面类主要解决使用ObjectOutputStream进行多次写入数据时,流信息重复写入的问题。

1

使用AppendObjectOutputStream类,修改上面的文件保存方法
创建了AppendObjectOutputStream的流操作对象收,必修执行

设置数据文件,否则在处理流信息写入时会出现错误,无法完成正确的数据存储功能。

程序设计

package com.qst.dms.util;import java.io.*;public class AppendObjectOutputStream extends ObjectOutputStream {private static File file = null;public static File getFile(){return file;}public static void setFile(File file){AppendObjectOutputStream.file = file;}public AppendObjectOutputStream() throws IOException,SecurityException{super();}public AppendObjectOutputStream(File file) throws IOException,SecurityException{super(new FileOutputStream(file,true));}public void writeStreamHeader() throws IOException{if(file==null||(file.exists()&&file.length()==0)){super.writeStreamHeader();}else{this.reset();}}}

【任务9.6】 将数据保存功能,集成到MenuDriver,并进行测试。

程序设计

package com.qst.dms.dos;import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;
import com.qst.dms.exception.DataAnalyseException;
import com.qst.dms.gather.LogRecAnalyse;
import com.qst.dms.gather.TransportAnalyse;
import com.qst.dms.service.LogRecService;
import com.qst.dms.service.TransportService;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class MenuDriver {public static void main(String[] args) {// 建立一个从键盘接收数据的扫描器Scanner scanner = new Scanner(System.in);// 创建一个泛型ArrayList集合存储日志数据List<LogRec> logRecList = new ArrayList<>();// 创建一个泛型ArrrayList集合存储物流数据List<Transport> transportList = new ArrayList<>();// 创建一个日志业务类LogRecService logService = new LogRecService();// 创建一个物流业务类TransportService tranService = new TransportService();// 日志数据匹配集合List<MatchedLogRec> matchedLogs = null;// 物流数据匹配集合List<MatchedTransport> matchedTrans = null;// 运行菜单选择while (true) {System.out.println("请选择操作:");System.out.println("1. 采集数据");System.out.println("2. 数据匹配");System.out.println("3. 显示数据");System.out.println("4. 退出");// 接收键盘输入的选项try {int choice = scanner.nextInt();int type;switch (choice) {case 1:System.out.println("请输入采集数据类型:1.日志  2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {System.out.println("正在采集日志数据,请输入正确信息,确保数据的正常采集!");// 采集日志数据LogRec log = logService.inputLog();// 将采集的日志数据添加到logRecList集合中logRecList.add(log);LogRecService.saveLogRec(logRecList);} else if (type == 2) {System.out.println("正在采集物流数据,请输入正确信息,确保数据的正常采集!");// 采集物流数据Transport tran = tranService.inputTransport();// 将采集的物流数据添加到transportList集合中transportList.add(tran);TransportService.saveTransport(transportList);}break;case 2:System.out.println("请输入匹配数据类型:1.日志  2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {System.out.println("匹配日志数据如下:");// 数据匹配LogRecService.readMatchLogRec();} else if (type == 2) {System.out.println("匹配物流数据如下:");// 数据匹配TransportService.readMatchTransport();}break;case 3:System.out.println("请输入显示原始数据类型:1.日志  2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {// 显示日志数据LogRecService.readLogRec();} else if (type == 2) {// 显示物流数据TransportService.readTransport();}break;case 4:System.out.println("谢谢使用!");return;default:System.out.println("无效选项,请重新选择!");}} catch (Exception e) {System.out.println("非法输入,请重新输入!");scanner.nextLine();}}}
}

测试

2

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

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

相关文章

Java编程-基本排序算法

冒泡排序 图解 &#xff08;注&#xff1a;图片来源网络&#xff09; Java代码 package suanfa_Ja;import org.apache.hadoop.security.SaslOutputStream;// 基本排序算法&#xff0c;冒泡排序 时间复杂度 O(n^2) 空间复杂度O(1) public class BubbleSort {public static v…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【4】-O3 不支持 编译失败

gcc -O3 编译失败 结论&#xff1a;默认情况下SPEC CPU 2006 1.2 不支持 gcc -O3编译参数。

Linux 安装 nginx

正常是两种安装方式 一种是使用系统的包管理软件&#xff0c;比如centos的yum -y install nginx命令&#xff08;简单但不推荐&#xff0c;配置文件分散不易管理&#xff0c;且需要配置第三方源yum -y install epel-release等&#xff0c;如果是简单使用&#xff0c;配置文件什…

[GXYCTF2019]simple CPP

前言 三个加密区域&#xff0c;第一次是基本运算&#xff0c;八位叠加&#xff0c;z3方程 分析 第一轮加密&#xff0c;和Dst中模27异或 &#xff08;出题人对动调有很大意见呢&#xff09; 将输入的字符串按八位存入寄存器中&#xff0c;然后将寄存器内容转存到内存 第一次…

【数据结构与算法】哈夫曼编码(最优二叉树)实现

哈夫曼编码 等长编码&#xff1a;占的位置一样 变长编码&#xff08;不等长编码&#xff09;&#xff1a;经常使用的编码比较短&#xff0c;不常用的比较短 最优&#xff1a;总长度最短 最优的要求&#xff1a;占用空间尽可能短&#xff0c;不占用多余空间&#xff0c;且不…

C\C++ 使用ping判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; ping是一种用于测试网络连接的工具&#xff0c;它通过发送数据包到目标设备并等待其响应来工作&#xff0c;以检查网络是否连通。下面是例子. 效果&#xff1a; 代码…

JavaScript的WebAPI

这里写目录标题 DOM 基本概念获取元素事件概念事件的三要素操作元素获取/修改表单元素属性行内样式操作类名样式操作操作节点 DOM 基本概念 DOM 全称为 Document Object Model. W3C 标准给我们提供了一系列的函数, 让我们可以操作: 网页内容 ,网页结构, 网页样式 DOM数的结构如…

软通动力与华秋达成生态共创合作,共同推动物联网硬件创新

7月11日&#xff0c;在2023慕尼黑上海电子展现场&#xff0c;软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与深圳华秋电子有限公司(以下简称“华秋”)签署了生态共创战略合作协议&#xff0c;共同推动物联网硬件生态繁荣发展。当前双方主要基于软通动力的产品及解…

【Python基础函数笔记】获取当前时间并写入日志

1.获取当前时间 import os from datetime import datetime import pytzdef get_cur_time():# 获取当前时间return datetime.strftime(datetime.now(pytz.timezone(Asia/Singapore)), %Y-%m-%d_%H-%M-%S)# 基础目录 basedir a logdir os.path.join(basedir, logs, str(args.n…

Spring Cloud—GateWay之限流

RequestRateLimiter RequestRateLimiter GatewayFilter 工厂使用 RateLimiter 实现来确定是否允许当前请求继续进行。如果不允许&#xff0c;就会返回 HTTP 429 - Too Many Requests&#xff08;默认&#xff09;的状态。 这个过滤器需要一个可选的 keyResolver 参数和特定于…

STL源码刨析_stack _queue

目录 一. 介绍 1. stack 介绍 2. queue 介绍 二. 模拟实现 1. stack 模拟实现 2. queue 模拟实现 三. deque 1. deque 接口 2. 底层 一. 介绍 1. stack 介绍 stack&#xff08;栈&#xff09;是一种容器适配器&#xff0c;它提供了一种后进先出&#xff08;LIFO&#xff0…

VMware安装Ubuntu(VMware版本17-Ubuntu版本16.0)

VMware安装Ubuntu&#xff08;VMware版本17-Ubuntu版本16.0&#xff09; 一&#xff0c;VMware虚拟机下载官网点击https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/17_0 二&#xff0c;Ubuntu乌班图下载官网点…

会议OA项目之会议发布(多功能下拉框的详解)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于OA项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.主要功能点介绍 二.效果展示 三.前…

[极客大挑战 2019]PHP(反序列化)

介绍说明&#xff0c;有备份的习惯&#xff0c;找常见的备份文件后缀名 使用dirsearch进行扫描 dirsearch -u http://f64378a5-a3e0-4dbb-83a3-990bb9e19901.node4.buuoj.cn:81/ -e php-e 指定网站语言 扫描出现&#xff0c;www.zip文件 查看index.php <?php include c…

C++-----vector

本期我们来学习C中的vector&#xff0c;因为有string的基础&#xff0c;所以我们会讲解的快一点 目录 vector介绍 vector常用接口 构造函数 sort 迭代器 size&#xff0c;max_size&#xff0c;capacity&#xff0c;empty reserve和resize front和back data insert和…

MATLAB 基于CPD的点云配准 (24)

MATLAB 基于CPD的点云配准 (24) 一、算法简介二、具体使用1.代码(注释详细)2.函数介绍3.使用技巧4.重复叠加配准效果如何一、算法简介 MATLAB 中包含了一种基于CPD的点云配准方法,这里对其进行使用,查看其配准效果,结果来看如上图所示,还是可用的。 二、具体使用 1.代…

快7月底了,让我康康有多少准备跳槽的

前两天跟朋友感慨&#xff0c;今年的铜三铁四、裁员、疫情影响导致好多人都没拿到offer!现在已经快7月底了&#xff0c;具体金九银十只剩下2个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

ElasticSearch 数据迁移工具elasticdump

ElasticSearch 数据迁移工具elasticdump Elasticdump 是一个用于导入和导出 Elasticsearch 数据的命令行工具。它提供了一种方便的方式来在不同的 Elasticsearch 实例之间传输数据&#xff0c;或者进行数据备份和恢复。 使用 Elasticdump&#xff0c;你可以将 Elasticsearch …

allure环境搭建

allure环境搭建 在搭建之前你应该有python、pycharm allure介绍 官网&#xff1a;https://docs.qameta.io/allure/ 英文介绍 Allure Framework is a flexible lightweight multi-language test report tool that not only shows a very concise representation of what have…

关于allure和pycharm的运行模式

案例 新建一个项目allure_mode 新建一个python代码test_allure_001.py 代码如下 import pytest, os def test_001(): assert 1 1 if __name__ __main__: pytest.main([-sv, __file__, --alluredir, ./html, --clean-alluredir]) os.system(fallure se…