package os.whb;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayDeque;
public class MyListener implements ActionListener {
ShowWin sw = null;
int index1 = 0;
public MyListener(ShowWin sw) {
this.sw = sw;
}
public void actionPerformed(ActionEvent e) {
// int index1 = 0;
if (e.getSource() == sw.b_add) {
int ID = 0;
int cometime = 0;
int runtime = 0;
ID = Integer.parseInt(sw.进程号.getText());
cometime = Integer.parseInt(sw.进入时间.getText());
runtime = Integer.parseInt(sw.执行所需时间.getText());
JC jc = new JC(ID, cometime, runtime);
sw.jc1[index1] = jc;
sw.进程号.setText(null);
sw.进入时间.setText(null);
sw.执行所需时间.setText(null);
sw.t1.setText(null);
for (int i = 0; i <= index1; i++) {
sw.t1.append("进程号:" + sw.jc1[i].ID + " ");
sw.t1.append("到达时间:" + sw.jc1[i].cometime + " ");
sw.t1.append("执行所需时间" + sw.jc1[i].runtime + " ");
sw.t1.append("\n");
}
index1++;
} else if (e.getSource() == sw.b_FCFS) {
sw.t2.setText(null);
double datime = 0;
double atime = 0;
int k = 0;
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
k++;
}
}
JC[] jc2 = new JC[k];
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
jc2[i] = sw.jc1[i];
}
}
JC jc = null;
for (int i = 0; i < (jc2.length) - 1; i++) {
for (int j = i + 1; j < jc2.length; j++) {
if (jc2[i].cometime > jc2[j].cometime) {
jc = jc2[i];
jc2[i] = jc2[j];
jc2[j] = jc;
}
}
}
sw.t2.append("进程的执行顺序为:");
for (int i = 0; i < jc2.length; i++) {
sw.t2.append(jc2[i].ID + "**");
}
sw.t2.append("\n");
jc2[0].begintime = jc2[0].cometime;
jc2[0].overtime = jc2[0].begintime + jc2[0].runtime;
jc2[0].ztime = jc2[0].overtime - jc2[0].cometime;
jc2[0].dztime = jc2[0].ztime / jc2[0].runtime;
atime = atime + jc2[0].ztime;
datime = datime + jc2[0].dztime;
for (int i = 1; i < jc2.length; i++) {
if (jc2[i].cometime < jc2[i - 1].overtime) {
jc2[i].begintime = jc2[i - 1].overtime;
} else
jc2[i].begintime = jc2[i].cometime;
// System.out.println(jc2[i].begintime);
jc2[i].overtime = jc2[i].begintime + jc2[i].runtime;
// System.out.println(jc2[i].overtime);
jc2[i].ztime = jc2[i].overtime - jc2[i].cometime;
// System.out.println(jc2[i].ztime);
jc2[i].dztime = jc2[i].ztime / jc2[i].runtime;
// System.out.println(jc2[i].dztime);
atime = atime + jc2[i].ztime;
datime = datime + jc2[i].dztime;
}
atime = atime / jc2.length;
datime = datime / jc2.length;
sw.t2.append("平均周转时间为:");
sw.t2.append("" + atime);
sw.t2.append("\n");
sw.t2.append("平均带权周转时间为:");
sw.t2.append("" + datime);
sw.t2.append("\n");
} else if (e.getSource() == sw.b_HRN) {
sw.t2.setText(null);
double datime = 0;
double atime = 0;
int k = 0;
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
k++;
}
}
JC[] jc2 = new JC[k];
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
jc2[i] = sw.jc1[i];
}
}
JC jc = null;
for (int i = 1; i < jc2.length; i++) {
if (jc2[0].cometime > jc2[i].cometime) {
jc = jc2[0];
jc2[0] = jc2[i];
jc2[i] = jc;
}
}
jc2[0].begintime = jc2[0].cometime;
jc2[0].overtime = jc2[0].begintime + jc2[0].runtime;
jc2[0].ztime = jc2[0].overtime - jc2[0].cometime;
jc2[0].dztime = jc2[0].ztime / jc2[0].runtime;
atime = atime + jc2[0].ztime;
datime = datime + jc2[0].dztime;
for (int i = 1; i < jc2.length - 1; i++) {
for (int j = i; j < jc2.length; j++) {
if (jc2[j].cometime < jc2[i - 1].overtime) {
jc2[j].wtime = jc2[i - 1].overtime - jc2[j].cometime;
jc2[j].R = 1 + jc2[j].wtime / jc2[j].runtime;
} else {
jc2[j].R = 1;
}
}
/*
* for(int m = 0;m<jc2.length;m++){
* System.out.println(jc2[m].R); }
*/
for (int j = i + 1; j < jc2.length; j++) {
if (jc2[i].R < jc2[j].R) {
jc = jc2[i];
jc2[i] = jc2[j];
jc2[j] = jc;
}
}
if (jc2[i].cometime < jc2[i - 1].overtime) {
jc2[i].begintime = jc2[i - 1].overtime;
} else
jc2[i].begintime = jc2[i].cometime;
// System.out.println(jc2[i].begintime);
jc2[i].overtime = jc2[i].begintime + jc2[i].runtime;
// System.out.println(jc2[i].overtime);
jc2[i].ztime = jc2[i].overtime - jc2[i].cometime;
// System.out.println(jc2[i].ztime);
jc2[i].dztime = jc2[i].ztime / jc2[i].runtime;
// System.out.println(jc2[i].dztime);
atime = atime + jc2[i].ztime;
datime = datime + jc2[i].dztime;
}
if (jc2[k - 1].cometime < jc2[k - 2].overtime) {
jc2[k - 1].begintime = jc2[k - 2].overtime;
} else
jc2[k - 1].begintime = jc2[k - 1].cometime;
jc2[k - 1].overtime = jc2[k - 1].begintime + jc2[k - 1].runtime;
jc2[k - 1].ztime = jc2[k - 1].overtime - jc2[k - 1].cometime;
jc2[k - 1].dztime = jc2[k - 1].ztime/jc2[k - 1].runtime;
atime = atime + jc2[k - 1].ztime;
datime = datime + jc2[k - 1].dztime;
atime = atime/jc2.length;
datime = datime/jc2.length;
sw.t2.append("进程的执行顺序为:");
for (int i = 0; i < jc2.length; i++) {
sw.t2.append(jc2[i].ID + "**");
}
sw.t2.append("\n");
sw.t2.append("平均周转时间为:");
sw.t2.append("" + atime);
sw.t2.append("\n");
sw.t2.append("平均带权周转时间为:");
sw.t2.append("" + datime);
sw.t2.append("\n");
} else if (e.getSource() == sw.b_TR) {
sw.t2.setText(null);
double datime = 0;
double atime = 0;
double time = 0;
int index = 1;
int k = 0;
ArrayDeque<JC> jcq = new ArrayDeque<JC>();
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
k++;
}
}
JC[] jc2 = new JC[k];
for (int i = 0; i < sw.jc1.length; i++) {
if (sw.jc1[i] != null) {
jc2[i] = sw.jc1[i];
jc2[i].mtime = jc2[i].runtime;
}
}
JC jc = null;
for (int i = 0; i < (jc2.length) - 1; i++) {
for (int j = i + 1; j < jc2.length; j++) {
if (jc2[i].cometime > jc2[j].cometime) {
jc = jc2[i];
jc2[i] = jc2[j];
jc2[j] = jc;
}
}
}
time = jc2[0].cometime;
jcq.add(jc2[0]);
JC myjc = null;
myjc = jcq.element();
sw.t2.append("进程的执行顺序为:");
while (myjc != null || time < 1000) {
if (myjc != null) {
sw.t2.append(myjc.ID + "**");
myjc.mtime = myjc.mtime - 1;
if (myjc.mtime == 0) {
time++;
myjc.overtime = time;
myjc.ztime = myjc.overtime - myjc.cometime;
myjc.dztime = myjc.ztime/myjc.runtime;
//System.out.println(myjc.ztime+"%%%"+myjc.dztime+"%%%"+myjc.runtime);
atime = atime + myjc.ztime;
datime = datime + myjc.dztime;
jcq.poll();
if (!jcq.isEmpty()) {
myjc = jcq.element();
} else {
myjc = null;
}
} else {
time++;
for (int i = index; i < k; i++) {
if (jc2[index].cometime <= time) {
jcq.add(jc2[index]);
index++;
}
}
jcq.poll();
jcq.add(myjc);
myjc = jcq.element();
}
//time++;
/*
* for (int i = index; i < k; i++) { if (jc2[index].cometime <=
* time) { jcq.add(jc2[index]); index++; } }
*/
} else{
time++;
for (int i = index; i < k; i++) {
if (jc2[index].cometime <= time) {
jcq.add(jc2[index]);
index++;
}
}
}
if (!jcq.isEmpty()) {
myjc = jcq.element();
} else {
myjc = null;
}
}
//System.out.println(k);
atime = atime / k;
datime = datime / k;
sw.t2.append("\n"