Java图形化界面 磁盘比调度算法——扫描算法

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
public class scan {
public scan(){
JFrame a=new JFrame("扫描算法");
a.setLayout(null);
JLabel l1=new JLabel("请输入扫描算法所需参数");
JLabel l2=new JLabel("跨越一个磁道所用时间(ms):");
JLabel l3=new JLabel("启动时间(ms):");
JLabel l4=new JLabel("磁盘转速r(r/m):");
JLabel l5=new JLabel("每磁道扇区(块)数:");
JLabel l6=new JLabel("每扇区(块)字节数:");
JTextField f1=new JTextField(20);//跨越一个磁道所用时间
JTextField f2=new JTextField(20);//启动时间
JTextField f3=new JTextField(20);//磁盘转速r(r/m)
JTextField f4=new JTextField(20);//每磁道扇区(块)数
JTextField f5=new JTextField(20);//每扇区(块)字节数
JButton b1=new JButton("执行");
a.add(l1);
a.add(l2);
a.add(l3);
a.add(l4);
a.add(l5);
a.add(l6);
a.add(f1);
a.add(f2);
a.add(f3);
a.add(f4);
a.add(f5);
a.add(b1);
l1.setBounds(400,100,200,100);
l2.setBounds(200, 300, 200, 100);
f1.setBounds(360,341,70,20);
l3.setBounds(600,300,200,100);
f2.setBounds(760,341,70,20);
l4.setBounds(200, 350, 200, 100);
f3.setBounds(360, 390, 70, 20);
l5.setBounds(600,350,200,100);
f4.setBounds(760,390,70,20);
l6.setBounds(200,420,200,100);
f5.setBounds(360,460,70,20);
b1.setBounds(600,460,70,30);
b1.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent arg0) {
		Random random=new Random();
		int i=random.nextInt(2);//生成访问顺序,0代表向外,1代表向里
		int o=random.nextInt(200);//生成当前所在磁道
		float dotime;      //处理时间
		float transittime; //传输时间  
		float rocatetime;  //旋转时间
		int moveamount;  //引臂移动量
		int findtime;    //寻道时间
		int g=0;
		int b[]=new int[199];
		int c[]=new int[199];//存储引臂移动序列
		int h[]=new int[199];//存储请求序列				
		for(int aa=0;aa<b.length;aa++) {
			int bb=(random.nextInt(21)/5);			
			if(bb!=0) {
				g++;             //g存储有请求的磁道数	
				h[aa]=aa;
			}
			b[aa]=bb;
		}//生成随机访问序列
		
		rocatetime=(60000/(Float.parseFloat(f3.getText())))/2;
		transittime=(60000/(Float.parseFloat(f3.getText())))/(Float.parseFloat(f4.getText()));  
		moveamount=(199-o)*2+o;
		findtime=moveamount*(Integer.parseInt(f1.getText()))+Integer.parseInt(f2.getText());
		dotime=findtime+transittime+rocatetime;
		//目前b正常
		if(i==0) {						
			int d=0;
			for(int aa=o;aa<199;aa++) {				
				if(b[aa]>0) {					
					c[d]=aa;					
					d++;
					b[aa]=0;  //处理
					}
			}
			for(int aa=o;aa>0;aa--) {				
				if(b[aa]>0) {
					b[aa]=0;//处理					
					c[d]=aa;					
					d++;
				}
			}
		}
	   if(i==1) {		  
		   int d=0;
		   for(int aa=o;aa>0;aa--) {			   
				if(b[aa]>0) {
					b[aa]=0;//处理
					c[d]=aa;
					d++;
				}
			}
		   for(int aa=o;aa<199;aa++) {			   
				if(b[aa]>0) {
					b[aa]=0;  //处理
					c[d]=aa;
					d++;
				}
			}
	   }
	JFrame f1=new JFrame("计算结果");
	f1.setVisible(true);
	JLabel l7=new JLabel("引臂移动量:");
	JLabel l8=new JLabel("旋转时间:");
	JLabel l9=new JLabel("寻道时间:");
	JLabel l10=new JLabel("传输时间:");
	JLabel l11=new JLabel("处理时间:");
	JLabel l12=new JLabel("移动序列如下:");
	JLabel l13=new JLabel("请求序列如下:");
	JTextField f6=new JTextField(10);
	f6.setText(String.valueOf(moveamount));
	f6.setEditable(false);
	JTextField f7=new JTextField(10);
	f7.setText(String.valueOf(rocatetime));
	f7.setEditable(false);
	JTextField f8=new JTextField(10);
	f8.setText(String.valueOf(findtime));
	f8.setEditable(false);
	JTextField f9=new JTextField(10);
	f9.setText(String.valueOf(transittime));
	f9.setEditable(false);
	JTextField f10=new JTextField(10);
	f10.setText(String.valueOf(dotime));
	f10.setEditable(false);
	JTextArea a1=new JTextArea();
	a1.setLineWrap(true);                           //设置自动换行
    int bbb=1;
	for(int aa=0;aa<c.length;aa++) {
		if(c[aa]!=0&&bbb!=g) {
			bbb++;
		a1.append(String.valueOf(c[aa])+"->");}
		else if(c[aa]!=0&&bbb==g) {
			a1.append(String.valueOf(c[aa]));
		}
	}
	JTextArea a2=new JTextArea();
	a2.setLineWrap(true);
	int aaa=1;
	for(int aa=0;aa<h.length;aa++) {		
		if(aaa!=g&&h[aa]!=0) {
			aaa++;
		a2.append(String.valueOf(h[aa])+"->");}
		else if(h[aa]!=0&&(aaa==g)){
		
			a2.append(String.valueOf(h[aa]));
		}
	}
	f1.setLayout(null);
	f1.add(l7);
	f1.add(f6);
	f1.add(l8);
	f1.add(f7);
	f1.add(l9);
	f1.add(f8);
	f1.add(l10);
	f1.add(f9);
	f1.add(l11);
	f1.add(f10);
	f1.add(a1);
	f1.add(l12);
	f1.add(l13);
	f1.add(a2);
	l7.setBounds(200, 300, 200, 100);
	f6.setBounds(360,341,70,20);
	l8.setBounds(600,300,200,100);
	f7.setBounds(760,341,70,20);
	l9.setBounds(200, 350, 200, 100);
	f8.setBounds(360, 390, 70, 20);
	l10.setBounds(600,350,200,100);
	f9.setBounds(760,390,70,20);
	l11.setBounds(200,420,200,100);
	f10.setBounds(360,460,70,20);
	l12.setBounds(750,500,100,50);
	a1.setBounds(850,500,500,200);	
	l13.setBounds(50, 450, 200, 100);
	a2.setBounds(200, 500,500, 200);
	f1.setSize(2000, 2000);
	}
});
a.setSize(1000, 1000);
a.setVisible(true);
}
public static void main(String args[]) {
	scan b=new scan();
}
}
发布了58 篇原创文章 · 获赞 22 · 访问量 9873

猜你喜欢

转载自blog.csdn.net/zsd0819qwq/article/details/102724145