java代码编写一个模拟物流快递系统的程序,模拟后台系统处理货物的过程。
时间: 2024-03-03 09:49:20 浏览: 19
好的,以下是一个简单的物流快递系统的 Java 代码实现,仅供参考:
```java
import java.util.ArrayList;
import java.util.List;
public class LogisticsSystem {
private List<Package> packages;
private List<Warehouse> warehouses;
public LogisticsSystem() {
this.packages = new ArrayList<>();
this.warehouses = new ArrayList<>();
}
public void createPackage(String sender, String receiver, String destination, double weight) {
Package newPackage = new Package(sender, receiver, destination, weight);
packages.add(newPackage);
System.out.println("新建包裹:" + newPackage);
}
public void createWarehouse(String name) {
Warehouse newWarehouse = new Warehouse(name);
warehouses.add(newWarehouse);
System.out.println("新建仓库:" + newWarehouse);
}
public void allocatePackage(Package p, Warehouse w) {
p.setWarehouse(w);
w.addPackage(p);
System.out.println("将包裹 " + p + " 分配至仓库 " + w);
}
public void shipPackage(Package p) {
p.setStatus(PackageStatus.SHIPPED);
System.out.println("包裹 " + p + " 已发货");
}
public void receivePackage(Package p) {
p.setStatus(PackageStatus.RECEIVED);
System.out.println("包裹 " + p + " 已收货");
}
public void deliverPackage(Package p) {
p.setStatus(PackageStatus.DELIVERED);
System.out.println("包裹 " + p + " 已送达");
}
public void processPackages() {
for (Package p : packages) {
if (p.getStatus() == PackageStatus.CREATED) {
// 找到离目的地最近的仓库
Warehouse nearestWarehouse = null;
double minDistance = Double.MAX_VALUE;
for (Warehouse w : warehouses) {
double distance = calculateDistance(p.getDestination(), w.getLocation());
if (distance < minDistance) {
nearestWarehouse = w;
minDistance = distance;
}
}
// 分配包裹并发货
allocatePackage(p, nearestWarehouse);
shipPackage(p);
} else if (p.getStatus() == PackageStatus.SHIPPED) {
// 模拟送货过程
System.out.println("包裹 " + p + " 正在送往目的地");
if (Math.random() < 0.5) {
// 成功送达
deliverPackage(p);
} else {
// 未能送达,重新分配仓库
System.out.println("包裹 " + p + " 未能送达,重新分配仓库");
p.getWarehouse().removePackage(p);
allocatePackage(p, getAvailableWarehouse());
shipPackage(p);
}
}
}
}
private double calculateDistance(String location1, String location2) {
// 省略计算距离的代码
return Math.random() * 1000;
}
private Warehouse getAvailableWarehouse() {
for (Warehouse w : warehouses) {
if (w.getCapacity() > w.getPackageCount()) {
return w;
}
}
return null;
}
}
class Package {
private String sender;
private String receiver;
private String destination;
private double weight;
private PackageStatus status;
private Warehouse warehouse;
public Package(String sender, String receiver, String destination, double weight) {
this.sender = sender;
this.receiver = receiver;
this.destination = destination;
this.weight = weight;
this.status = PackageStatus.CREATED;
}
public String getSender() {
return sender;
}
public String getReceiver() {
return receiver;
}
public String getDestination() {
return destination;
}
public double getWeight() {
return weight;
}
public PackageStatus getStatus() {
return status;
}
public void setStatus(PackageStatus status) {
this.status = status;
}
public Warehouse getWarehouse() {
return warehouse;
}
public void setWarehouse(Warehouse warehouse) {
this.warehouse = warehouse;
}
@Override
public String toString() {
return "Package{" +
"sender='" + sender + '\'' +
", receiver='" + receiver + '\'' +
", destination='" + destination + '\'' +
", weight=" + weight +
", status=" + status +
", warehouse=" + warehouse +
'}';
}
}
class Warehouse {
private String name;
private String location;
private int capacity;
private List<Package> packages;
public Warehouse(String name) {
this.name = name;
this.capacity = 100;
this.packages = new ArrayList<>();
}
public String getName() {
return name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getCapacity() {
return capacity;
}
public int getPackageCount() {
return packages.size();
}
public void addPackage(Package p) {
packages.add(p);
}
public void removePackage(Package p) {
packages.remove(p);
}
@Override
public String toString() {
return "Warehouse{" +
"name='" + name + '\'' +
", location='" + location + '\'' +
", capacity=" + capacity +
", packageCount=" + packages.size() +
'}';
}
}
enum PackageStatus {
CREATED, SHIPPED, RECEIVED, DELIVERED
}
```
以上代码实现了一个简单的物流快递系统,包括创建包裹、创建仓库、分配包裹、发货、收货、送达等基本功能。在 `processPackages` 方法中,对于每个处于 CREATED 或 SHIPPED 状态的包裹,根据距离最近的仓库进行分配,然后发货或重新分配仓库。在模拟送货过程中,以 50% 的概率模拟成功送达或未能送达的情况。