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

📄 unit1.pas

📁 此程序可以实现操作系统中的先来先服务调度
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, Gauges, ComCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Edit3: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Button3: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    N3: TMenuItem;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Gauge1: TGauge;
    N4: TMenuItem;
    procedure N1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton3Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
  a:array[1..10] of integer;
  sub:array[1..10] of integer;
  pro:array[1..10] of string;

  time:array[1..10] of integer;
  time_pie: integer;
implementation


{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);
begin
      application.Terminate ;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  k: integer;

begin


if edit1.Text ='' then
begin
  showmessage('进程名不能为空');
end
else
begin
  if edit2.Text ='' then
    showmessage('优先级不能为空')
  else
    begin
      if edit3.Text ='' then
        showmessage('运行时间不能为空')
      else
      begin
        if edit4.Text ='' then
          showmessage('时间片不能为空')
        else
        begin


if radiobutton1.Checked then
begin

  if i=1 then
  begin
    pro[i]:= Edit1.Text;
    time[i]:= strtoint(Edit3.Text);
    Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
    i:=i+1;
  end
  else
  begin

    for k:=1 to i do
    begin
      if pro[k]= Edit1.Text then
      begin
          Break;
      end;
    end;
    if k<=i then
    begin
        ShowMessage('该进程已经存在,请输入一个新的进程名!');
    end
    else
    begin
      pro[i]:= Edit1.Text;
      time[i]:= strtoint(Edit3.Text);
      Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
      i:=i+1;
    end;
   end ;
end;
if radiobutton2.Checked then
begin

  if i=1 then
  begin
    pro[i]:= Edit1.Text;
    a[i]:= strtoint(Edit2.Text);
    time[i]:= strtoint(Edit3.Text);
    Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
    i:=i+1;
  end
  else
  begin

    for k:=1 to i do
    begin
      if pro[k]= Edit1.Text then
      begin

          Break;
      end;
    end;
    if k<=i then
    begin
        ShowMessage('该进程已经存在,请输入一个新的进程名!');
    end
    else
    begin
      pro[i]:= Edit1.Text;
      a[i]:= strtoint(Edit2.Text);
      time[i]:= strtoint(Edit3.Text);
      Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
      i:=i+1;
    end;
   end ;
end;
if radiobutton3.Checked then
begin
  if i=1 then
  begin
    pro[i]:= Edit1.Text;
    time[i]:= strtoint(Edit3.Text);
    Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
    i:=i+1;
  end
  else
  begin

    for k:=1 to i do
    begin
      if pro[k]= Edit1.Text then
      begin

          Break;
      end;
    end;
    if k<=i then
    begin
        ShowMessage('该进程已经存在,请输入一个新的进程名!');
    end
    else
    begin
      pro[i]:= Edit1.Text;
      time[i]:= strtoint(Edit3.Text);
      Memo1.lines.Add(Edit1.Text+'-----'+Edit2.Text+'-----'+Edit3.Text);
      i:=i+1;
    end;
   end ;
end;
        end;

      end;
    end;
end;



end;                              //添加程序设计完毕

procedure TForm1.Button2Click(Sender: TObject);
var
    y : integer;
begin
    for y:=1 to 10 do
    begin
        pro[y]:='0';
    end;
    i:=1;

    memo1.Clear;
    memo2.Clear;
    //gauge1.Progress:=0;
    memo1.Lines.Add('进程名---优先级---执行时间');
    memo2.Lines.Add('进程名---优先级---执行时间');
end;                         //清除程序设计完毕

procedure TForm1.Button3Click(Sender: TObject);
var
  m: integer;
  min:integer;
  n:integer;
  x:integer;
  max_time:integer;

  time_num:integer;

  flag:array[1..10] of integer;
  k:integer;

