当前位置: 首页 > news >正文

综合练习三

使用到的知识点: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

相关文章:

  • 评价类模型数据预处理(定量指标值的无量纲化处理)
  • JavaScript加密库crypto-js
  • Java并发编程实战指南:从基础到应用
  • 环形链表的约瑟夫问题
  • 嵌入式Linux系统中的线程信号处理:策略与实践
  • 碳化硅(SiC)MOSFET桥式电路应用中米勒钳位功能的重要性
  • 科智洞察|DeepSeek对国产芯片的影响分析
  • 美国国家生物技术信息中心NCBI介绍
  • 【网络入侵检测】基于源码分析Suricata的引擎日志配置解析
  • 弹窗探索鸿蒙之旅:揭秘弹窗的本质与奥秘
  • WHAT - Tailwind CSS + Antd = MetisUI组件库
  • C++后端服务器开发:侵入式与非侵入式程序结构解析
  • Unity编辑器扩展之导出项目中所有预制体中文本组件文字内容
  • 4月30日星期三今日早报简报微语报早读
  • 第十六届蓝桥杯 2025 C/C++组 数列差分
  • 墨西哥游戏出海推广本土网盟cpi广告策略
  • 【AI提示词】SWOT分析师
  • K8S - 命名空间实战 - 从资源隔离到多环境管理
  • 【CF】Day47——Educational Codeforces Round 178 (Rated for Div. 2) E
  • C++ Lambda表达式中 与 =的作用
  • 从“长绳系日”特展看韩天衡求艺之路
  • 解放日报:浦东夯实“热带雨林”式科创生态
  • 国际油价重挫!美股道指连跌三月,啥情况?
  • 平安资管总经理罗水权因个人工作原因辞职
  • 医学统计专家童新元逝世,终年61岁
  • 圆桌|如何应对特朗普政府的关税霸凌?一种联合国视角的思考