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

运行结果:

相关推荐
hashiqimiya6 小时前
android studio中修改java逻辑对应配置的xml文件
xml·java·android studio
itachi-uchiha3 天前
awk处理xml文件&&封装集合变量和调用
xml·shell·awk
武子康5 天前
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
xml·java·大数据·开发语言·后端·spring
Ll13045252987 天前
基于 COM 的 XML 解析技术(MSXML) 的总结
xml
在代码的海洋中寻找亚特兰蒂斯7 天前
AJAX对于XML和JSON的处理
xml·ajax·json
BinField8 天前
ToolsSet之:XML工具
xml·windows·microsoft
SEO-狼术9 天前
Connect Directly to Oracle XML Data
xml·数据库·oracle
YSoup9 天前
2025年目前最新版本Android Studio自定义xml预览的屏幕分辨率
android·xml·android studio
abcnull10 天前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper
Blue桃之夭夭10 天前
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
xml·html·json