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();
}
}
Java图形化界面 磁盘比调度算法——扫描算法
猜你喜欢
转载自blog.csdn.net/zsd0819qwq/article/details/102724145
今日推荐
周排行