綜合練習三

使用到的知識點: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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79158.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Microsoft Entra ID 詳解:現代身份與訪問管理的核心

Microsoft Entra ID(原名為 Azure Active Directory,簡稱 Azure AD)是微軟推出的云端身份和訪問管理服務,專為現代混合環境設計,支持企業安全地管理用戶身份、控制資源訪問,并集成多種應用與服務。以下從核心功能到最佳實踐全面解析 Entra ID。 1. Entra ID 的核心定位 …

從技術角度看Facebook的隱私保護機制

在數字化時代&#xff0c;隱私保護成為了公眾關注的焦點。作為全球最大的社交網絡平臺之一&#xff0c;Facebook 在隱私保護方面采取了一系列技術措施。本文將從技術角度探討 Facebook 的隱私保護機制&#xff0c;揭示它是如何在提供個性化服務的同時&#xff0c;確保用戶隱私信…

基于策略模式實現靈活可擴展的短信服務架構

基于策略模式實現靈活可擴展的短信服務架構 引言 在企業級應用開發中&#xff0c;短信服務是不可或缺的基礎功能之一。隨著業務發展&#xff0c;我們可能需要接入多個短信服務提供商&#xff08;如阿里云、騰訊云、第三方短信網關等&#xff09;&#xff0c;并能夠在不修改核…

Vue 3 單文件組件中 VCA 語法糖及核心特性詳解

在 Vue.js 的開發世界里&#xff0c;單文件組件&#xff08;Single File Components&#xff0c;簡稱 SFC&#xff09;是構建復雜應用的基石。它將 HTML、CSS 和 JavaScript 代碼封裝在一個.vue文件中&#xff0c;極大地提高了代碼的可維護性和復用性。 本文將深入探討單文件組…

【Unity C#從零到精通】項目深化:構建核心游戲循環、UI與動態敵人系統

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

SNR8016語音模塊詳解(STM32)

目錄 一、介紹 二、傳感器原理 1.原理圖 2.引腳描述 三、程序設計 main文件 usart.h文件 usart.c文件 四、實驗效果 五、資料獲取 項目分享 一、介紹 SNR8016語音模塊是智納捷科技生產的一種離線語音識別模塊&#xff0c;設計適合用于DIY領域&#xff0c;開放用戶設…

「動態規劃」線性DP:最長上升子序列(LIS)|編輯距離 / LeetCode 300|72(C++)

概述 DP&#xff0c;即動態規劃是解決最優化問題的一類算法&#xff0c;我們要通過將原始問題分解成規模更小的、相似的子問題&#xff0c;通過求解這些易求解的子問題來計算原始問題。 線性DP是一類基本DP&#xff0c;我們來通過它感受DP算法的奧義。 最長上升子序列&#x…

【NumPy完全指南】從基礎操作到高性能計算實戰

&#x1f4d1; 目錄 一、NumPy核心價值1.1 科學計算現狀分析1.2 ndarray設計哲學 二、核心數據結構解析2.1 ndarray內存布局2.2 數據類型體系 三、矢量化編程實踐3.1 通用函數(ufunc)示例3.2 廣播機制圖解 四、高性能計算進階4.1 內存預分配策略4.2 Cython混合編程 五、典型應用…

你的項目有‘哇‘點嗎?

你的項目有哇點嗎&#xff1f; 刷了一下午招聘軟件&#xff0c;發現沒&#xff1f;大廠JD里總愛寫有創新力者優先——可你們的簡歷&#xff0c;創新力還不如食堂菜單&#xff01; 程序員寫項目最大的誤區&#xff1a;把創新當彩蛋藏最后&#xff01;什么參與需求評審負責模塊…

2025年危化品安全員考試題庫及答案

一、單選題 126.安全生產監督管理部門和負有安全生產監督管理職責的有關部門逐級上報事故情況,每級上報的時間不得超過&#xff08;&#xff09;小時。 A.2 B.6 C.12 答案&#xff1a;A 127.按照《安全生產法》規定,危險化學品生產經營單位的從業人員不服從管理,違反安全生…

