📄 banker.txt
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.Integer;
public class li extends WindowAdapter implements WindowListener,ActionListener,ItemListener
{
JFrame f;
String str;
MenuBar mb;
Menu mf;
JTabbedPane tp,tp1;
FileDialog fnew,fsave,fopen,fqiut;
MenuItem mf1,mf2,mf3,mf4;
static int Chou[]=new int[10],nike=1,lili=-1,r=1;
static int request[]=new int[10],number=0,i=1,m,j,allocation[][]=new int[10][10],require[][]=new int[10][10],species,available[]=new int[10],num,flag=0;
static float weight[]=new float[20],sum1=0,sum2=0,x=1;
static int ready[]=new int[20],run[]=new int[20],mark[]=new int[20],begin[]=new int[20],turnover[]=new int[20],k=1,li=1,jay=1;
TextField tf1,tf2,tf3,tf4,tf5,tf6,tf7,tf8,tf9,tf10,tf11,tf12,tf13,tf14;
Label l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15,l16,l17,l18,l19,l20,l21,l22;
TextArea ta1,ta2,ta3,ta4;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12;
List ls1,ls2,ls3,ls4;
public static void main(String args[])
{
(new li()).display();
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}//windowClosing
public void windowOpened(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void itemStateChanged(ItemEvent e)
{ }
public void display()
{ Panel p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17;
f=new JFrame("操作系统课设");
f.setSize(800,500);
f.setLocation(200,140);
tp=new JTabbedPane(JTabbedPane.TOP);
tp1=new JTabbedPane(JTabbedPane.TOP);
p7=new Panel();
p7.setLayout(new GridLayout(2,1));
mb=new MenuBar();
f.setMenuBar(mb);
mf=new Menu("文件");
mb.add(mf);
mf1=new MenuItem("新建");
mf.add(mf1);
mf1.addActionListener(this);
mf2=new MenuItem("打开");
mf.add(mf2);
mf2.addActionListener(this);
mf3=new MenuItem("保存");
mf.add(mf3);
mf3.addActionListener(this);
mf4=new MenuItem("退出");
mf.add(mf4);
mf4.addActionListener(this);
fsave=new FileDialog(f);
fsave.setTitle("保存");
fsave.setSize(200,200);
fopen=new FileDialog(f);
fopen.setTitle("打开");
fopen.setSize(200,200);
fnew=new FileDialog(f);
fnew.setTitle("新建");
fnew.setSize(200,200);
fqiut=new FileDialog(f);
fqiut.setTitle("退出");
fqiut.setSize(200,200);
p1=new Panel();
p1.setLayout(new GridLayout(1,2));
p1.setBackground(Color.ORANGE);
p7.add(p1); p2=new Panel();
p2.setLayout(new GridLayout(3,3));
p1.add(p2); p4=new Panel();
p4.setLayout(new GridLayout(1,1));
p1.add(p4); p3=new Panel();
p3.setLayout(new GridLayout(2,1));
p3.setBackground(Color.blue);
p7.add(p3); p5=new Panel();
p5.setLayout(new GridLayout(1,5));
p3.add(p5); p6=new Panel();
p6.setLayout(new GridLayout(2,2));
p3.add(p6);
l1=new Label("进程号");
p2.add(l1);
l2=new Label("提交时间");
p2.add(l2);
l3=new Label("运行时间");
p2.add(l3);
l4=new Label("调度次序");
p5.add(l4);
l5=new Label("作业号");
p5.add(l5);
l6=new Label("调度时间");
p5.add(l6);
l7=new Label("周转时间");
p5.add(l7);
l8=new Label("带权周转时间");
p5.add(l8);
tf1=new TextField(3);
p2.add(tf1);
tf2=new TextField(3);
p2.add(tf2);
tf3=new TextField(3);
p2.add(tf3);
b1=new Button("提交");
b1.addActionListener(this);
b2=new Button("完成");
b2.addActionListener(this);
b3=new Button("清除输出");
b3.addActionListener(this);
b12=new Button("请求后安全序列计算");
b12.addActionListener(this);
p2.add(b1); p2.add(b2);
p2.add(b3); ls1=new List();
ls1.addActionListener(this);
ls1.addItemListener(this);
p4.add(ls1);ls2=new List();
p3.add(ls2);b3=new Button("清除结果");
p3.add(b3);l9=new Label("平均周转时间");
p6.add(l9);
l10=new Label("平均带权周转时间");
p6.add(l10);tf5=new TextField(3);
p6.add(tf5);tf6=new TextField(3);
p6.add(tf6);b3.addActionListener(this);
tf7=new TextField(3);tf8=new TextField(3);
tf9=new TextField(3);tf10=new TextField(3);
tf11=new TextField(3);tf12=new TextField(3);
tf13=new TextField(3);tf14=new TextField(3);
l13=new Label("最大需求");l11=new Label("可用资源");
l12=new Label("分配资源");l14=new Label("安全序列如下");
l15=new Label("资源数");l16=new Label("进程数");
l18=new Label("分配资源");l19=new Label("最大需求");
l20=new Label("进程号");l21=new Label("请求资源");
b6=new Button("输入");b6.addActionListener(this);
b7=new Button("计算");b7.addActionListener(this);
b8=new Button("清除显示");b8.addActionListener(this);
b9=new Button("清空");b9.setBounds(100,200,50,50);
b9.addActionListener(this);
b10=new Button("显示输入");
b10.addActionListener(this);
b11=new Button("资源请求");
b11.addActionListener(this);
ls3=new List();ls4=new List();
ls4.addActionListener(this);
ls4.addItemListener(this);
p15=new Panel();
p15.setLayout(new GridLayout(1,2));
p16=new Panel();
p16.setLayout(new GridLayout(1,1));
p8=new Panel();
p8.setLayout(new GridLayout(2,1));
p8.setBackground(Color.GREEN);
p9=new Panel();
p9.setLayout(new GridLayout(1,2));
p8.add(p9);p12=new Panel();
p12.setLayout(new GridLayout(3,3));
p8.add(p12);
p10=new Panel();
p10.setLayout(new GridLayout(3,5));
p12.add(l14);p12.add(l20);
p12.add(l21);p12.add(ls4);
p12.add(tf13);p12.add(tf14);
p12.add(b9);p12.add(b12);
p9.add(p10);p11=new Panel();
p11.setLayout(new GridLayout(2,1));
p11.add(p15);p11.add(p16);
p15.add(l18);p15.add(l19);
p16.add(ls3);p9.add(p11);
p10.add(l15);p10.add(l16);
p10.add(l11);p10.add(l12);
p10.add(l13);p10.add(tf7);
p10.add(tf8);p10.add(tf9);
p10.add(tf10);p10.add(tf11);
p10.add(b6);p10.add(b7);
p10.add(b8);p10.add(b10);
p10.add(b11);tp.addTab("多道批处理",p7);
tp.addTab("银行家算法",p8);
f.add(tp);f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{ if(e.getActionCommand()=="提交")
{ls1.add(tf1.getText()+" "+tf2.getText()+" "+tf3.getText());number++;
ready[i]=Integer.parseInt(tf2.getText());run[i]=Integer.parseInt(tf3.getText());i++;
tf1.setText("");tf2.setText("");tf3.setText("");
}
if(e.getActionCommand()=="完成")
{process(number,ready,run);i=1;
for(j=1;j<=number;j++)
{str=Integer.toString(j)+""+Integer.toString(mark[j])+" "+Integer.toString(begin[j])+""+Integer.toString(turnover[j])+" "+Float.toString(weight[j]);
ls2.add(str);tf5.setText(Float.toString(sum1));tf6.setText(Float.toString(sum2));}
}
if(e.getActionCommand()=="清除输出")
ls1.clear();
if(e.getActionCommand()=="清除结果")
{ls2.clear();number=0;tf5.setText("");tf6.setText("");
sum1=0;sum2=0;}
if(e.getActionCommand()=="退出")
System.exit(0);
if(e.getActionCommand()=="新建")
fnew.setVisible(true);
if(e.getActionCommand()=="打开")
fopen.setVisible(true);
if(e.getActionCommand()=="保存")
fsave.setVisible(true);
if(e.getActionCommand()=="清除显示")
{tf7.setText("");tf8.setText("");tf9.setText("");tf10.setText("");tf11.setText("");ls3.clear();}
if(e.getActionCommand()=="清空")
{ ls4.clear();tf13.setText("");tf14.setText("");}
if(e.getActionCommand()=="输入")
{if(jay<=Integer.parseInt(tf8.getText()))
{if(li>Integer.parseInt(tf7.getText())){jay++;li=1;} allocation[jay][li]=Integer.parseInt(tf10.getText());require[jay][li]=Integer.parseInt(tf11.getText());
if(jay==1) available[li]=Integer.parseInt(tf9.getText());
if(jay==1) num=Integer.parseInt(tf8.getText());
if(jay==1) species=Integer.parseInt(tf7.getText());
li++;}
}
if(e.getActionCommand()=="显示输入")
{ str=tf10.getText()+" "+tf11.getText();ls3.add(str);}
if(e.getActionCommand()=="计算")
{security(allocation,require,species,available,num);
if(num==flag)
for(i=1;i<=num;i++)
ls4.add(Integer.toString(Chou[i]));
else ls4.add("无安全序列!");
jay=1;li=1;}
if(e.getActionCommand()=="资源请求")
{if(r==1)
{lili=Integer.parseInt(tf13.getText());r=0;}
if(nike<=species){request[nike]=Integer.parseInt(tf14.getText());nike++;}
}
if(e.getActionCommand()=="请求后安全序列计算")
{security11(allocation,require,species,available,num,lili,request);
if(x==0) {ls4.add("无安全序列!");x=1;}
else
{if(num==flag)
for(i=1;i<=num;i++)
ls4.add(Integer.toString(Chou[i]));
else ls4.add("无安全序列!");}
jay=1;li=1;nike=1;r=1;}
}
void process(int num,int ready[],int run[])
{int temp=ready[1],finish[]=new int[20];
float affect[]=new float[20],highaffect;
int i,j=1,n;
for(i=1;i<=num;i++)
{if((ready[i]%100+run[i])>=60) finish[i]=(ready[i]%100+run[i])/60*100+ready[i]-ready[i]%100+(ready[i]%100+run[i])-((ready[i]%100+run[i])/60)*60;
else finish[i]=ready[i]+run[i];
}
for(i=2;i<=num;i++)
{ if(ready[i]<temp)
{temp=ready[i];mark[j]=i;begin[j]=ready[i];turnover[j]=run[i];weight[j]=1;}
else {mark[j]=1;begin[j]=ready[1];turnover[j]=run[1];weight[j]=1;}
}
ready[mark[j]]=10000;
for(i=1;i<=num;i++)
{j++;
ready[mark[j-1]]=10000;
for(n=1;n<=num;n++)
if(ready[n]!=10000){
if(ready[n]>finish[mark[j-1]]);
else
{begin[j]=finish[mark[j-1]];
if(finish[mark[j-1]]%100<ready[n]%100)
{turnover[j]=((int)(finish[mark[j-1]]/100)-(int)(ready[n]/100))*60+run[n]+finish[mark[j-1]]%100-ready[n]%100;}
else turnover[j]=((int)((finish[mark[j-1]]-ready[n])/100))*60+run[n]+finish[mark[j-1]]%100-ready[n]%100;
weight[j]=((float)turnover[j])/((float)run[n]);
affect[n]=((float)turnover[j])/((float)run[n]);}
}
highaffect=0;
for(n=1;n<=num;n++)
if(ready[n]!=10000)
{if(highaffect<=affect[n])
{highaffect=affect[n];m=n;}}
if(ready[m]>finish[mark[j-1]]);
else
{if((finish[mark[j-1]]%100+run[m])>=60) finish[m]=(finish[mark[j-1]]%100+run[m])/60*100+finish[mark[j-1]]-finish[mark[j-1]]%100+(finish[mark[j-1]]%100+run[m])-((finish[mark[j-1]]%100+run[m])/60)*60;
else
finish[m]=finish[mark[j-1]]+run[m];
begin[j]=finish[mark[j-1]];
turnover[j]=(finish[m]/100-ready[m]/100)*60+finish[m]%100-ready[m]%100;
weight[j]=((float)turnover[j])/((float)run[m]);}
mark[j]=m;}
for(i=1;i<=num;i++)
sum1=turnover[i]+sum1;
sum1=sum1/num;
for(i=1;i<=num;i++)
sum2=weight[i]+sum2;
sum2=sum2/num;
}
void security(int allocation[][],int require[][],int species,int available[],int num)
{
int i,j,Need[][]=new int[10][10],temp[]=new int[10],cl=0,n=1,want[][]=new int[10][10],m,finish[]=new int[10];
for(i=1;i<=species;i++)
temp[i]=available[i];
for(i=1;i<=num;i++)
finish[i]=0;
for(i=1;i<=num;i++)
for(j=1;j<=species;j++)
{Need[i][j]=require[i][j]-allocation[i][j];want[i][j]=Need[i][j];}
for(i=1;i<=num;i++)
{flag=0;
for(j=1;j<=species;j++)
if(Need[i][j]<=temp[j])flag++;
if(flag==species)
{Chou[n]=i;n++;finish[i]=1;cl=1;
for(m=1;m<=species;m++)
{temp[m]=temp[m]+allocation[i][m];
Need[i][m]=1000;}}
if(n!=(num+1)&&cl==1&&i==num){i=0;cl=0;}
}flag=0;
for(i=1;i<=num;i++)
if(finish[i]==1)++flag;}
void security11(int allocation[][],int require[][],int species,int available[],int num,int lili,int request[])
{int i,j,Need[][]=new int[10][10],temp[]=new int[10],cl=0,n=1,want[][]=new int[10][10],m,finish[]=new int[10];
for(i=1;i<=species;i++)
temp[i]=available[i];
for(i=1;i<=num;i++) finish[i]=0;
for(i=1;i<=num;i++)
for(j=1;j<=species;j++)
{Need[i][j]=require[i][j]-allocation[i][j];want[i][j]=Need[i][j];}
for(i=1;i<=num;i++)
if(i==lili)
{for(j=1;j<=species;j++)
if(request[j]<=available[j])flag++;}
if(flag==species)for(j=1;j<=species;j++)
{Need[lili][j]=Need[lili][j]-request[j];temp[j]=temp[j]-request[j];allocation[lili][j]=allocation[lili][j]+request[j];}
else {x=0;return;}
for(i=1;i<=num;i++)
{flag=0;
for(j=1;j<=species;j++)
if(Need[i][j]<=temp[j])flag++;
if(flag==species)
{Chou[n]=i;n++;finish[i]=1;cl=1;
for(m=1;m<=species;m++)
{temp[m]=temp[m]+allocation[i][m];
Need[i][m]=1000;}}
if(n!=(num+1)&&cl==1&&i==num){i=0;cl=0;}}
flag=0;for(i=1;i<=num;i++)
if(finish[i]==1)++flag;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -