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

📄 yaojiangunit.~pas

📁 过年过节公司或单位都会举行抽奖的活动。 我这个程序就是用来电脑自动随机抽奖的。
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
    begin
      Showmessage('该奖项没有待抽奖的人员啦,请重新导入人员资料!');
      Exit;
    end;
  end;
  with JiangQry do   //取得六等奖的奖品
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('select * from jiang where J_type=6 and J_Sum>J_Kai_Num ');
    Active:=True;
    if RecordCount<1 then
    begin
      showmessage('对不起,游戏奖已经抽完了,不能再抽!');
      Button19.Enabled :=True;
      Button20.Enabled :=False;
      Button21.Enabled :=True;
      Exit;
    end;
  end;
  with J_FlagQry do
  begin
    J_FlagQry.Active :=False;
    J_FlagQry.SQL.Clear;
    J_FlagQry.SQL.Add('select * from Jiang where J_type=6 ');
    J_FlagQry.Active :=True;
    First;
    while not eof do
    begin
      if J_FlagQry.FieldByName('J_Kai_Num').AsInteger <>J_FlagQry.FieldByName('J_sum').AsInteger then
      begin
        J_Flag:=1;
      end;
      Next;
    end;
    if J_Flag<>1 then
    Begin
      showmessage('对不起,游戏奖已经抽完了,不能再抽!');
      Button19.Enabled :=True;
      Button20.Enabled :=False;
      Button21.Enabled :=True;      
      Exit;
    end;
    Active:=False;
  end;
  I6:=1;
  while I6<>0 do
  begin
    Edit30.Text := TeQry.fieldbyname('Name_id').asString;
    Edit31.Text := TeQry.FieldByname('Name_code').AsString;
    Edit30.Refresh;
    edit31.Refresh;
    Application.ProcessMessages;
    if I6=0 then
      Break;
      I6:=I6+1;
      TeQry.Next;//取得未抽中奖的人员
      if TeQry.Eof then
        TeQry.First;
  end;
end;

procedure TForm1.Button20Click(Sender: TObject);
Var
  J_Rkey:integer;
  Y_Rkey:integer;
  SQLStr:String;
  I:integer;
  KaiNum,NoKaiNum:integer;
begin
  I6:=0;
  Button19.Enabled :=True;
  Button20.Enabled :=False;
  Button21.Enabled :=True;
  Button36.Enabled :=True;
  with J_FlagQry do
  begin             //如果中奖了则奖中奖数字段值加1
    Active:=False;
    Sql.Clear;
    Sql.Add('update Jiang set J_Kai_num=J_Kai_num+1 ');
    SQl.Add(' where J_Type=6 and Rkey=:Rkey' );
    sql.Add(' select * from Jiang where J_type=6');
    Parameters.ParamByName('Rkey').Value :=JiangQry.fieldbyname('Rkey').AsInteger ;
    Active:=true;
    Active:=False;
  end;
  J_Rkey:=JiangQry.fieldbyname('rkey').AsInteger ;
  Y_Rkey:=TeQry.fieldbyname('rkey').asInteger;
  with J_FlagQry do
  begin            //将中奖的奖品赋值给中奖之人,并标记该人已中过奖了
    Active:=False;
    sql.Clear;
    sql.Add('update yuan set Yuan.J_code=Jiang.J_code,Yuan.J_name=Jiang.J_name,Yuan.J_type=Jiang.J_type,Yuan.J_Flag=1 from yuan ,Jiang ' );
    sql.Add('where Jiang.Rkey=:J_key and Yuan.Rkey=:Y_key ');
    J_FlagQry.Parameters.ParamByName('J_key').Value :=J_Rkey;
    J_FlagQry.Parameters.ParamByName('Y_key').Value :=Y_Rkey;
    Sql.Add(' select * from Yuan ');
    Active:=true;
    Active:=False;
  end;
  with JiangNumQry do
  begin             //取得当前中奖的情况
    Active:=False;
    SQl.Clear;
    Sql.Add('select J_Kai_Num,(J_Sum-J_Kai_Num) Wei from Jiang where J_type=6');
    Active:=True;
    First;
    KaiNum:=0;
    NoKaiNum:=0;
    while not eof do
    begin
      KaiNum:=KaiNum+fieldbyName('J_Kai_Num').AsInteger;
      NoKaiNum:=NoKaiNum+fieldbyName('Wei').AsInteger;
      Next;
    end;
    Edit39.Text :=IntToStr(KaiNum)+'名';
    Edit41.Text :=IntToStr(NoKaiNum)+'名';
    JiangNumQry.Active :=False;
  end;
