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

📄 unit1.~pas

📁 银行家算法 界面很有友好 很详细的 希望大家去看看
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ImgList, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    M11: TEdit;
    M12: TEdit;
    M13: TEdit;
    Y11: TEdit;
    Y12: TEdit;
    Y13: TEdit;
    N11: TEdit;
    N12: TEdit;
    N13: TEdit;
    M21: TEdit;
    M22: TEdit;
    M23: TEdit;
    Y21: TEdit;
    Y22: TEdit;
    Y23: TEdit;
    N21: TEdit;
    N22: TEdit;
    N23: TEdit;
    M31: TEdit;
    M32: TEdit;
    M33: TEdit;
    Y31: TEdit;
    Y32: TEdit;
    Y33: TEdit;
    N31: TEdit;
    N32: TEdit;
    N33: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    M41: TEdit;
    M42: TEdit;
    M43: TEdit;
    M51: TEdit;
    M52: TEdit;
    M53: TEdit;
    Y41: TEdit;
    Y42: TEdit;
    Y43: TEdit;
    Y51: TEdit;
    Y52: TEdit;
    Y53: TEdit;
    N41: TEdit;
    N42: TEdit;
    N43: TEdit;
    N51: TEdit;
    N52: TEdit;
    N53: TEdit;
    K11: TEdit;
    K12: TEdit;
    K13: TEdit;
    Edit10: TEdit;
    F1: TEdit;
    F2: TEdit;
    F3: TEdit;
    F4: TEdit;
    F5: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    GroupBox2: TGroupBox;
    Memo1: TMemo;
    BitBtn6: TBitBtn;
    Edit11: TEdit;
    TabSheet2: TTabSheet;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    GroupBox3: TGroupBox;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    S1: TEdit;
    R1: TEdit;
    D1: TEdit;
    W1: TEdit;
    Label25: TLabel;
    s2: TEdit;
    R2: TEdit;
    D2: TEdit;
    W2: TEdit;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    s3: TEdit;
    S4: TEdit;
    S5: TEdit;
    S6: TEdit;
    S7: TEdit;
    S8: TEdit;
    S9: TEdit;
    S10: TEdit;
    Label33: TLabel;
    R3: TEdit;
    R4: TEdit;
    R5: TEdit;
    R6: TEdit;
    R7: TEdit;
    R8: TEdit;
    R9: TEdit;
    R10: TEdit;
    D3: TEdit;
    D4: TEdit;
    D5: TEdit;
    D6: TEdit;
    D7: TEdit;
    D8: TEdit;
    D9: TEdit;
    D10: TEdit;
    W3: TEdit;
    W4: TEdit;
    W5: TEdit;
    W6: TEdit;
    W7: TEdit;
    W8: TEdit;
    W9: TEdit;
    W10: TEdit;
    GroupBox4: TGroupBox;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn12: TBitBtn;
    Label34: TLabel;
    FT1: TEdit;
    FT2: TEdit;
    FT3: TEdit;
    FT4: TEdit;
    FT5: TEdit;
    FT6: TEdit;
    FT7: TEdit;
    FT8: TEdit;
    FT9: TEdit;
    FT10: TEdit;
    info: TEdit;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    ListView1: TListView;
    ListView2: TListView;
    TabSheet3: TTabSheet;
    GroupBox7: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    P1: TEdit;
    P2: TEdit;
    P3: TEdit;
    P4: TEdit;
    P5: TEdit;
    P6: TEdit;
    P7: TEdit;
    P8: TEdit;
    P9: TEdit;
    P10: TEdit;
    P11: TEdit;
    P12: TEdit;
    PP: TEdit;
    UP: TBitBtn;
    GroupBox8: TGroupBox;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    ListView3: TListView;
    Label35: TLabel;
    Memery: TEdit;
    Label36: TLabel;
    E: TBitBtn;
    Label37: TLabel;
    Label38: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure asdClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure nextClick(Sender: TObject);
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn12Click(Sender: TObject);
    procedure UPClick(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton3Click(Sender: TObject);
    procedure RadioButton4Click(Sender: TObject);
    procedure EClick(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    //银行家算法
    procedure ChangeMColor(clr:TColor);
    procedure ChangeYColor(clr:TColor);
    procedure ChangeNColor(clr:TColor);
    procedure ChangeEnableM(en:boolean);
    procedure ChangeEnableY(en:boolean);
    procedure test;
    Procedure InitialData;
    Procedure IntToText1;
    Procedure TextToInt1;
    //可变分区
    Procedure InitialData2;
    procedure IntToText;
    procedure TextToInt;
    procedure printf;
    procedure AddToTable;
    function HandUpWork(NowWork:integer):boolean;
    procedure DeleteWork(WorkNum:integer);
    procedure OrderTable;
    //LRU,FIFO
    procedure InitialData3;
    procedure Fifo_Lru;
    procedure printf3;
    function TextToInt3:boolean;
  end;

var
  Form1: TForm1;
  process:integer=5;         //*实际进程数*/
  factsource:integer=3;      //*实际资源种类*/
  available:array[0..2] of integer=(3,3,2); //*资源向量*/
  max:array[0..4] of array[0..2] of integer=((7,5,3),
                             (3,2,2),
                             (9,0,2),
                             (2,2,2),
                             (4,3,3)); //*进程所需的最大资数数*/
  allocation:array[0..4] of array[0..2]of integer=((0,1,0),
                                    (2,0,0),
                                    (3,0,2),
                                    (2,1,1),
                                    (0,0,2)); //*已分配的资源*/
  need:array[0..4]of array[0..2] of integer=((7,4,3),
                              (1,2,2),
                              (6,0,0),
                              (0,1,1),
                              (4,3,1));  //*还需的资源数*/
  finish:array[0..4,0..2] of boolean;
  success:boolean;               //*success=1表示所有进程都可完成*/

  //以下是中间变量
  where: array[0..4]of integer;  //*where为进程完成顺序*/
  m:integer;                     //*已完成的进程数*/
  PriorM:integer;
  MiddleNeed:array[0..4]of array[0..2] of integer; //*还需的资源数*/
  MiddleAvailable:array[0..4,0..2] of integer; //*资源向量*/


  //可变分区
  //作业队列
  group:array[0..9] of record
    size:integer;
    ReachTime:integer;
    DoTime:integer;
    FinishTime:integer;
    Position:integer;//被分配的内存起始地址
    Finish:string;
  end;
  //已分配表
  Table,Tableed:array[0..50] of record
    Number:integer;
    Size:integer;
    Position:integer;
    WorkNum:integer;//作业号
    finish:string;
  end;
  Num:integer;//未分配表的记录数
  Numed:integer;//已分配表的记录数
  NowHandUpWork:integer;//当前提交的作业号
  ExitData:boolean;//标明程序是否终止
  //FIFO,LRU
  ml:array[0..30,0..100] of integer;
  Mnum:Integer;
  Pnum:INteger;
  Parray:array[0..100] of Integer;
implementation

{$R *.dfm}

procedure TForm1.ChangeMColor(clr: TColor);
begin
  M11.Color:=clr; M12.Color:=clr; M13.Color:=clr;
  M21.Color:=clr; M22.Color:=clr; M23.Color:=clr;
  M31.Color:=clr; M32.Color:=clr; M33.Color:=clr;
  M41.Color:=clr; M42.Color:=clr; M43.Color:=clr;
  M51.Color:=clr; M52.Color:=clr; M53.Color:=clr;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitialData;
  ChangeMColor(cl3DLight);
  ChangeYColor(cl3DLight);
  ChangeNColor(cl3DLight);
  ChangeEnableM(false);
  ChangeEnableY(false);
  K11.Enabled:=false;   K12.Enabled:=false;  K13.Enabled:=false;
  Form1.Left:=130;  Form1.Top:=100;
  form1.test;//银行家算法
  Memo1.Text:='欢迎使用多项资源银行家算法的模拟软件!';

  //可变分区
  InitialData2;
  IntToText;

  //FIFO,LRU
  InitialData3;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  //初始化界面
  BitBtn1.Caption:='开始';
  BitBtn1.Enabled:=false;
  BitBtn5.Enabled:=false;

  F1.Text:='×'; F2.Text:='×'; F3.Text:='×';
  F4.Text:='×'; F5.Text:='×';
  K11.Enabled:=true;   K12.Enabled:=true;  K13.Enabled:=true;
  K11.Color:=clWindow;  K12.Color:=clWindow;  K13.Color:=clWindow;
  BitBtn3.Enabled:=true;
  ChangeEnableM(true);
  ChangeEnableY(true);
  ChangeMColor(clWindow);
  ChangeYColor(clWindow);

  //对全局变量初始化
  K11.Text:='3';
  K12.Text:='3';
  K13.Text:='2';
end;

procedure TForm1.asdClick(Sender: TObject);
begin
     BitBtn3.Enabled:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.ChangeNColor(clr: TColor);
begin
  N11.Color:=clr; N12.Color:=clr; N13.Color:=clr;
  N21.Color:=clr; N22.Color:=clr; N23.Color:=clr;
  N31.Color:=clr; N32.Color:=clr; N33.Color:=clr;
  N41.Color:=clr; N42.Color:=clr; N43.Color:=clr;
  N51.Color:=clr; N52.Color:=clr; N53.Color:=clr;
end;

procedure TForm1.ChangeYColor(clr: TColor);
begin
  Y11.Color:=clr; Y12.Color:=clr; Y13.Color:=clr;
  Y21.Color:=clr; Y22.Color:=clr; Y23.Color:=clr;
  Y31.Color:=clr; Y32.Color:=clr; Y33.Color:=clr;
  Y41.Color:=clr; Y42.Color:=clr; Y43.Color:=clr;
  Y51.Color:=clr; Y52.Color:=clr; Y53.Color:=clr;
end;

procedure TForm1.ChangeEnableM(en: boolean);
begin
  M11.Enabled:=en;  M12.Enabled:=en;  M13.Enabled:=en;
  M21.Enabled:=en;  M22.Enabled:=en;  M23.Enabled:=en;
  M31.Enabled:=en;  M32.Enabled:=en;  M33.Enabled:=en;
  M41.Enabled:=en;  M42.Enabled:=en;  M43.Enabled:=en;
  M51.Enabled:=en;  M52.Enabled:=en;  M53.Enabled:=en;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  //界面状态更新
  BitBtn1.Enabled:=true;
  BitBtn5.Enabled:=true;

  ChangeEnableM(false);
  ChangeEnableY(false);
  ChangeMColor(cl3DLight);
  ChangeYColor(cl3DLight);
  K11.Color:=cl3DLight;  K12.Color:=cl3DLight;  K13.Color:=cl3DLight;
  K11.Enabled:=false;   K12.Enabled:=false;  K13.Enabled:=false;
  BitBtn3.Enabled:=false;

  //输入已变化的参数
  TextToInt1;
  IntToText1;

  form1.test;//银行家算法
end;

procedure TForm1.ChangeEnableY(en: boolean);
begin
  Y11.Enabled:=en;  Y12.Enabled:=en;  Y13.Enabled:=en;
  Y21.Enabled:=en;  Y22.Enabled:=en;  Y23.Enabled:=en;
  Y31.Enabled:=en;  Y32.Enabled:=en;  Y33.Enabled:=en;
  Y41.Enabled:=en;  Y42.Enabled:=en;  Y43.Enabled:=en;
  Y51.Enabled:=en;  Y52.Enabled:=en;  Y53.Enabled:=en;
end;

procedure TForm1.test;
var
 i,j,k:integer;                 //*循环控制变量*/
 ok: array[0..4]of boolean;     //*用于标示第j个进程是否完成*/
 HaveProcessFinish:boolean;
 str:string;
begin
  //初始化数据
  str:='';
  success:=true;
  m:=0;
  HaveProcessFinish:=false;  //退出while的控制变量

  for i:=0 to 4 do
    ok[i]:=false;

  for i:=0 to process-1 do  //*初始化:所有进程均未完成 */
    ok[i]:=false;

  for i:=0 to process-1 do
    for j:=0 to factsource-1 do
      finish[i][j]:=false;   //*初始化:第i个进程的第j个资源还未完全分配*/

  i:=1;
  while(true) do
  begin
     HaveProcessFinish:=false;
     for j:=0 to process-1 do     //*判断第j个进程是否能完成*/         /*原来:j<process&&ok[j]==0有错*/
     begin
        if(ok[j]=true)then continue;

        for k:=0 to factsource-1 do
            if(available[k]>=need[j][k]) then finish[j][k]:=true;

        if(finish[j][0]=true) and (finish[j][1]=true) and (finish[j][2]=true) then
        begin
            ok[j]:=true;     //*第j个进程可完成*/
            where[m]:=j;
            str:=str+'P'+intToStr(j+1)+',';
            HaveProcessFinish:=true;
            m:=m+1;

⌨️ 快捷键说明

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