package FCFS;
import java.util.Scanner;
import javax.swing.text.ChangedCharSetException;
import javax.xml.soap.SAAJResult;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Main {
static int i;// 创建的进程数
static int num;
static PCB pcbs[]=null;
static Scanner scanner = new Scanner(System.in);
static int _pid;
static int _arrivaltime;
static int _runtime;
public static void main(String[] args) {
System.out.println("输入命令:");
System.out.println("create: 创建进程");
System.out.println("change: 修改进程的到达时间");
System.out.println("add: 添加进程");
System.out.println("show: 显示调度顺序,和调度详情");
System.out.println("exit: 退出系统");
String code;
while (true) {
code = scanner.next();
if (code.equals("create"))
create();
else if (code.equals("change")) {
if (num == 0) {
System.out.println("未创建进程,不能修改!");
} else {
int index = 0;
System.out.println("请输入进程ID:");
index = scanner.nextInt();
change(index);
}
} else if (code.equals("show"))
show();
else if (code.equals("exit"))
System.exit(0);
else if (code.equals("add"))
add();
else
System.out.println("指令错误,请重新输入!");
}
}
public static void change(int i) {
if (isExit(i) != -1) {
System.out.println("输入进行到达时间:");
pcbs[isExit(i)].ArrivalTime = scanner.nextInt();
sort();
System.out.println("更改完成,请输入指令");
}
if (isExit(i) == -1) {
System.out.println("进程id不存在,请重新输入命令");
}
}
public static void show() {
if (num == 0) {
System.out.println("未创建进程,进程队列为空!");
} else {
for (i = 0; i < num; i++) {
if (i == 0)
System.out.println("进程队列情况:");
System.out.print(pcbs[i].PID + "\t");
}
System.out.print("\n");
for (i = 0; i < num; i++) {
if (i == 0)
System.out.println("进程信息\n" + "进程ID\t" + "到达时间\t"
+ "开始时间\t" + "运行时间\t" + "结束时间\t");
System.out.println(pcbs[i].PID + "\t" + pcbs[i].ArrivalTime
+ "\t" + pcbs[i].StartRuntime + "\t" + pcbs[i].RunTime
+ "\t" + pcbs[i].EndTime() + "\t");
}
for (i = 0; i < num; i++) { System.out.println("进程" + pcbs[i].PID
+ "信息:\t" + "到达时间: " + pcbs[i].ArrivalTime+"\t" + "开始时间: " +
pcbs[i].StartRuntime+"\t" + "运行时间: " + pcbs[i].RunTime+"\t" + "结束时间:" +
pcbs[i].EndTime());}
}
}
public static int isExit(int index) {
//System.out.println("index:"+index);
for (int i = 0; i < num; i++) {
if (pcbs[i].PID == index) {
return i;
}
}
return -1;
}
public static int Exit(int index,int k) {
//System.out.println("index:"+index+"k:"+k);
for (int i = 0; i < k; i++) {
if (pcbs[i].PID == index) {
return i;
}
}
return -1;
}
public static void create() {
System.out.println("请输入创建进程个数");
num = scanner.nextInt();
pcbs = new PCB[num];
System.out.println("请输入进程信息:进程id,进程到达时间,进程运行时间");
int k = 1;
for (i = 0; i < num; i++) {
System.out.println("请输入第" + i
+ "个进程,如:_pid, _arrivaltime, _runtime");
if (i==0) {
_pid = scanner.nextInt();
_arrivaltime = scanner.nextInt();
_runtime = scanner.nextInt();
pcbs[i] = new PCB(_pid, _arrivaltime, _runtime);
}
else {
_pid = scanner.nextInt();
_arrivaltime = scanner.nextInt();
_runtime = scanner.nextInt();
if(Exit(_pid,k)==-1)
{
k++;
// System.out.println("-----------"+i);
pcbs[i] = new PCB(_pid, _arrivaltime, _runtime);
}
else {
System.out.println("进程ID"+_pid+"已存在!请重新输入");
i--;
}
}
}
sort();
System.out.println("输入结束,请运行命令!");
}
public static void add()
{
System.out.println("请输入进程信息:进程id,进程到达时间,进程运行时间");
PCB spc[]=new PCB[num+1];
for(i=0;i<num;i++)
{
spc[i]=pcbs[i];
}
num++;
_pid = scanner.nextInt();
_arrivaltime = scanner.nextInt();
_runtime = scanner.nextInt();
spc[num-1] = new PCB(_pid, _arrivaltime, _runtime);
pcbs=spc;
sort();
System.out.println("插入成功,请查看!");
}
/**
* 进程进行FCFS 排队
*/
public static void sort() {
PCB pcb = new PCB(0, 0, 0);
for (i = 0; i < num; i++)
for (int j = 0; j < num; j++) {
if (pcbs[i].ArrivalTime < pcbs[j].ArrivalTime) {
pcb = pcbs[i];
pcbs[i] = pcbs[j];
pcbs[j] = pcb;
}
}
for (i = 1; i < num; i++) {
if(pcbs[i].ArrivalTime<pcbs[i-1].EndTime())
pcbs[i].setStartRuntime(pcbs[i - 1].EndTime());
else {
pcbs[i].setStartRuntime(pcbs[i].ArrivalTime);
}
}
}
}
评论0
最新资源