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

运行结果:

相关推荐
浅陌sss44 分钟前
C#中实现XML解析器
xml·c#
爱编程的小庄11 小时前
Maven 4.0.0 模式-pom.xml配置详解
xml·java·maven
百锦再14 小时前
Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
android·xml·学习·sqlite·kotlin·android studio·数据库开发
wkj0012 天前
springboot + mybatis 需要写 .xml吗
xml·spring boot·mybatis
llkk星期五2 天前
Mujoco xml < sensor>
xml·机器人
weixin_456588152 天前
【Maven】特殊pom.xml配置文件 - BOM
xml·java·maven
百锦再2 天前
Kotlin学习基础知识大全(上)
android·xml·学习·微信·kotlin·studio·mobile
Minyy113 天前
SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常
xml·java·spring boot·后端·spring·mybatis·logback
北极的企鹅883 天前
XML内容解析成实体类
xml·java·开发语言