begin


    for n:= 1 to 10 do
    begin
      flag[n]:=1;
    end;

    if radiobutton1.Checked then
    begin
    
      for n:=1 to i-1 do
      begin
        gauge1.Progress:=0;
        for k:=0 to 100 do
        begin
            gauge1.Progress := k;
            sleep(time[n]);
        end;
        Memo2.Lines.Add(Memo1.Lines[n]);
      end;

      for x:=1 to i-1 do
      begin
         pro[x]:='0';
         time[x]:=0;
      end;
      i:=1;
      gauge1.Progress:=0;

    end;
    if radiobutton2.Checked then
    begin

      begin
      for n:=1 to i-1 do
      begin
        min:=1;
        for m:=1 to i-1 do
          begin
            if a[m]<a[min] then min:=m;
          end;
        sub[n]:=min;
        a[min]:=65535;
      end;
      end;

    for n:=1 to i-1 do
    begin
      gauge1.Progress:=0;
      for k:=0 to 100 do
      begin
          Gauge1.Progress :=k;
          sleep(time[sub[n]]);
      end;
      Memo2.Lines.Add(Memo1.Lines[sub[n]]);
    end;

    for x:=1 to i-1 do
    begin
    pro[x]:='0';
    a[x]:=0;
    sub[x]:=0;
    time[x]:=0;
    end;
    i:=1;
    gauge1.Progress:=0;


    end;

    if radiobutton3.Checked then
    begin
      time_pie:=strtoint(Edit4.Text);

      max_time:=1;
      for n:=1 to i-1 do
      begin
         if time[max_time]<time[n] then
         begin
            max_time:=n;
         end;
      end;

      time_num:=(time[max_time] div time_pie);
      if (time[max_time] mod time_pie) <> 0 then
      begin
          time_num:=time_num+1;
      end;

      for n:=1 to time_num do
      begin
        gauge1.Progress:=0;
        for k:=0 to 100 do
        begin
            gauge1.Progress:=k;
            sleep(strtoint(edit4.Text));
        end;

        memo2.Lines.Add('第'+inttostr(n)+'个时间片后完成的进程');

        for x:=1 to i-1 do
        begin
        if flag[x]<>0 then
        begin
          if time[x]<=n*time_pie then
          begin
            Memo2.Lines.Add(memo1.Lines[x]);
            flag[x]:=0;
          end ;
        end;
        end;
        Memo2.Lines.Add('----------------');
        gauge1.Progress:=0;

      end;
      for x:=1 to i-1 do
      begin
      pro[x]:='0';
      time[x]:=0;
      flag[x]:=1;
      end;
      i:=1;

    end;


end;

procedure TForm1.RadioButton1Click(Sender: TObject);

var
    x:integer;
begin
    for x:=1 to 10 do
    begin
    pro[x]:='0';
    time[x]:=0;
    end;
    i:=1;
    Edit1.Enabled:=true;
    //Edit2.Enabled:=false;
    edit2.Visible :=false;
    form1.Label4.Visible :=false;
    Edit3.Enabled:=true;
    //Edit4.Enabled:=false;
    Edit1.Text:='1';
    Edit2.Text:='1';
    Edit3.Text:='50';
    Edit4.Text:='20';

    memo1.Clear;
    memo2.Clear;
    memo1.Lines.Add('进程名---优先级---执行时间');
    memo2.Lines.Add('进程名---优先级---执行时间');


end;

procedure TForm1.RadioButton2Click(Sender: TObject);
var
    x:integer;
begin
    for x:=1 to 10 do
    begin
    pro[x]:='0';
    time[x]:=0;
    end;
    i:=1;
    Edit1.Enabled:=true;
    edit2.Visible :=true;
    form1.Label4.Visible :=true;
    Edit2.Enabled:=true;
    Edit3.Enabled:=true;
    //Edit4.Enabled:=false;
    edit4.Visible :=false;
    form1.Label6.Visible :=false;
    Edit1.Text:='1';
    Edit2.Text:='1';
    Edit3.Text:='50';
    Edit4.Text:='20';

    memo1.Clear;
    memo2.Clear;
    memo1.Lines.Add('进程名---优先级---执行时间');
    memo2.Lines.Add('进程名---优先级---执行时间');
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
var
  x: integer;
begin
    for x:=1 to 10 do
    begin
    pro[x]:='0';
    time[x]:=0;
    end;
    i:=1;
    Edit1.Enabled:=true;
    //Edit2.Enabled:=false;
    edit2.Visible :=false;
    form1.Label4.Visible :=false;
    edit4.Visible :=true;
    form1.Label6.Visible :=true;
    Edit3.Enabled:=true;
    Edit4.Enabled:=true;
    Edit1.Text:='1';
    Edit2.Text:='1';
    Edit3.Text:='50';
    Edit4.Text:='20';

    memo1.Clear;
    memo2.Clear;
    memo1.Lines.Add('进程名---优先级---执行时间');
    memo2.Lines.Add('进程名---优先级---执行时间');
end;

procedure TForm1.N3Click(Sender: TObject);
begin
ShowMessage('程序授权使用!');
end;

procedure TForm1.N2Click(Sender: TObject);
begin
ShowMessage('先选择算法,然后输入进程信息/在一次时间片调度过程中,保证时间片不变');
end;

procedure TForm1.N4Click(Sender: TObject);
begin
showmessage('2005级信息工程1班 ');
end;

end.


⌨️ 快捷键说明

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