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

📄 frmdelcards.pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, fcLabel, TFlatButtonUnit,ICCTRL,INIFILES, StdCtrls,
  TFlatEditUnit;

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

type
  TFrmDelCard = class(TForm)
    Notebook1: TNotebook;
    Image1: TImage;
    Bevel1: TBevel;
    fcLabel1: TfcLabel;
    Image2: TImage;
    fcLabel2: TfcLabel;
    Bevel2: TBevel;
    Image3: TImage;
    fcLabel3: TfcLabel;
    Bevel3: TBevel;
    FlatButton1: TFlatButton;
    FlatButton2: TFlatButton;
    FlatButton3: TFlatButton;
    Cancel: TFlatButton;
    FlatButton5: TFlatButton;
    FlatButton7: TFlatButton;
    FlatButton8: TFlatButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    FlatEdit1: TFlatEdit;
    FlatEdit2: TFlatEdit;
    FlatEdit3: TFlatEdit;
    FlatEdit4: TFlatEdit;
    Label9: TLabel;
    Label10: TLabel;
    procedure CancelClick(Sender: TObject);
    procedure FlatButton1Click(Sender: TObject);
    procedure FlatButton5Click(Sender: TObject);
    procedure FlatButton3Click(Sender: TObject);
    procedure FlatButton7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmDelCard: TFrmDelCard;

implementation

uses MainFRMS, DTConnects;

{$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);
    if right then
      Result:=true
    else
      Result:=false;
    Windows.Beep(2500, 150);
    CloseCommPort(hPort);
  end;
end;

procedure TFrmDelCard.CancelClick(Sender: TObject);
begin
  self.Release;
end;

procedure TFrmDelCard.FlatButton1Click(Sender: TObject);
var   hPort: THandle;
      pclk: PClockInfo;
      CardInfo: TCardInfo;
      ReadInfo: TIniFile;
      FileName:String;
      CardNoStr: String;
      Right:boolean;
      UserID:Integer;
begin
  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 then begin
    FlatEdit1.Text:=IntToStrLen(CardInfo.CardNo, 5);
    FlatEdit2.Text:=PChar(@CardInfo.Name[1]);
    FlatEdit3.Text:=floattostr(CardInfo.Money/10);
    FlatEdit4.Text:=inttostr(CardInfo.Times);
    Notebook1.PageIndex:=Notebook1.PageIndex+1;
    MainFRM.StatusBar1.Panels[0].Text:='读IC卡信息成功!';
  end else begin
    Application.MessageBox('读IC卡信息失败!','操作提示',0+16);
    MainFRM.StatusBar1.Panels[0].Text:='读IC卡信息失败!';
  end;
  Windows.Beep(2500, 150);
  CloseCommPort(hPort);

end;

procedure TFrmDelCard.FlatButton5Click(Sender: TObject);
begin
  Notebook1.PageIndex:=Notebook1.PageIndex - 1;
end;

procedure TFrmDelCard.FlatButton3Click(Sender: TObject);
begin
  with DTConnect do begin
    QryBadCard.Close;
    QryBadCard.SQL.Text:='Delete from ICCard where ICCardNo = '+chr(39)+FlatEdit1.Text+chr(39);
    QryBadCard.ExecSQL;
    QryBadCard.Close;
    QryBadCard.SQL.Text:='Update [User] set ICCardNo = '+chr(39)+'00000'+chr(39)
                          +' Where ICCardNo ='+chr(39)+FlatEdit1.Text+chr(39);
    QryBadCard.ExecSQL;
    QryBadCard.Close;
    QryBadCard.SQL.Text:='Select Top 1 * from BadCard';
    QryBadCard.Open;
    QryBadCard.Append;
    QryBadCard.FieldByName('ICCardNo').AsString:=FlatEdit1.Text;
    QryBadCard.Post;
  end;
  if RegDevice(FlatEdit1.Text,True) then begin
    Notebook1.PageIndex:=Notebook1.PageIndex+1;
  end else begin
    Application.MessageBox('删除此卡时发生错误!','操作提示',0+16); 
  end;
end;

procedure TFrmDelCard.FlatButton7Click(Sender: TObject);
begin
  Self.Release;
end;

end.

⌨️ 快捷键说明

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