第十六屆藍橋杯 C/C++ B組 題解

做之前的真題就可以發現&#xff0c;藍橋杯特別喜歡出找規律的題&#xff0c;但是我還是低估了官方的執念。本博客用于記錄第一次藍橋的過程&#xff0c;代碼寫的很爛&#xff0c;洛谷已經有的題解&#xff0c;這里不再贅述&#xff0c;只說自己遇到的問題。用于以后回顧和查找…

C++ 基于多設計模式下的同步異步?志系統-2項目實現

?志系統框架設計 1.?志等級模塊:對輸出?志的等級進?劃分&#xff0c;以便于控制?志的輸出&#xff0c;并提供等級枚舉轉字符串功能。 ? OFF&#xff1a;關閉 ? DEBUG&#xff1a;調試&#xff0c;調試時的關鍵信息輸出。 ? INFO&#xff1a;提?&#xff0c;普通的提?…

提示詞工程(GOT)把思維鏈推理過程圖結構化

Graph of Thoughts&#xff08;GOT&#xff09;&#xff1f; 思維圖&#xff08;Graph of Thoughts&#xff09;是一種結構化的表示方法&#xff0c;用于描述和組織模型的推理過程。它將信息和思維過程以圖的形式表達&#xff0c;其中節點代表想法或信息&#xff0c;邊代表它們…

登錄github失敗---解決方案

登錄github失敗—解決方案 1.使用 Microsoft Edge 瀏覽器 2.https://www.itdog.cn/dns/ 查詢 github.global.ssl.fastly.net github.com 兩個 域名的 IP 3.修改DNS 為 8.8.8.8 8.8.4.4 4.修改windows hosts 文件 5. 使用 Microsoft Edge 瀏覽器 打開github.com

Spring AOP概念及其實現

一、什么是AOP 全稱Aspect Oriented Programming&#xff0c;即面向切面編程&#xff0c;AOP是Spring框架的第二大核心&#xff0c;第一大為IOC。什么是面向切面編程&#xff1f;切面就是指某一類特定的問題&#xff0c;所以AOP也可以稱為面向特定方法編程。例如對異常的統一處…

強化學習_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction

paper Link: ICM: Curiosity-driven Exploration by Self-supervised Prediction GITHUB Link: 官方: noreward-rl 1- 主要貢獻 對好奇心進行定義與建模 好奇心定義&#xff1a;next state的prediction error作為該state novelty 如果智能體真的“懂”一個state&#xff0c;那…

spring中的@Configuration注解詳解

一、概述與核心作用 Configuration是Spring框架中用于定義配置類的核心注解&#xff0c;旨在替代傳統的XML配置方式&#xff0c;通過Java代碼實現Bean的聲明、依賴管理及環境配置。其核心作用包括&#xff1a; 標識配置類&#xff1a;標記一個類為Spring的配置類&#xff0c;…

7.計算機網絡相關術語

7. 計算機網絡相關術語 ACK (Acknowledgement) 確認 ADSL (Asymmetric Digital Subscriber Line) 非對稱數字用戶線 AP (Access Point) 接入點 AP (Application) 應用程序 API (Application Programming Interface) 應用編程接口 APNIC (Asia Pacific Network Informatio…

Hadoop 集群基礎指令指南

目錄 &#x1f9e9; 一、Hadoop 基礎服務管理指令 ?? 啟動 Hadoop ?? 關閉 Hadoop &#x1f9fe; 查看進程是否正常運行 &#x1f4c1; 二、HDFS 常用文件系統指令 &#x1f6e0;? 三、MapReduce 作業運行指令 &#x1f4cb; 四、集群狀態監控指令 &#x1f4a1; …

【MySQL數據庫】事務

目錄 1&#xff0c;事務的詳細介紹 2&#xff0c;事務的屬性 3&#xff0c;事務常見的操作方式 1&#xff0c;事務的詳細介紹 在MySQL數據庫中&#xff0c;事務是指一組SQL語句作為一個指令去執行相應的操作&#xff0c;這些操作要么全部成功提交&#xff0c;對數據庫產生影…