end;

procedure TForm1.Button22Click(Sender: TObject);
Var
  J_type:integer;
begin
  J_Type:=RadioGroup1.ItemIndex;
  if J_type<>7 then
  begin
    with  J_FlagQry do
    begin
      Active:=False;
      Sql.Clear;
      SQL.Add('select Yuan.Name_id,Yuan.Name_code,Yuan.J_name from Yuan ');
      SQL.add(' where Yuan.J_Flag=1 and Yuan.J_Type='+''''+IntToStr(J_Type)+''''+' order by J_name' );
      Active:=True;
      if RecordCount>0 then
      begin
        Fieldbyname('Name_id').DisplayLabel:='工号';
        FieldByName('Name_code').DisplayLabel:='姓名';
        FieldByName('J_name').DisplayLabel :='奖品';
      end else
      Begin
        Active:=False;
        Showmessage('还没有该项的人得奖!');
      end;
    end;
  end else
  begin
  with  J_FlagQry do
  begin
    Active:=False;
    Sql.Clear;
    SQL.Add('select Yuan.Name_id,Yuan.Name_code from Yuan ');
    SQL.add(' where Yuan.J_EW_Flag=1  order by Yuan.J_name' );
    Active:=True;
    if RecordCount>0 then
    begin
      Fieldbyname('Name_id').DisplayLabel:='工号';
      FieldByName('Name_code').DisplayLabel:='姓名';
    end else
    Begin
      Active:=False;
      Showmessage('还没有该项的人得奖!');
    end;
  end;
  end;
end;

procedure TForm1.Button23Click(Sender: TObject);
var
  VarExcel: variant;//定义一个EXCEL变量;
  Vari,Varj:integer;      //控制for循环的两个变量即Excel中的行数和列数
  VarFilePath:String;//存储本程序导出数据文件的路径
begin
     if J_FlagQry.Active = False then
     begin
       Showmessage('没有数据可供您输出!');
       Exit;
     end;
     VarExcel := CreateOleObject( 'Excel.Application' );
     VarExcel.Workbooks.Add;
     VarExcel.Cells[1,1].Value:='工号';
     VarExcel.Cells[1,2].Value:='姓名';
     VarExcel.Cells[1,3].Value:='奖品';
     with J_FlagQry do
     begin
       First;
       DisableControls;
       FrmProgress :=TFrmProgress.Create(nil);
       FrmProgress.Show;
       FrmProgress.ProgressBar1.Max :=J_FlagQry.RecordCount ;
       if RadioGroup1.ItemIndex <> 7 then
       begin
         for VarI:=1 to (RecordCount) do
         begin
           for VarJ:=0 to 2 do
           begin
             VarExcel.Cells[VarI+1,VarJ+1].Value := Fields[VarJ].Text;
           end;
           Next;
           FrmProgress.ProgressBar1.StepBy(1);
         end;
       end else
       begin
         for VarI:=1 to (RecordCount) do
         begin
           for VarJ:=0 to 1 do
           begin
             VarExcel.Cells[VarI+1,VarJ+1].Value := Fields[VarJ].Text;
           end;
           VarExcel.CElls[VarI+1,VarJ+1].Value:='额外奖';
           Next;
           FrmProgress.ProgressBar1.StepBy(1);
         end;
       end;
     end;
     FrmProgress.Free;
     if RadioGroup1.ItemIndex=0 then
        VarFilePath:='C:\特等奖.xls';
     if RadioGroup1.ItemIndex=1 then
        VarFilePath:='C:\一等奖.xls';
     if RadioGroup1.ItemIndex=2 then
        VarFilePath:='C:\二等奖.xls';
     if RadioGroup1.ItemIndex=3 then
        VarFilePath:='C:\三等奖.xls';
     if RadioGroup1.ItemIndex=4 then
        VarFilePath:='C:\四等奖.xls';
     if RadioGroup1.ItemIndex=5 then
        VarFilePath:='C:\五等奖.xls';
     if RadioGroup1.ItemIndex=6 then
        VarFilePath:='C:\六等奖.xls';
     if RadioGroup1.ItemIndex=7 then
        VarFilePath:='C:\额外奖.xls';
     if FileExists(VarFilePath) then
        DeleteFile(VarFilePath);
     VarExcel.ActiveSheet.SaveAs(VarFilePath);
     VarExcel.ActiveWorkBook.Close;
     VarExcel.Quit;
     ShowMessage(VarFilePath+',数据导出成功!');
     J_FlagQry.EnableControls;
end;

procedure TForm1.Button16Click(Sender: TObject);
var
   Z_J_N:integer;//用来存储中奖的管理人员数量
   I:integer;//用来取得随机数的控制变量
   X:integer;//循环变量
   K:integer;//控制循环10次
   J_Flag:integer;//标记抽奖是否完成.
begin      //开五等奖
  J_Flag:=0;
  Z_J_N:=0;
  with TeQry do
  begin  //取得已中奖的管理人员数量
    Active:=False;
    Sql.Clear;
    Sql.Add('select * from yuan where J_Flag=1 and ID_TYPE='+''''+'A'+'''');
    Active:=True;
    Z_J_N:=RecordCount;
  end;
  with TeQry do     //取得未抽中奖的人员
  begin
    active:=False;
    Sql.Clear;
    if Z_J_N>(VarHRASum-20) then//如果管理人员的中奖人数还剩20个则不准抽五等奖了
    begin
      SQL.Add('select * from Yuan where J_Flag=0 and J_EW_Flag=0 and ID_type='+''''+'B'+'''');
      SQL.Add(' order by NewId() ');//NewId()在一个数据表中随机地选取出数据来
    end
    else
    begin
      Sql.Add('select * from yuan where  J_Flag=0 and J_EW_Flag=0 ');
      SQL.Add(' order by NewId() ');//NewId()在一个数据表中随机地选取出数据来
    end;
    Active:=True;
    if Recordcount<1 then
    begin
      Showmessage('该奖项没有待抽奖的人员啦,请重新导入人员资料!');
      Exit;
    end;    
  end;
  with JiangQry do   //取得五等奖的奖品
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('select * from jiang where J_type=5 and J_Sum>J_Kai_Num ');
    Active:=True;
    if RecordCount<1 then
    begin
      showmessage('对不起,五等奖已经抽完了,不能再抽!');
      Exit;
    end;
  end;
  Button16.Enabled :=False;
  Button17.Enabled :=True; //停止按扭
  Button18.Enabled :=False; //退出按扭
  I5:=1;
  while I5<>0 do
  begin
    K:=0;
    while K<10 do
    begin
      //if JiangQry.FieldByName('J_sum').AsInteger
      X:=0;
      TLabel(FindComponent('Label'+intToStr(100+k*3))).Caption := TeQry.fieldbyname('Name_id').asString;
      TLabel(FindComponent('Label'+intToStr(101+k*3))).Caption := TeQry.FieldByname('Name_code').AsString;
      TLabel(FindComponent('Label'+intToStr(102+k*3))).Caption :=Jiangqry.fieldbyname('J_name').AsString;
      TLabel(FindComponent('Label'+intToStr(100+k*3))).Refresh;
      TLabel(FindComponent('Label'+intToStr(101+k*3))).Refresh;
      TLabel(FindComponent('Label'+intToStr(102+k*3))).Refresh;
      Key[k]:=JiangQry.fieldByName('Rkey').AsInteger ;
      YKey[k]:=TeQry.fieldByName('Rkey').AsInteger ;
      application.ProcessMessages;
      if I5=0 then
        Break;
      I5:=I5+1;
      I:=Random(20);
      while x<(I+1) do
      begin
        X:=X+1;
        TeQry.Next;
      //  JiangQry.Next;
        if TeQry.Eof then
          TeQry.First;
      //  if JiangQry.Eof then
      //    Jiangqry.First;
      end;
      K:=K+1;
    end;
  end;
end;

procedure TForm1.Button17Click(Sender: TObject);
Var
  J_Rkey:integer;
  Y_Rkey:integer;
  SQLStr:String;
  I:integer;
  KaiNum,NoKaiNum:integer;
begin
  I5:=0;
  Button16.Enabled :=True;
  Button17.Enabled :=False;          //停止按扭
  Button18.Enabled :=True; //退出按扭
  I:=0;
  while I<10 do
  begin
    with J_FlagQry do
    begin             //如果中奖了则奖中奖数字段值加1
      Active:=False;
      Sql.Clear;
      SQLStr:=' update Jiang set J_Kai_num=J_Kai_num+1  where J_Type=5 and Rkey=:key';
      SQl.Add(SQLStr);
      sql.Add(' select * from Jiang where J_type=5');
      Parameters.ParamByName('Key').Value := Key[i];
      Active:=true;
      Active:=False;
    end;
    I:=I+1;
  end;
  I:=0;
  while I<10 do
  begin
    with J_FlagQry do
    begin            //将中奖的奖品赋值给中奖之人,并标记该人已中过奖了
      Active:=False;
      sql.Clear;
      sql.Add('update yuan set Yuan.J_code=Jiang.J_code,Yuan.J_name=Jiang.J_name,Yuan.J_type=Jiang.J_type,Yuan.J_Flag=1 from yuan ,Jiang ' );
      sql.Add('where Jiang.Rkey=:J_key and Yuan.Rkey=:Y_key ');
      J_FlagQry.Parameters.ParamByName('J_key').Value :=key[i];
      J_FlagQry.Parameters.ParamByName('Y_key').Value :=YKey[i];
      Sql.Add(' select * from Yuan ');
      Active:=true;
    end;
    I:=I+1;
  end;
  J_FlagQry.Active :=False;
  with JiangNumQry do  //取得当前中奖情况
  begin
    Active:=False;
    SQl.Clear;
    Sql.Add('select J_Kai_Num,(J_Sum-J_Kai_Num) Wei from Jiang where J_type=5');
    Active:=True;
    First;
    KaiNum:=0;
    NoKaiNum:=0;
    while not eof do
    begin
      KaiNum:=KaiNum+fieldbyName('J_Kai_Num').AsInteger;
      NoKaiNum:=NoKaiNum+fieldbyName('Wei').AsInteger;
      Next;
    end;
  Edit22.Text :=IntToStr(KaiNum)+'名';
  Edit24.Text :=IntToStr(NoKaiNum)+'名';
  JiangNumQry.Active :=False;    
  end;
end;

procedure TForm1.Button13Click(Sender: TObject);
var
   Z_J_N:integer;//用来存储中奖的管理人员数量
   I:integer;//用来取得随机数的控制变量
   X:integer;//循环变量
   K:integer;//控制循环10次
   J_Flag:integer;//标记抽奖是否完成.
begin      //开四等奖
  J_Flag:=0;
  Z_J_N:=0;
  with TeQry do
  begin  //取得已中奖的管理人员数量
    Active:=False;
    Sql.Clear;
    Sql.Add('select * from yuan where J_Flag=1 and ID_TYPE='+''''+'A'+'''');
    Active:=True;
    Z_J_N:=RecordCount;
  end;
  with TeQry do     //取得未抽中奖的人员
  begin
    active:=False;
    Sql.Clear;
    if Z_J_N>(VarHRASum-20) then//如果管理人员的中奖人数还剩20个则不准抽四等奖了
    begin
      SQL.Add('select * from Yuan where J_Flag=0 and J_EW_Flag=0 and ID_type='+''''+'B'+'''') ;
      SQL.Add(' order by NewId() '); //NewId()在一个数据表中随机地选取出数据来
    end
    else
    begin
      Sql.Add('select * from yuan where  J_Flag=0 and J_EW_Flag=0 ');
      SQL.Add(' order by NewId() ');//NewId()在一个数据表中随机地选取出数据来
    end;
    Active:=True;
    if Recordcount<1 then
    begin
      Showmessage('该奖项没有待抽奖的人员啦,请重新导入人员资料!');
      Exit;
    end;

⌨️ 快捷键说明

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