用java写一个生产排产系统 ,每次生产不得高于23.43小时,要多种排产方法
时间: 2023-06-20 21:10:02 浏览: 71
一个生产管理系统JAVA
生产排产系统是一个比较复杂的系统,需要考虑到多种因素,包括生产设备的可用性、人员的调配、原材料的供应等等。下面是一个简单的 Java 生产排产系统的实现,可以根据需要进行改进和扩展。
首先,我们需要定义一个生产任务类,包括任务名称、需要的生产时间、优先级等信息:
```java
public class ProductionTask {
private String name; // 任务名称
private double time; // 需要的生产时间
private int priority; // 优先级
public ProductionTask(String name, double time, int priority) {
this.name = name;
this.time = time;
this.priority = priority;
}
// getter 和 setter 方法
}
```
然后,我们需要定义一个生产计划类,它包括了所有的生产任务和排产方法:
```java
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
public class ProductionPlan {
private List<ProductionTask> tasks = new ArrayList<>(); // 所有的生产任务
private List<ProductionTask> completedTasks = new ArrayList<>(); // 已完成的生产任务
private double totalTime = 0; // 已用时间
private PriorityQueue<ProductionTask> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(ProductionTask::getPriority)); // 优先级队列
// 添加任务
public void addTask(ProductionTask task) {
tasks.add(task);
}
// 根据不同的排产方法进行排产
public void schedule(String method) {
if ("FIFO".equals(method)) {
scheduleFIFO();
} else if ("Priority".equals(method)) {
schedulePriority();
} else if ("ShortestTime".equals(method)) {
scheduleShortestTime();
} else {
throw new IllegalArgumentException("Invalid production scheduling method: " + method);
}
}
// 先进先出排产方法
private void scheduleFIFO() {
for (ProductionTask task : tasks) {
if (totalTime + task.getTime() <= 23.43) { // 可以完成
totalTime += task.getTime();
completedTasks.add(task);
} else {
break;
}
}
}
// 按优先级排产方法
private void schedulePriority() {
priorityQueue.addAll(tasks);
while (!priorityQueue.isEmpty()) {
ProductionTask task = priorityQueue.peek();
if (totalTime + task.getTime() <= 23.43) { // 可以完成
totalTime += task.getTime();
completedTasks.add(task);
priorityQueue.poll();
} else {
break;
}
}
priorityQueue.clear();
}
// 最短时间排产方法
private void scheduleShortestTime() {
tasks.sort(Comparator.comparingDouble(ProductionTask::getTime));
for (ProductionTask task : tasks) {
if (totalTime + task.getTime() <= 23.43) { // 可以完成
totalTime += task.getTime();
completedTasks.add(task);
} else {
break;
}
}
}
// getter 和 setter 方法
}
```
最后,我们可以使用生产计划类来进行生产排产的操作。例如:
```java
public class ProductionScheduler {
public static void main(String[] args) {
ProductionPlan plan = new ProductionPlan();
plan.addTask(new ProductionTask("Task1", 10.5, 1));
plan.addTask(new ProductionTask("Task2", 5.2, 2));
plan.addTask(new ProductionTask("Task3", 8.7, 3));
plan.schedule("FIFO"); // 先进先出排产
System.out.println(plan.getCompletedTasks());
plan.clearCompletedTasks();
plan.schedule("Priority"); // 按优先级排产
System.out.println(plan.getCompletedTasks());
plan.clearCompletedTasks();
plan.schedule("ShortestTime"); // 最短时间排产
System.out.println(plan.getCompletedTasks());
}
}
```
这样,我们就可以根据需要使用不同的排产方法进行生产排产了。当然,这只是一个简单的示例,实际生产排产系统还需要考虑更多的因素和细节。
阅读全文