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

运行结果:

相关推荐
3D小将2 小时前
从产品展示到工程设计:3DXML 转 STP 的跨流程数据转换技术解析
xml·3d
LYPHARD MELODY。1 天前
将 JSON 批量转换为 XML:深度解析与完整实现指南
xml·json
diving deep2 天前
XML简要介绍
xml·java·后端
JosieBook2 天前
【VS】VS2019中使用rdlc报表,生成之前修改XML
xml
AI+程序员在路上2 天前
XML介绍及常用c及c++库
xml·c语言·c++
炯哈哈3 天前
【上位机——WPF】App.xml和Application类简介
xml·开发语言·c#·wpf·上位机
xrkhy3 天前
java中XML的使用
xml·java·开发语言
huang_hai_an3 天前
jackson-dataformat-xml引入使用后,响应体全是xml
xml
张扬飞舞3 天前
IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
xml·java·intellij-idea
search74 天前
配置文件介绍xml、json
xml·json