面向对象的XML综合练习

快递包裹配送管理

需求描述

构建一个快递包裹配送管理系统,完成以下操作:

  1. 记录每个快递包裹的信息,包括包裹编号、收件人姓名、收件地址和是否已配送。
  2. 可以添加新的快递包裹到系统中。
  3. 标记某个包裹为已配送状态。
  4. 统计所有已配送和未配送的包裹数量。
  5. 展示所有未配送的包裹信息。
数据描述
  • 快递包裹信息用 Package 类表示,包含包裹编号(String 类型)、收件人姓名(String 类型)、收件地址(String 类型)和是否已配送(boolean 类型)。
  • 所有快递包裹信息存储在一个 List<Package> 集合中。
测试数据描述

|--------------|---------------|-------------------|---------------|
| 包裹编号 | 收件人姓名 | 收件地址 | 是否已配送 |
| P001 | 张三 | 北京市朝阳区 XX 路 XX 号 | false |
| P002 | 李四 | 上海市浦东新区 XX 路 XX 号 | false |
| P003 | 王五 | 广州市天河区 XX 路 XX 号 | true |

附加需求

将张三元素添加进XML中

Package类

复制代码
public class Package {
    private String no;
    private String name;
    private String address;
    private boolean isSend;

    public Package() {
    }

    public Package(String no, String name, String address, boolean isSend) {
        this.no=no;
        this.name=name;
        this.address=address;
        this.isSend=isSend;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no=no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name=name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address=address;
    }

    public Boolean isSend() {
        return isSend;
    }

    public void setSend(boolean send) {
        isSend=send;
    }

    @Override
    public String toString() {
        return "包裹编号:"+getNo()+",收件人姓名:"+getName()+",收件地址:"+getAddress()
                +"是否配送:"+(isSend ? "已配送": "未配送");
    }
}

PackageList类

复制代码
import java.util.ArrayList;
import java.util.List;

public class PackageList {

    private List<Package> packages;

    public PackageList() {
        this.packages = new ArrayList<>();
    }

    public List<Package> getPackages() {
        return packages;
    }

    public void setPackages(List<Package> packages) {
        this.packages=packages;
    }

    public void addPackage(Package p){
        packages.add(p);
    }

    public void packageIsSend(Package p){
        for (Package aPackage : packages) {
            if (aPackage.equals(p)){
                aPackage.setSend(true);
            }
        }
    }

    public void sendCount(){
        int send =0;
        int notSend = 0;
        for (Package aPackage : packages) {
            if (aPackage.isSend() == true){
                send++;
            }else {
                notSend++;
            }
        }
        System.out.println("已配送包裹数量:"+send);
        System.out.println("未配送包裹数量:"+notSend);
    }

    public void notSendInfo(){
        for (Package aPackage : packages) {
            if (aPackage.isSend() == false){
                System.out.println(aPackage);
            }
        }
    }

    public void show(){
        for (Package aPackage : packages) {
            System.out.println(aPackage);
        }
    }
}

Test:

复制代码
public class Test {
    public static void main(String[] args) {
        Package p1 = new Package("P001","张三","北京市朝阳区 XX 路 XX 号",false);
        Package p2 = new Package("P001","李四","上海市浦东新区 XX 路 XX 号",false);
        Package p3 = new Package("P001","王五","广州市天河区 XX 路 XX 号",true);

        PackageList packageList = new PackageList();
        packageList.addPackage(p1);
        packageList.addPackage(p2);
        packageList.addPackage(p3);

        packageList.show();
        System.out.println("====================");
        packageList.packageIsSend(p1);
        packageList.show();
        System.out.println("====================");
        packageList.notSendInfo();
        System.out.println("====================");
        packageList.sendCount();
        System.out.println("====================");

    }
}

运行结果:

创建XML文件格式:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<PackageInfo>
    <SFpackage name="" no="">
        <address>xxxxxx</address>
        <sendState>xxxx</sendState>
    </SFpackage>
</PackageInfo>

dom4jPackage类

复制代码
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileWriter;
import java.io.IOException;

public class dom4jPackage {

    private Document doc;

    /**
     * 加载文件转换成dom4j的文档对象
     */
    public void loadDocument() throws DocumentException {
        //读取xml文件的对象
        SAXReader saxReader = new SAXReader();
        //读取文件, 将读取的内容转换成document对象
        doc = saxReader.read("src/classTest/Package.xml");
    }

    public void addPackageInfo() throws IOException {
        //创建xml格式的Output对象
        OutputFormat outputFormat = new OutputFormat();
        //创建文件写入的对象
        FileWriter fileWriter = new FileWriter("src/classTest/Package.xml");
        //将文件写入的格式转换为xml格式
        XMLWriter xmlWriter = new XMLWriter(fileWriter,outputFormat);
        //写入文件doc
        xmlWriter.write(doc);
        //关闭流
        xmlWriter.close();
        fileWriter.close();
    }

    /**
     * 添加xml文件中存储的数据
     */
    public void addPackage(Package p) throws IOException {
        //获取根节点
        Element root = doc.getRootElement();
        //添加子元素和子元素的属性
        Element SFpackageElement = root.addElement("SFpackage");
        SFpackageElement.addAttribute("name",p.getName());
        SFpackageElement.addAttribute("id",p.getNo());
        //添加子元素的元素<address>、<sendState>和<address>、<sendState>元素内的文本信息
        Element addressElement = SFpackageElement.addElement("address");
        addressElement.setText(p.getAddress());
        Element sendStateElement = SFpackageElement.addElement("sendState");
        sendStateElement.setText(p.isSend().toString());
        //调用写入方法
        addPackageInfo();
    }

}

Test-PackageXML

复制代码
import org.dom4j.DocumentException;

import java.io.IOException;

public class TestPackageXml {
    public static void main(String[] args) throws DocumentException, IOException {
        Package p1 = new Package("P001","张三","北京市朝阳区 XX 路 XX 号",false);
        dom4jPackage dom4jPackage = new dom4jPackage();
        dom4jPackage.loadDocument();
        dom4jPackage.addPackage(p1);
        dom4jPackage.addPackageInfo();
    }
}

运行结果:

相关推荐
就叫飞六吧18 分钟前
考古spring.xml注册bean无法扫描目录问题
xml·java·spring
Star abuse2 小时前
XML转YOLO格式数据集教程
xml·人工智能·yolo
gAlAxy...1 天前
MyBatis 核心配置文件 SqlMapConfig.xml 全解析
xml·mybatis
编程修仙2 天前
第十一篇 Spring事务
xml·java·数据库·spring
金士顿2 天前
Ethercat耦合器添加的IO导出xml 初始化IO参数
android·xml·java
烤麻辣烫3 天前
黑马程序员苍穹外卖后端概览
xml·java·数据库·spring·intellij-idea
暗碳3 天前
安卓abx二进制xml文件转换普通xml文件
android·xml
jinxinyuuuus3 天前
文件格式转换工具:XLSX的XML流式解析、数据类型推断与CSV编码规范
xml
czlczl200209253 天前
从抛出异常到返回 JSON/XML:SpringBoot 异常处理全链路解析
xml·spring boot·json
jiayong233 天前
MyBatis XML Mapper 特殊字符处理方案
xml·mybatis