综合练习三

使用到的知识点: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.mzph.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;对数据库产生影…