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

📄 umainfrm.pas

📁 双色球矩阵计算程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit uMainFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBClient, ExtCtrls, RzPanel, RzCommon, Menus, RzStatus, RzTabs, ImgList,
  StdCtrls, RzLabel, Grids, DBGridEh, RzButton, RzCmboBx, Mask, RzEdit,
  PrnDbgeh;

type
  TMainFrm = class(TForm)
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    X1: TMenuItem;
    RzPanel1: TRzPanel;
    RzPageControl1: TRzPageControl;
    TabSheet1: TRzTabSheet;
    TabSheet2: TRzTabSheet;
    ImageList1: TImageList;
    GroupBox1: TGroupBox;
    RzLabel1: TRzLabel;
    RzLabel2: TRzLabel;
    btnCalc: TRzBitBtn;
    btnClear: TRzBitBtn;
    DBGridEh1: TDBGridEh;
    GroupBox2: TGroupBox;
    btnIn: TRzButton;
    btnOut: TRzButton;
    btnPrint: TRzButton;
    btnRemove: TRzButton;
    RzLabel3: TRzLabel;
    RzLabel4: TRzLabel;
    cmbBegin: TRzComboBox;
    RzLabel5: TRzLabel;
    cmbEnd: TRzComboBox;
    btnResult: TRzButton;
    DBGridEh2: TDBGridEh;
    GroupBox3: TGroupBox;
    cmbCount: TRzComboBox;
    RzLabel6: TRzLabel;
    RzLabel7: TRzLabel;
    DBGridEh3: TDBGridEh;
    RzLabel8: TRzLabel;
    btnVerify: TRzButton;
    RzLabel9: TRzLabel;
    DBGridEh4: TDBGridEh;
    labResult: TRzLabel;
    DBGridEh5: TDBGridEh;
    GroupBox4: TGroupBox;
    RzLabel10: TRzLabel;
    eNo: TRzEdit;
    eRed1: TRzEdit;
    eRed2: TRzEdit;
    eRed3: TRzEdit;
    eRed4: TRzEdit;
    eRed5: TRzEdit;
    eRed6: TRzEdit;
    RzLabel11: TRzLabel;
    RzLabel12: TRzLabel;
    btnAdd: TRzButton;
    od1: TOpenDialog;
    sd1: TSaveDialog;
    PrintDBGridEh1: TPrintDBGridEh;
    procedure RedClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnCalcClick(Sender: TObject);
    procedure btnRemoveClick(Sender: TObject);
    procedure cmbBeginChange(Sender: TObject);
    procedure btnResultClick(Sender: TObject);
    procedure cmbCountChange(Sender: TObject);
    procedure btnVerifyClick(Sender: TObject);
    procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure DBGridEh5GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure btnAddClick(Sender: TObject);
    procedure btnInClick(Sender: TObject);
    procedure btnOutClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
  private
    RedBalls: array [1..33] of TRzPanel;
    iCount: Integer;
    iMin, iMax: Integer;
    iBegin, iEnd: Integer;
    procedure UpdateUI;
    procedure GetMinMax;
    procedure GetBeginEnd;
    procedure FillBeginEnd;
    procedure GetMatrix(ACount: Integer);
    procedure InitcdsResult;
    procedure InitcdsVerify;
  public
    { Public declarations }
  end;

var
  MainFrm: TMainFrm;

implementation

uses uDm, CHListDataSet, CHMessageUtils, CHCheckUtils, DateUtils, PrViewEh;

{$R *.dfm}

procedure TMainFrm.UpdateUI;
var
  i: Integer;
begin
  iCount := 0;
  for i:= 1 to 33 do begin
    if RedBalls[i].Tag <> 0 then Inc(iCount);
    if RedBalls[i].Tag = 0 then RedBalls[i].Color := clWhite
    else RedBalls[i].Color := clFuchsia;
  end;

  RzLabel2.Caption := format('已选择 %d 个红球', [iCount]);

  if (iCount >= iMin) and (iCount <= iMax) then
    btnCalc.Enabled := true
  else
    btnCalc.Enabled := false;
end;

procedure TMainFrm.RedClick(Sender: TObject);
begin
  with Sender as TRzPanel do
    if Tag = 0 then Tag := 1 else Tag := 0;
  UpdateUI;
end;

procedure TMainFrm.btnClearClick(Sender: TObject);
var
  i: Integer;
begin
  for i:=1 to 33 do RedBalls[i].Tag := 0;
  UpdateUI;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  InitcdsResult;
  InitcdsVerify;
  
  GetMinMax;
  GetBeginEnd;
  RzLabel1.Caption := format('请选择 %d-%d 个红球', [iMin, iMax]);
  FillBeginEnd;
  for i:= iMin to iMax do cmbCount.Add(IntToStr(i));
  if cmbCount.Items.Count > 0 then cmbCount.ItemIndex := 0 else cmbCount.ItemIndex := -1;
  cmbCountChange(Sender);

  for i:=1 to 33 do begin
    RedBalls[i] := TRzPanel.Create(GroupBox1);
    RedBalls[i].Parent := GroupBox1;
    RedBalls[i].Caption := format('%d', [i]);
    RedBalls[i].Height := 20;
    RedBalls[i].Width := 20;
    RedBalls[i].BorderOuter := fsFlat;
    RedBalls[i].Color := clWhite;
    RedBalls[i].Top := (i div 21) * (RedBalls[i].Height-1) + 36;
    if i > 20 then
      RedBalls[i].Left := (i - 20) * (RedBalls[i].Width-1) - 3
    else
      RedBalls[i].Left := i * (RedBalls[i].Width-1) - 3;

    RedBalls[i].OnClick := RedClick;
  end;
  btnRemoveClick(Sender);
  btnClearClick(Sender);
  TabSheet1.Caption := '矩'#13#10'阵'#13#10'计'#13#10'算';
  TabSheet2.Caption := '历'#13#10'史'#13#10'数'#13#10'据';
  RzPageControl1.ActivePageIndex := 0;
