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

📄 frmbadcards.pas

📁 IC卡饭堂售饭管理系统源码,内有相关说明,
💻 PAS
字号:
unit FrmBadCards;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,db, Grids,ICCTRL,inifiles, DBGrids, Mask, DBCtrls, TFlatButtonUnit;

type
  PClockInfo=^TClockInfo;
  TClockInfo=record
    ID: WORD;
    ClockNo: String;
    ClockName: String;
    Port: WORD;
    BaudRate: DWORD;
end;

type
  TFrmBadCard = class(TForm)
    GroupBox1: TGroupBox;
    DBGrid1: TDBGrid;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    GroupBox3: TGroupBox;
    FlatButton1: TFlatButton;
    FlatButton2: TFlatButton;
    FlatButton3: TFlatButton;
    FlatButton4: TFlatButton;
    procedure FlatButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FlatButton4Click(Sender: TObject);
    procedure FlatButton3Click(Sender: TObject);
    procedure FlatButton2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmBadCard: TFrmBadCard;

implementation

uses AboutS, DTConnects, MainFRMS;

{$R *.dfm}
function IntToStrLen(Value : Integer; ResultLength :Byte):String;
begin
  Result:=IntToStr(Value);
  while Length(Result) < Resultlength do
    Result:='0'+Result;
  Result:=Copy(Result, Length(Result)-ResultLength+1, ResultLength);
end;

function OpenPort(pclk: PClockInfo):THandle;
var
  Ret   : DWORD;
begin
  Screen.Cursor:=crHourGlass;
  try
    MainFRM.StatusBar1.Panels[0].Text := Format('正在连接"%s"...', [pclk.ClockName]);
    Result := OpenCommPort(pclk.Port, pclk.BaudRate);
    if Result<>INVALID_HANDLE_VALUE then
    begin
      Ret:=LinkCommPort(Result, PChar(pclk.ClockNo));
      case Ret of
         OPEN_PORT_FAILE     : MainFRM.StatusBar1.Panels[0].Text := Format('不能打开端口"%d"!', [pclk.Port]);
         CREATE_LINK_TIMEOUT : MainFRM.StatusBar1.Panels[0].Text := Format('连接设备"%s"超时!', [pclk.ClockNo]);
         LINK_FAILE          : MainFRM.StatusBar1.Panels[0].Text := Format('连接设备"%s"失败!', [pclk.ClockNo]);
         COMM_PORT_INVALID   : MainFRM.StatusBar1.Panels[0].Text := Format('端口"%d"无效', [pclk.Port]);
      end;
      if Ret<>0 then
      begin
        CloseCommPort(Result);
        Result:=0;
      end;
    end else
      Result:=0;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

Function RegDevice(CardNo:String;write:boolean):Boolean;
var ReadInfo:TIniFile;
    FileName:String;
    DeviceCount,i:integer;
    InfoStr:String;
    pclk: PClockInfo;
    hPort: THandle;
    Right: Boolean;
Begin
  FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
  ReadInfo:=TIniFile.Create(FileName);
  DeviceCount:=ReadInfo.ReadInteger('Device','Counter',0);
  for i:=1 to DeviceCount do begin
    InfoStr:=ReadInfo.ReadString('Device','Device'+inttostr(i),'');
    new(pclk);
    pclk.ClockNo:=copy(infoStr,3,2);
    pclk.ClockName:=copy(infoStr,17,Strlen(pchar(infoStr))-16);
    pclk.Port:=StrToIntDef(copy(infoStr,5,4),4);
    pclk.BaudRate:=StrToIntDef(copy(infoStr,13,4),9600);
    MainFRM.StatusBar1.Panels[0].Text:='链接到发卡机上...';
    hPort:=OpenPort(pclk);
    if write then begin
      Right:=WriteRegisterCard(hPort,pchaR(CardNo));
    end else
      Right:=ClearAllRegisterCard(hPort);
    Windows.Beep(2500, 150);
    CloseCommPort(hPort);
  end;
end;

procedure TFrmBadCard.FlatButton1Click(Sender: TObject);
var   hPort: THandle;
      pclk: PClockInfo;
      CardInfo: TCardInfo;
      ReadInfo: TIniFile;
      FileName:String;
      CardNoStr: String;
      Right:boolean;
      UserID:Integer;
begin
  Application.MessageBox('请把要注销的IC卡放在写卡机上后,按确定继续!','操作提示',0+32);
  FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
  ReadInfo:=TIniFile.Create(FileName);
  with ReadInfo do begin
    new(pclk);
    pclk.ID:=StrToIntDef(ReadString('NewCard','ID',''),1);
    pclk.ClockNo:=ReadString('NewCard','DeviceNo','');
    pclk.ClockName:=ReadString('NewCard','Devicena','');
    pclk.Port:=StrToIntDef(ReadString('NewCard','Port',''),4);
    pclk.BaudRate:= StrToIntDef(ReadString('NewCard','Speed','') , 9600);
  end;
  MainFRM.StatusBar1.Panels[0].Text:='链接到发卡机上...';
  hPort:=OpenCommPort(pclk.Port, pclk.BaudRate);
  Right:=ReadCardInfo(hPort, @CardInfo);
  MainFRM.StatusBar1.Panels[0].Text:='正在读卡上的信息...';
  if Right=false then begin
    Application.MessageBox('读IC卡时发生错误!','操作提示',0+32);
  end else begin
    with DTConnect do begin
      QryBadCard.Append;
      QryBadCard.FieldByName('ICCardNo').AsString:=IntToStrLen(CardInfo.CardNo, 5);
      QryBadCard.FieldByName('UserID').AsString:=CardInfo.Name;
      QryBadCard.FieldByName('GetDate').AsDateTime:=date();
    end;
    Application.MessageBox('读IC卡时数据完成!按确定按钮将注销此卡。','操作提示',0+32);
  end;
  Windows.Beep(2500, 150);
  CloseCommPort(hPort);
end;

procedure TFrmBadCard.FormCreate(Sender: TObject);
begin
  WITH DTConnect do begin
    QryBadCard.Close;
    QryBadCard.SQL.Text:='Select * from BadCard';
    QryBadCard.Open;
  end;
end;

procedure TFrmBadCard.FlatButton4Click(Sender: TObject);
begin
  WITH DTConnect do begin
    QryBadCard.Close;
  end;
  self.Release;
end;

procedure TFrmBadCard.FlatButton3Click(Sender: TObject);
begin
  with DTConnect do begin
    if QryBadCard.State in [dsInsert,dsEdit] then begin
      QryBadCard.Post;
      RegDevice(QryBadCard.Fieldbyname('ICCardNo').AsString,true);
      Application.MessageBox('数据更新成功!','操作提示',0+32);
    end;
  end;
end;

procedure TFrmBadCard.FlatButton2Click(Sender: TObject);
begin
  with DTConnect do begin
    RegDevice(QryBadCard.fieldbyname('ICCardNo').AsString,false);
    QryBadCard.Delete;
  end;
end;

procedure TFrmBadCard.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  self.Release;
end;

end.

⌨️ 快捷键说明

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