快递包裹配送管理
需求描述
构建一个快递包裹配送管理系统,完成以下操作:
- 记录每个快递包裹的信息,包括包裹编号、收件人姓名、收件地址和是否已配送。
- 可以添加新的快递包裹到系统中。
- 标记某个包裹为已配送状态。
- 统计所有已配送和未配送的包裹数量。
- 展示所有未配送的包裹信息。
数据描述
- 快递包裹信息用 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();
}
}
运行结果:
