📄 yhsj.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 + -