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

📄 yhsj.pas

📁 机房管理系统delphi源代码
💻 PAS
字号:
unit yhsj;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, Menus, DBTables;

type
  Tf_yhsj = class(TForm)
    DBGrid1: TDBGrid;
    GroupBox1: TGroupBox;
    dlnum: TEdit;
    dl: TBitBtn;
    GroupBox2: TGroupBox;
    rql: TLabel;
    sjl: TLabel;
    GroupBox3: TGroupBox;
    showtime: TTimer;
    retmess: TMemo;
    yyCheck: TCheckBox;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure dlClick(Sender: TObject);
    function yhmess : boolean;
    procedure sjdl;
    procedure xjdl;
    procedure dlnumKeyPress(Sender: TObject; var Key: Char);
    procedure showtimeTimer(Sender: TObject);
    procedure yyCheckClick(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  f_yhsj: Tf_yhsj;
  zw_count : integer;  //座位总数
  setnum,sbnum : string;  //座位号、设备号
  xhnum,sjnum,sjname : string;  //学号、上机证号、姓名
  wdate,wtime : TdateTime;  //时间
  sjd : string;  //时间段
  i,j,k : integer;

implementation

uses jfos, data, gbv;

{$R *.DFM}

procedure Tf_yhsj.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  showtime.Enabled:=False;  
  ds_data.Qu_yhsj.Close;
  f_jfos.Enabled:=True;
end;

procedure Tf_yhsj.FormShow(Sender: TObject);
begin
  ds_data.Qu_yhsj.Close;  //关闭上机数据库
  //得到当前时间段
  with ds_data.Qu_getsjd do
  begin
       Close;
       ParamByName('dqtime').AsTime:=Time;
       Open;
       sjd:=IntToStr(4-RecordCount);
       Close;
  end;
  //保存当前时间段
  f_gbv.sjd.Caption:=sjd;

  //清空上机表
  ds_data.Qu_yhsj_ref.Close;
  ds_data.Qu_yhsj_ref.Open;
  for i:=1 to ds_data.Qu_yhsj_ref.RecordCount do
      ds_data.Qu_yhsj_ref.Delete;

  //打开座位表、得到座位总数
  ds_data.Qu_zwb.open;
  zw_count:=ds_data.Qu_zwb.RecordCount;

  //添加座位表
  for i:=1 to zw_count do
  begin
       setnum:=ds_data.Qu_zwb.FieldByName('setnum').AsString;  //得到座位号
       with ds_data.qu_sjjl do
       begin
            //得到上机记录
            close;
            ParamByName('setnum').value:=setnum;
            ParamByName('sjdate').Asdate:=Date;
            ParamByName('sjd').value:=sjd;
            Open;

            //添加到座位表
            ds_data.Qu_yhsj_ref.Append;
            //添加座位号
            ds_data.Qu_yhsj_ref.FieldByName('setnum').AsString:=setnum;
            if RecordCount>0 then
            begin  //添加已有上机记录
                 Last;
                 if FieldByName('xhnum').AsString='预约' then
                    //添加预约设备
                    ds_data.Qu_yhsj_ref.FieldByName('sjnum').AsString:='预约'
                 else
                 begin  //得到用户信息
                      xhnum:='';
                      with ds_data.qu_yhztx do
                      begin  //确认用户状态
                           Close;
                           ParamByName('xhnum').value:=ds_data.qu_sjjl.FieldByName('xhnum').AsString;
                           Open;
                           if RecordCount=1 then
                           begin  //得到用户状态
                                xhnum:=FieldByName('num').AsString;
                                sjnum:=FieldByName('sjnum').AsString;
                                sjname:=FieldByName('name').AsString;
                           end;
                           Close;
                      end;

                      //判断用户信息
                      if xhnum<>'' then
                         if sjnum<>'' then
                            ds_data.Qu_yhsj_ref.FieldByName('sjnum').AsString:=sjnum
                         else
                            ds_data.Qu_yhsj_ref.FieldByName('sjnum').AsString:='已注销'
                      else
                            ds_data.Qu_yhsj_ref.FieldByName('sjnum').AsString:='已删除';

                      //添加用户信息
                      ds_data.Qu_yhsj_ref.FieldByName('name').AsString:=sjname;
                      ds_data.Qu_yhsj_ref.FieldByName('sjtime').AsString:=FieldByName('sjtime').AsString;
                      if FieldByName('xjdate').AsString<>'' then
                         ds_data.Qu_yhsj_ref.FieldByName('xjtime').AsDateTime:=FieldByName('xjtime').AsDateTime;
                 end;
            end;
            ds_data.Qu_yhsj_ref.Post;  //保存上机表
            Close;  //关闭上机记录数据库
       end;
       ds_data.Qu_zwb.Next;  //下一个座位
  end;

  ds_data.Qu_yhsj_ref.Close;  //关闭上机数据库
  ds_data.Qu_zwb.Close;  //关闭座位表数据库
  ds_data.Qu_yhsj.Open;  //重新打开上机数据库
  showtime.Enabled:=True;

  //初始化上机登录框
  dlnum.Text:='';
  dlnum.SetFocus;
end;

procedure Tf_yhsj.dlClick(Sender: TObject);
begin
  //得到上机证号
  sjnum:=dlnum.Text;
  if sjnum='' then exit;

  retmess.Text:='用户正在登录,请稍后...';
  //得到用户信息
  with ds_data.Qu_yhzt do
  begin
       //打开数据库
       Close;
       ParamByName('sjnum').value:=sjnum;
       Open;
  end;
  xhnum:=ds_data.qu_yhzt.FieldByName('num').AsString;
  sjname:=ds_data.qu_yhzt.FieldByName('name').AsString;

  //判断用户
  if yhmess then
  begin
       if ds_data.qu_yhzt.FieldByName('used').AsBoolean then
       begin  //下机
            //检测用户上机状态
            with ds_data.Qu_sjztx do
            begin
                 close;
                 ParamByName('sjnum').value:=sjnum;
                 open;
                 if RecordCount=1 then
                 begin  //在本机房上机
                      xjdl;
                      retmess.Text:=sjname+'用户'+#13+#10;
                      retmess.Text:=retmess.Text+'请别忘了拿自己的东西,再见。';
                 end
                 else  //不在本机房上机
                 begin
                      retmess.Text:=sjname+'用户在其它机房。';
                      Application.MessageBox(PChar(retmess.Text), '错误', Mb_OK);
                 end;
                 close;
            end;
       end
       else
       begin  //上机
            //得到当前时间段
            with ds_data.Qu_sjgetsjd do
            begin
                 Close;
                 ParamByName('dqTime').AsTime:=Time;
                 Open;
                 if RecordCount>0 then
                 begin //时间段内上机
                      sjd:=FieldByName('sjd').AsString;
                      Close;
                 end
                 else
                 begin  //非时间段内不准上机
                      Close;
                      retmess.Text:='现在不允许使用设备。';
                      Application.MessageBox(PChar(retmess.Text),'错误', Mb_OK);
                      Exit;
                 end;
            end;

            setnum:='';
            //检测空机,得到空机号
            if yyCheck.Checked then
            begin  //预约上机
                 ds_data.Qu_jckjx.Open;
                 if ds_data.Qu_jckjx.RecordCount<>0 then
                    setnum:=ds_data.Qu_jckjx.FieldByName('setnum').AsString;
                 ds_data.Qu_jckjx.Close;
            end
            else
            begin  //正常上机
                 ds_data.Qu_jckj.Open;
                 if ds_data.Qu_jckj.RecordCount<>0 then
                    setnum:=ds_data.Qu_jckj.FieldByName('setnum').AsString;
                 ds_data.Qu_jckj.Close;
            end;

            if setnum='' then
            begin  //无空机
                 retmess.Text:=sjname+'用户'+#13+#10;
                 if yyCheck.Checked then
                    retmess.Text:=retmess.Text+'对不起,没有空闲的预约设备。'
                 else
                    retmess.Text:=retmess.Text+'对不起,没有空闲的设备。';
            end
            else
            begin  //上机登录
                 sjdl;
                 retmess.Text:=sjname+'用户'+#13+#10;
                 retmess.Text:=retmess.Text+'欢迎你,你的座位是 '+setnum+'号。';
            end;
       end;
  end;
  ds_data.qu_yhzt.close;  //关闭用户数据库
end;

procedure Tf_yhsj.sjdl();
var dlzt : string;  //登录状态
begin  //上机登录
     //得到上机时间
     wdate:=Date;
     wtime:=Time;

     //更新上机表
     with ds_data.Qu_sjzt do
     begin
          //打开数据库
          Close;
          ParamByName('setnum').value:=setnum;
          Open;
          //更新数据库
          Edit;
          dlzt:=FieldByName('sjnum').AsString;
          FieldByName('sjnum').AsString:=sjnum;
          FieldByName('name').AsString:=sjname;
          FieldByName('sjtime').AsDateTime:=wtime;
          FieldByName('xjtime').AsString:='';
          Post;
          Close;
     end;

     //更新上机设备状态
     with ds_data.Qu_sbzt do
     begin
          //打开数据库
          Close;
          ParamByName('setnum').value:=setnum;
          Open;
          //更新数据库
          Edit;
          sbnum:=FieldByName('num').AsString;
          FieldByName('used').AsBoolean:=True;
          Post;
          Close;
     end;

     //更新上机用户状态
     with ds_data.Qu_yhzt do
     begin
          //打开数据库
          Close;
          ParamByName('sjnum').value:=sjnum;
          Open;

          //更新数据库
          Edit;
          FieldByName('used').AsBoolean:=True;
          Post;
          Close;
     end;

     //更新上机记录表
     if dlzt='预约' then
        //更新预约上机
        with ds_data.Qu_jlztx1 do
        begin
             //打开数据库
             Close;
             ParamByName('setnum').value:=setnum;
             ParamByName('sjdate').AsDate:=wdate;
             ParamByName('sjd').value:=sjd;
             Open;
             //更新数据库
             Edit;
             FieldByName('xjdate').AsDateTime:=wdate;
             FieldByName('xjtime').AsDateTime:=wtime;
             Post;
             Close;
        end;

     with ds_data.Qu_jlzt do
     begin
          //打开数据库
          Close;
          Open;
          //更新数据库
          Append;
          FieldByName('setnum').AsString:=setnum;
          FieldByName('sbnum').AsString:=sbnum;
          FieldByName('xhnum').AsString:=xhnum;
          FieldByName('sjnum').AsString:=sjnum;
          FieldByName('name').AsString:=sjname;
          FieldByName('sjdate').AsDateTime:=wdate;
          FieldByName('sjtime').AsDateTime:=wtime;
          FieldByName('xjdate').AsString:='';
          FieldByName('xjtime').AsString:='';
          FieldByName('sjd').AsString:=sjd;
          if dlzt='预约' then  //预约上机标志
             FieldByName('yysj').AsBoolean:=True;
          Post;
          Close;
     end;
     //刷新显示
     ds_data.Qu_yhsj.Refresh;
end;

procedure Tf_yhsj.xjdl();
var wdate,wtime : TdateTime;  //时间
begin  //下机登录
     //得到时间
     wdate:=Date;
     wtime:=Time;

     //更新下机记录表
     with ds_data.Qu_jlztx do
     begin
          //打开数据库
          Close;
          ParamByName('sjnum').value:=sjnum;
          Open;
          //更新数据库
          Edit;
          setnum:=FieldByName('setnum').AsString;
          FieldByName('xjdate').AsDateTime:=wdate;
          FieldByName('xjtime').AsDateTime:=wtime;
          Post;
          Close;
     end;

     //更新下机表
     with ds_data.Qu_sjzt do
     begin
          //打开数据库
          Close;
          ParamByName('setnum').value:=setnum;
          Open;
          //更新数据库
          Edit;
          FieldByName('xjtime').AsDateTime:=wtime;
          Post;
          Close;
     end;

     //更新下机设备状态
     with ds_data.Qu_sbzt do
     begin
          //打开数据库
          Close;
          ParamByName('setnum').value:=setnum;
          Open;
          //更新数据库
          Edit;
          FieldByName('used').AsBoolean:=False;
          Post;
          Close;
     end;

     //更新下机用户状态
     with ds_data.Qu_yhzt do
     begin
          //打开数据库
          Close;
          ParamByName('sjnum').value:=sjnum;
          Open;

          //更新数据库
          Edit;
          FieldByName('used').AsBoolean:=False;
          Post;
          Close;
     end;
     //刷新显示
     ds_data.Qu_yhsj.Refresh;
end;

function Tf_yhsj.yhmess() : boolean;
begin
  result:=True;

  //判断用户状态
  with ds_data.qu_yhzt do
  begin
       if RecordCount<>1 then
          retmess.Text:='不存在该用户。'
       else
          if FieldByName('cerror').AsBoolean then
             retmess.Text:=sjname+'用户禁止使用设备。';
       if (RecordCount<>1) or (FieldByName('cerror').AsBoolean) then
       begin
          Application.MessageBox(PChar(retmess.Text), '错误', Mb_OK);
          result:=False;
       end;   
  end;
end;

procedure Tf_yhsj.dlnumKeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
       dlClick(nil);
       dlnum.Text:='';
  end;
end;

procedure Tf_yhsj.yyCheckClick(Sender: TObject);
begin
  dlnum.SetFocus;
end;

procedure Tf_yhsj.showtimeTimer(Sender: TObject);
begin
  rql.Caption:=DateToStr(Date);
  sjl.Caption:=TimeToStr(Time);

  //得到当前时间段
  with ds_data.Qu_getsjd do
  begin
       Close;
       ParamByName('dqtime').AsTime:=Time;
       Open;
       sjd:=IntToStr(4-RecordCount);
       Close;
  end;

  //判断是否跨越时间段
  if sjd<>f_gbv.sjd.Caption then
  begin  //已经跨越时间段
       showtime.Enabled:=False;
       ds_data.search_old;  //更新过期记录
       FormShow(nil);  //窗口初始化
  end;
end;

procedure Tf_yhsj.DBGrid1TitleClick(Column: TColumn);
var sql_string : string;
    Title_string : string;
begin
  //得到标题名称(显示字段的名称)
  Title_string:=Column.FieldName;
  //得到SQL语句
  sql_string:='Select setnum 座位号,sjnum 上机证号,name 姓名,sjtime 上机时间,xjtime 下机时间 From yhsj';
  sql_string:=sql_string+' Order by '+Title_string;
  //重新打开数据库
  with ds_data.Qu_yhsj do
  begin
       Close;
       sql.Clear;
       sql.Add(sql_string);
       Open;
  end;
end;

end.

⌨️ 快捷键说明

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