end;


procedure TMainFrm.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i:=1 to 33 do RedBalls[i].Free;
end;

procedure TMainFrm.btnCalcClick(Sender: TObject);
var
  i, j: Integer;
  v: Variant;
  lds: TCHListDataSet;
begin
  dm.query.Close;
  dm.query.SQL.Text := format('select * from 旋转矩阵 where 球数=%d order by ID', [iCount]);
  dm.query.Open;

  v := VarArrayCreate([1, iCount], varInteger);
  j := 1;
  for i:=1 to 33 do
    if RedBalls[i].Tag <> 0 then begin
      v[j] := StrToInt(RedBalls[i].Caption);
      Inc(j);
    end;

  i := 0;
  lds := TCHListDataSet.Create;
  try
  lds.AddField('序号', 6);
  lds.AddField('号1', 6);
  lds.AddField('号2', 6);
  lds.AddField('号3', 6);
  lds.AddField('号4', 6);
  lds.AddField('号5', 6);
  lds.AddField('号6', 6);
  while not dm.query.Eof do begin
    Inc(i);
    lds.AddItem(IntToStr(i));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号1').AsInteger]));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号2').AsInteger]));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号3').AsInteger]));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号4').AsInteger]));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号5').AsInteger]));
    lds.AddSubItem(IntToStr(v[dm.query.FieldByName('号6').AsInteger]));
    dm.query.Next;
  end;
  dm.cdsTemp.LoadFromStream(lds.GetStream);
  finally
    lds.Free;
  end;
end;

procedure TMainFrm.GetMinMax;
begin
  iMin := 0;
  iMax := 0;

  dm.query.Close;
  dm.query.SQL.Text := 'select min(球数), max(球数) from 旋转矩阵';
  dm.query.Open;

  if not dm.query.Eof then begin
    iMin := dm.query.Fields[0].AsInteger;
    iMax := dm.query.Fields[1].AsInteger;
  end;
end;

procedure TMainFrm.btnRemoveClick(Sender: TObject);
var
  lds: TCHListDataSet;
begin
  lds := TCHListDataSet.Create;
  try
    lds.AddField('序号', 6);
    lds.AddField('号1', 6);
    lds.AddField('号2', 6);
    lds.AddField('号3', 6);
    lds.AddField('号4', 6);
    lds.AddField('号5', 6);
    lds.AddField('号6', 6);
    dm.cdsTemp.LoadFromStream(lds.GetStream);
  finally
    lds.Free;
  end;
end;

procedure TMainFrm.GetBeginEnd;
begin
  iBegin := 0;
  iEnd := 0;

  dm.query.Close;
  dm.query.SQL.Text := 'select min(期数), max(期数) from 历史数据';
  dm.query.Open;

  if not dm.query.Eof then begin
    iBegin := dm.query.Fields[0].AsInteger;
    iEnd := dm.query.Fields[1].AsInteger;
  end;
end;

procedure TMainFrm.FillBeginEnd;
begin
  dm.query.Close;
  dm.query.SQL.Text := 'select 期数 from 历史数据 order by 期数';
  dm.query.Open;

  while not dm.query.Eof do begin
    cmbBegin.Items.Add(dm.query.Fields[0].AsString);
    cmbEnd.Items.Add(dm.query.Fields[0].AsString);
    dm.query.Next;
  end;
  if cmbBegin.Items.Count > 0 then
    cmbBegin.ItemIndex := 0
  else
    cmbBegin.ItemIndex := -1;
  cmbEnd.ItemIndex := cmbBegin.ItemIndex;
end;

procedure TMainFrm.cmbBeginChange(Sender: TObject);
begin
  cmbEnd.ItemIndex := cmbBegin.ItemIndex;
end;

procedure TMainFrm.btnResultClick(Sender: TObject);
var
  z6, z5, z4: Integer;
  lds: TCHListDataSet;
  procedure CompareResult(i1, i2, i3, i4, i5, i6: Integer);
  var i, r: Integer;
  begin
    z6 := 0;
    z5 := 0;
    z4 := 0;
    if dm.cdsTemp.RecordCount > 0 then dm.cdsTemp.First;
    while not dm.cdsTemp.Eof do begin
      r := 0;
      for i:=1 to 6 do begin
        if i1 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
        if i2 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
        if i3 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
        if i4 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
        if i5 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
        if i6 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
      end;
      if r = 4 then Inc(z4);
      if r = 5 then Inc(z5);
      if r = 6 then Inc(z6);
      dm.cdsTemp.Next;
    end;
  end;

begin
  if cmbEnd.ItemIndex < cmbBegin.ItemIndex then begin
    ErrorMsg('起始期数不能大于截至期数');
    Exit;
  end;

⌨️ 快捷键说明

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