面向对象的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();
    }
}

运行结果:

相关推荐
前网易架构师-高司机21 小时前
带标注的羽毛球运动员,裁判,羽毛球识别数据集,识别率84.4%,2879张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·羽毛球·裁判
微微1笑抽了筋4 天前
xml中设置透明度
xml
Source.Liu5 天前
【Uppsala】入口模块(lib.rs)
xml·rust
Source.Liu5 天前
【Uppsala】介绍
xml·rust
Wang's Blog5 天前
AI Agent白手起家37: LangChain 输出解析器实战:文本、JSON、XML 与 Pydantic
xml·langchain·json
initialize13065 天前
Oracle数据库 binary XML data类型同步
xml·数据库
御坂嘀喵 白日焰火6 天前
LINQ之路18:LINQ to XML之导航和查询
xml·solr·linq
残月心殇 请珍惜枸6 天前
LINQ之路17:LINQ to XML之X-DOM介绍
xml·solr·linq
x17388062739 天前
XXE外部实体注入
xml·笔记
云水一下10 天前
零基础玩转bWAPP靶场(三十):XML/XPath 注入(登录表单)
xml·web安全·bwapp