⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 banker.txt

📁 程序运行后进入主界面(主界面默认为运行多道批处理程序)
💻 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 + -