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

📄 workcall.java

📁 编程,作业调度算法,先来先服务短作业优先
💻 JAVA
字号:
//WorkCall.java
//come true the os-program workcall

//java core package
import java.awt.*;
import java.awt.event.*;
import cn.edubest.work.Work;
import cn.edubest.work.WorkTeam;
//java extension packages
import javax.swing.*;

public class WorkCall extends JFrame{
	private	JPanel panel1,panel2,panel3,panel4,panel5,panel6,panel7;
	private	JTextField text1,text2,text3,text4;
	private	JButton button1,button2,button3,button4,button5,button6,button7,button8,button9;
	private	JLabel label1,label2,label3,label4,label5;
	private int a=0;//输入作业信息时,记录输入作业的个数
	private WorkTeam workTeam,workTeamSJF,workTeamHRN;
	private String FCFSstring,SJFstring,HRNstring;
	private JTextArea FCFSoutput=new JTextArea(),SJFoutput=new JTextArea(),HRNoutput=new JTextArea();
	private JScrollPane FCFSscroller=new JScrollPane( FCFSoutput ),SJFscroller=new JScrollPane( SJFoutput ),
			HRNscroller=new JScrollPane( HRNoutput );
	private double Rp[]=new double[4];
	private double FCFSnumT,FCFSnumW,SJFnumT,SJFnumW,HRNnumT,HRNnumW;//各种酸法对应的周转时间和平均周转时间

	public WorkCall()
	{
		super("作业调度算法");
		ActionEventHandler handler=new ActionEventHandler();	
		Container container=getContentPane();
		container.setLayout( new BorderLayout() );

		//initialize
		panel1= new JPanel();
		panel1.setLayout( new GridLayout( 2,1 ) );
		panel2=new JPanel();
		panel2.setLayout( new GridLayout( 2,1 ) );
		panel3=new JPanel();
		panel3.setLayout( new FlowLayout( FlowLayout.LEADING ) );
		panel4=new JPanel();
		panel4.setLayout( new FlowLayout( FlowLayout.LEADING ) );
		panel5=new JPanel();
		panel5=new JPanel( new FlowLayout( FlowLayout.LEADING ) );
		panel6=new JPanel();
		panel6=new JPanel( new FlowLayout( FlowLayout.LEFT ) );
		panel7=new JPanel();
		panel7=new JPanel( new FlowLayout( FlowLayout.LEADING ) );

		text1=new JTextField( 10 );
		text2=new JTextField( 10 );
		text3=new JTextField( 10 );
		text4=new JTextField( 10 );
		
		button1=new JButton( "OK" );
		button1.addActionListener( handler );
		button2=new JButton( "FCFS" );
		button2.addActionListener( handler );
		button3=new JButton( "SJF" );
		button3.addActionListener( handler );
		button4=new JButton( "HRN" );
		button4.addActionListener( handler );
		button5=new JButton( "Start" );
		button5.addActionListener( handler );
		button6=new JButton( "打印FCFS" );
		button6.addActionListener( handler );
		button7=new JButton( "打印SJF" );
		button7.addActionListener( handler );
		button8=new JButton( "打印HRN" );
		button8.addActionListener( handler );
		button9=new JButton( "刷新" );
		button9.addActionListener( handler );

		label1=new JLabel( "作业:" );
		label2=new JLabel( "作业名:" );
		label3=new JLabel( "提交时刻:" );
		label4=new JLabel( "要求运行时间:" );
		label5=new JLabel( "状态栏:" );

		panel4.add( label1 );
		panel4.add( text1 );

		panel5.add( label2 );
		panel5.add( text2 );
		panel5.add( label3 );
		panel5.add( text3 );
		panel5.add( label4 );
		panel5.add( text4 );
		panel5.add( button1 );

		panel1.add( panel4 );
		panel1.add( panel5 );

		panel6.add( button2 );
		panel6.add( button3 );
		panel6.add( button4 );

		panel7.add( button5 );
		panel7.add( button6 );
		panel7.add( button7 );
		panel7.add( button8 );
		//panel7.add( button9 );

		panel2.add( panel6 );
		panel2.add( panel7 );

		panel3.add( label5 );

		container.add( panel1,BorderLayout.NORTH );
		container.add( panel2,BorderLayout.CENTER );
		container.add( panel3,BorderLayout.SOUTH );

		
		
		
	
		text1.setEnabled( false );
		text2.setEnabled( false );
		text3.setEnabled( false );
		text4.setEnabled( false );
		button1.setEnabled( false );
		button2.setEnabled( false );
		button3.setEnabled( false );
		button4.setEnabled( false );
		
	}

	public static void main( String args[] )
	{
		WorkCall dhn=new WorkCall();
  	        dhn.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

		
		dhn.setSize( 700,230 );//第一个参数是宽,第二个是高
		dhn.setVisible( true );
	}

