使用到的知識點:xml文件,初始化file數據,提取file文件數據
題目:水文檢測系統
備注:可以把序號作為該條數據的唯一標識(即UUID),而不是第一條第二條數據這樣的類型。代碼是后者,所以查詢數據的時候繁瑣,顯示數據的時候也是123這樣排列的,不要模仿。
舉例:有001、002、003三條數據,刪除了002數據,那么顯示數據的時候應該是001、003,而不是001、002。
user.xml
<?xml version="1.0" encoding="UTF-8"?>
<users><user><username>zhangsan</username><password>123456</password></user>
</users>
util(將日期格式轉換為毫秒再轉換為Date格式存入文件)
????????TimeTransfer類
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;public class TimeTransfer {public Date timeTransfer(String dateString){// 定義日期時間格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 解析日期字符串為 LocalDateTime 對象LocalDateTime localDateTime = LocalDateTime.parse(dateString, formatter);// 將 LocalDateTime 對象轉換為毫秒數long millis = localDateTime.plusHours(-8).toInstant(ZoneOffset.UTC).toEpochMilli();Date date=new Date(millis);return date;}
}
entity
? ? ? ? User類
public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username=username;this.password=password;}public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username=username;this.password=password;}public String getUsername() {return username;}public void setUsername(String username) {this.username=username;}public String getPassword() {return password;}public void setPassword(String password) {this.password=password;}
}public String getUsername() {return username;}public void setUsername(String username) {this.username=username;}public String getPassword() {return password;}public void setPassword(String password) {this.password=password;}
}
????????CheckData類
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;public class CheckData implements Serializable {private Date date;private String company;private String station;private String plate;private String temperature;private String depth;private String height;private String electricalConductivity;public CheckData() {}public CheckData(Date date, String company, String station, String plate, String temperature, String depth, String height, String electricalConductivity) {this.date=date;this.company=company;this.station=station;this.plate=plate;this.temperature=temperature;this.depth=depth;this.height=height;this.electricalConductivity=electricalConductivity;}public Date getDate() {return date;}public void setDate(Date date) {this.date=date;}public String getCompany() {return company;}public void setCompany(String company) {this.company=company;}public String getStation() {return station;}public void setStation(String station) {this.station=station;}public String getPlate() {return plate;}public void setPlate(String plate) {this.plate=plate;}public String getTemperature() {return temperature;}public void setTemperature(String temperature) {this.temperature=temperature;}public String getDepth() {return depth;}public void setDepth(String depth) {this.depth=depth;}public String getHeight() {return height;}public void setHeight(String height) {this.height=height;}public String getElectricalConductivity() {return electricalConductivity;}public void setElectricalConductivity(String electricalConductivity) {this.electricalConductivity=electricalConductivity;}@Overridepublic String toString() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date)+"\t\t\t\t"+company+"\t\t"+station+"-"+plate+"\t\t"+temperature+"\t"+depth+"\t"+height+"\t"+electricalConductivity;}
}
? ? ? ? CheckDataList類
import util.TimeTransfer;
import java.io.*;
import java.util.ArrayList;
import java.util.List;public class CheckDataList implements Serializable {private List<CheckData> dataList = new ArrayList<>();public CheckDataList() {}public CheckDataList(List<CheckData> dataList) {this.dataList=dataList;}public List<CheckData> getDataList() {ObjectInputStream ois;try {ois=new ObjectInputStream(new FileInputStream("src/resource/checkData.txt"));dataList=(List<CheckData>) ois.readObject();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return dataList;}public void addDataList(CheckData checkData) {dataList.add(checkData);}//添加數據到文件中public void checkDataWrite(List<CheckData> dataList){try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/resource/checkData.txt"))) {oos.writeObject(dataList);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//添加數據到文件中public static void main(String[] args) {TimeTransfer tt = new TimeTransfer();CheckDataList list = new CheckDataList();CheckData checkData1 = new CheckData(tt.timeTransfer("2019-03-04 13:23:00"),"中國地質大學","水庫水位","白馬","20.3","-1.43","1.43","0.00");CheckData checkData2 = new CheckData(tt.timeTransfer("2019-12-04 23:15:08"),"中國地質大學","水庫水位","壩上","15.5","-9.23","1.43","0.00");CheckData checkData3 = new CheckData(tt.timeTransfer("2019-12-13 09:27:00"),"中國礦業大學","水位2號點","21","未知","未知","0.00","");list.addDataList(checkData1);list.addDataList(checkData2);list.addDataList(checkData3);list.checkDataWrite(list.dataList);List<CheckData> dataList = list.getDataList();for (CheckData checkData : dataList) {System.out.println(checkData);}}}
service
? ? ? ? UserService類
import entity.CheckData;
import entity.CheckDataList;
import entity.User;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class UserService {private CheckDataList dataList =new CheckDataList();List<CheckData> userList = dataList.getDataList();public User userLogin(String username, String password) throws DocumentException {SAXReader saxReader=new SAXReader();Document doc=saxReader.read("src/user.xml");Element root=doc.getRootElement();Iterator<Element> it=root.elementIterator();while (it.hasNext()) {Element user=it.next();//獲取 <username> <password>元素Element userNameElement=user.element("username");Element passwordElement=user.element("password");//獲取元素值String userNameText=userNameElement.getText();String passwordText=passwordElement.getText();//驗證if (userNameText.equals(username) && passwordText.equals(password)) {//返回當前userUser userWhoLogin=new User(username, password);return userWhoLogin;}}return null;}public void showData(){for (int i=0; i < userList.size(); i++) {System.out.println((i+1)+"\t"+userList.get(i));}}public boolean changeData(String changeCompany,String changePlate,String changeTemp){for (CheckData checkData : userList) {CheckData changeData = checkData;if (changeData.getCompany().equals(changeCompany)&& changeData.getPlate().equals(changePlate)){changeData.setTemperature(changeTemp);return true;}}return false;}public boolean deleteData(String deleteCompany, String deletePlate){for (CheckData checkData : userList) {CheckData changeData = checkData;if (changeData.getCompany().equals(deleteCompany)&&changeData.getPlate().equals(deletePlate)){userList.remove(changeData);return true;}}return false;}public void dataGeneral(){int dataCount = 0;int nullCount = 0;Map<String,Integer> mapMost = new HashMap<>();for (CheckData checkData : userList) {dataCount++;if (checkData.getTemperature().equals("未知")){nullCount++;}String company = checkData.getCompany();//map放入單位名稱,統計次數if (mapMost.containsKey(company)){mapMost.put(company,mapMost.get(company)+1);}else {mapMost.put(company,1);}}//遍歷mapint companyMostCount = 0;int companyCount = 0;String companyMost = "";Iterator it = mapMost.keySet().iterator();while (it.hasNext()){companyCount++;String company = (String) it.next();//將次數設置為該鍵的值int count = mapMost.get(company);//如果該值大于最大值,則最大值設為該值,次數最多用戶設置為該值的鍵if (count>companyMostCount){companyMostCount = count;companyMost = company;}}System.out.println("本系統共"+dataCount+"人次數據監測,"+companyCount+"家機構參與,"+nullCount+"條監測數據包含“未知”項,參與檢測最多的單位是“"+companyMost+"”!共參與了:"+companyMostCount+"次。");}
}
view
? ? ? ? UserView
import entity.User;
import org.dom4j.DocumentException;
import service.UserService;import java.util.Scanner;public class UserView {public static void main(String[] args) throws DocumentException {UserView userView = new UserView();userView.show();}private Scanner input = new Scanner(System.in);//用戶的業務邏輯類型private UserService userService = new UserService();//登陸成功之后獲取的用戶信息private User user;public void show() throws DocumentException {while (true) {System.out.println("--水文檢測系統--");System.out.println("1.用戶登錄");System.out.println("2.查看數據");System.out.println("3.修改水溫");System.out.println("4.刪除數據");System.out.println("5.數據統計");System.out.println("6.退出系統");System.out.println("請選擇:");int type = input.nextInt();switch (type) {case 1:login();break;case 2:showData();break;case 3:changeData();break;case 4:deleteData();break;case 5:dataAnalysis();break;case 6:System.out.println(">> 系統已退出 >>>>>>>>>>謝謝使用");return;}}}public void login() throws DocumentException {System.out.println(">> 用戶登錄 >>>>>>>>>>");System.out.println("請輸入賬號:");String username = input.next();System.out.println("請輸入密碼:");String password = input.next();user = userService.userLogin(username,password);if (user!=null){System.out.println("登錄成功!");}else {System.out.println("用戶密碼不正確!");}}public void isLogin(){if (user==null) {System.out.println("抱歉,請先登錄!");return;}}public void showData(){System.out.println(">> 查看數據 >>>>>>>>>>");isLogin();System.out.println("您好,"+user.getUsername()+"系統全部檢測數據如下:");System.out.println("序號\t日期\t\t\t\t單位名稱\t\t測點號牌\t\t水溫\t水位深度\t水位標高\t電導率");userService.showData();}public void changeData(){System.out.println(">> 修改水溫 >>>>>>>>>>");isLogin();System.out.println("您好,"+user.getUsername()+"請輸入您需要修改的數據:");System.out.println("單位名稱:");String changeCompany = input.next();System.out.println("測點號牌地點:");String changePlate = input.next();System.out.println("您需要修改的水溫溫度為:");String changeTemp = input.next();if (userService.changeData(changeCompany,changePlate,changeTemp)){System.out.println("修改成功!");}else {System.out.println("您輸入的數據有誤!");}}public void deleteData(){System.out.println(">> 刪除數據 >>>>>>>>>>");isLogin();System.out.println("您好,"+user.getUsername()+"請輸入您需要刪除的數據:");System.out.println("單位名稱:");String changeCompany = input.next();System.out.println("測點號牌地點:");String changePlate = input.next();if (userService.deleteData(changeCompany,changePlate)){System.out.println("刪除成功!");}else {System.out.println("您輸入的數據有誤!");}}public void dataAnalysis(){System.out.println(">> 數據統計 >>>>>>>>>>");isLogin();userService.dataGeneral();}}
附錄:
dom4j
https://download.csdn.net/download/m0_62696265/90707510?spm=1001.2014.3001.5503