📄 workcall.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 + -