	private class ActionEventHandler implements ActionListener{
		public void actionPerformed( ActionEvent event )
		{
			if( event.getSource()==button5 )
			{
				text2.setEnabled( true );
				text3.setEnabled( true );
				text4.setEnabled( true );
				button1.setEnabled( true );
				text1.setText( "作业1" );
				workTeam=new WorkTeam();//注意:workTeam的定义必须在这里,不能在main函数中

				
			}

			if( event.getSource()==button1 )
			{
				if(a<4)
				{
					workTeam.setName(text2.getText(),a);
					workTeam.setHandTime(Double.parseDouble(text3.getText()),a);
					workTeam.setRunTime(Double.parseDouble(text4.getText()),a);
//JOptionPane.showMessageDialog(null,"作业名"+workTeam.getName(a),"dhn",JOptionPane.INFORMATION_MESSAGE);
					a++;
					text1.setText( "作业"+(a+1) ) ;
					text2.setText( "" );
					text3.setText( "" );
					text4.setText( "" );
				}
				if(a==4){
					button2.setEnabled( true );//当把所有作业的信息输入完成的时候,才能执行这三条指令
					button3.setEnabled( true );
					button4.setEnabled( true );
					text2.setEnabled( false );
					text3.setEnabled( false );
					text4.setEnabled( false );
					button1.setEnabled( false );
JOptionPane.showMessageDialog(null,"作业信息已经输入完毕,您可以进行调度","dhn",JOptionPane.INFORMATION_MESSAGE);

				}
			}//button1
			if( event.getSource()==button6 )
			{
				printFCFS();
			}
			if( event.getSource()==button7 )
			{
				printSJF();
			}
			if( event.getSource()==button8 )
			{
				printHRN();
			}
			if( event.getSource()==button2 )
			{
				int i=0,xia=0;
				while( i<4 )
				{
					xia=workTeam.findMinTime(workTeam.getTime());
//JOptionPane.showMessageDialog(null,"i="+i+"\n"+"xia"+xia,"dhn",JOptionPane.INFORMATION_MESSAGE);
				 	workTeam.setStartTime( workTeam.getTime(),xia );
					workTeam.setEndTime( workTeam.getStartTime(xia)+workTeam.getRunTime(xia),xia );
					workTeam.setT( workTeam.getEndTime(xia)-workTeam.getHandTime(xia),xia );
					workTeam.setW( workTeam.getT(xia)/workTeam.getRunTime(xia),xia );
					workTeam.setTime( workTeam.getEndTime(xia) );
					FCFSnumT=FCFSnumT+workTeam.getEndTime(xia)-workTeam.getHandTime(xia);
					FCFSnumW=FCFSnumW+workTeam.getT(xia)/workTeam.getRunTime(xia);
					i++;
				}
				workTeam.setT( FCFSnumT );
				workTeam.setW( FCFSnumW );
	
			}
			if(event.getSource()==button3 )
			{
				workTeamSJF=new WorkTeam( workTeam );
				workTeamSJF.setTime( 0 );
				int i=0,xia=0;
				while( i<4 )
				{
					xia=workTeamSJF.findMinRunTime(workTeamSJF.getTime());
//JOptionPane.showMessageDialog(null,"i="+i+"\n"+"xia"+xia,"dhn",JOptionPane.INFORMATION_MESSAGE);
				 	workTeamSJF.setStartTime( workTeamSJF.getTime(),xia );
					workTeamSJF.setEndTime( workTeamSJF.getStartTime(xia)+workTeamSJF.getRunTime(xia),xia );
					workTeamSJF.setT( workTeamSJF.getEndTime(xia)-workTeamSJF.getHandTime(xia),xia );
					workTeamSJF.setW( workTeamSJF.getT(xia)/workTeamSJF.getRunTime(xia),xia );
					workTeamSJF.setTime( workTeamSJF.getEndTime(xia) );
					SJFnumT=SJFnumT+workTeamSJF.getEndTime(xia)-workTeamSJF.getHandTime(xia);
					SJFnumW=SJFnumW+workTeamSJF.getT(xia)/workTeamSJF.getRunTime(xia);
					i++;
				}
				workTeamSJF.setT( SJFnumT );
				workTeamSJF.setW( SJFnumW );

				
			}
			if( event.getSource()==button4 )
			{
				workTeamHRN=new WorkTeam( workTeam );
				workTeamHRN.setTime( 0 );
				int i=0,xia=0;
				while( i<4 )
				{
					countRp();//必须在重新设置timex之前执行;
					printHRN();
					xia=workTeamHRN.findMaxRp(workTeamHRN.getTime(),Rp);
//JOptionPane.showMessageDialog(null,"i="+i+"\n"+"xia"+xia,"dhn",JOptionPane.INFORMATION_MESSAGE);
				 	workTeamHRN.setStartTime( workTeamHRN.getTime(),xia );
					workTeamHRN.setEndTime( workTeamHRN.getStartTime(xia)+workTeamHRN.getRunTime(xia),xia );
					workTeamHRN.setT( workTeamHRN.getEndTime(xia)-workTeamHRN.getHandTime(xia),xia );
					workTeamHRN.setW( workTeamHRN.getT(xia)/workTeamHRN.getRunTime(xia),xia );
					
					workTeamHRN.setTime( workTeamHRN.getEndTime(xia) );
					HRNnumT=HRNnumT+workTeamHRN.getEndTime(xia)-workTeamHRN.getHandTime(xia);
					HRNnumW=HRNnumW+workTeamHRN.getT(xia)/workTeamHRN.getRunTime(xia);
					
					i++;
				}
				workTeamHRN.setT( HRNnumT );
				workTeamHRN.setW( HRNnumW );				
			}

		}//end method actionPerformed
	}//end class ActionListener

	private void countRp()
	{
		for( int i=0;i<4;i++ )
		{
			if( !workTeamHRN.getWork(i).isOver() )
			{
				Rp[i]=1+(workTeamHRN.getTime()-workTeamHRN.getHandTime(i))/workTeamHRN.getRunTime(i);
//JOptionPane.showMessageDialog(null,"作业"+i+"的Rp"+Rp[i],"dhn",JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	private void printFCFS()
	{
		Work dhnwork;
		FCFSstring="作业名\t"+"提交时间\t"+"要求运行时间\t"+"开始运行时间\t"+"完成时间\t"+"Ti\t"+"Wi\n";
		for( int i=0;i<4;i++ )
		{
		dhnwork=workTeam.getWork(i);
		FCFSstring=FCFSstring+dhnwork.getWorkName()+"\t"+dhnwork.getWorkHandTime()+"\t"+dhnwork.getWorkRunTime()+"\t"+dhnwork.getWorkStartTime()+"\t"+dhnwork.getWorkEndTime()+"\t"+dhnwork.getWorkT()+"\t"+dhnwork.getWorkW()+"\n";
		}
		FCFSstring=FCFSstring+"周转时间\t"+"平均周转时间\n"+FCFSnumT/4+"\t"+FCFSnumW/4;
		FCFSoutput.setText( FCFSstring );
JOptionPane.showMessageDialog(null,FCFSoutput,"dhn",JOptionPane.INFORMATION_MESSAGE);
	}

	private void printSJF()
	{
		Work dwork;
		SJFstring="作业名\t"+"提交时间\t"+"要求运行时间\t"+"开始运行时间\t"+"完成时间\t"+"Ti\t"+"Wi\n";
		for( int i=0;i<4;i++ )
		{
		dwork=workTeamSJF.getWork(i);
		SJFstring=SJFstring+dwork.getWorkName()+"\t"+dwork.getWorkHandTime()+"\t"+dwork.getWorkRunTime()+"\t"+dwork.getWorkStartTime()+"\t"+dwork.getWorkEndTime()+"\t"+dwork.getWorkT()+"\t"+dwork.getWorkW()+"\n";
		}
		SJFstring=SJFstring+"周转时间\t"+"平均周转时间\n"+SJFnumT/4+"\t"+SJFnumW/4;
		SJFoutput.setText( SJFstring );
JOptionPane.showMessageDialog(null,SJFoutput,"dhn",JOptionPane.INFORMATION_MESSAGE);
	}
	private void printHRN()
	{
		Work dhwork;
		HRNstring="作业名\t"+"提交时间\t"+"要求运行时间\t"+"Rp\t"+"开始运行时间\t"+"完成时间\t"+"Ti\t"+"Wi\n";
		for( int i=0;i<4;i++ )
		{
		dhwork=workTeamHRN.getWork(i);
		HRNstring=HRNstring+dhwork.getWorkName()+"\t"+dhwork.getWorkHandTime()+"\t"+dhwork.getWorkRunTime()+"\t"+Rp[i]+"\t"+dhwork.getWorkStartTime()+"\t"+dhwork.getWorkEndTime()+"\t"+dhwork.getWorkT()+"\t"+dhwork.getWorkW()+"\n";
		}
		HRNstring=HRNstring+"周转时间\t"+"平均周转时间\n"+HRNnumT/4+"\t"+HRNnumW/4;
		HRNoutput.setText( HRNstring );
JOptionPane.showMessageDialog(null,HRNoutput,"dhn",JOptionPane.INFORMATION_MESSAGE);
	}
}//end class WorkCall

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -