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

📄 frmlostcards.pas

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

interface

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

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

type
  TFrmLostCard = class(TForm)
    Notebook1: TNotebook;
    Image1: TImage;
    Label2: TLabel;
    FlatEdit1: TFlatEdit;
    Label3: TLabel;
    FlatEdit2: TFlatEdit;
    Label4: TLabel;
    Panel1: TPanel;
    Bevel1: TBevel;
    fcLabel1: TfcLabel;
    FlatButton2: TFlatButton;
    FlatButton3: TFlatButton;
    Image2: TImage;
    Panel2: TPanel;
    Bevel2: TBevel;
    fcLabel2: TfcLabel;
    FlatButton1: TFlatButton;
    FlatButton4: TFlatButton;
    Label5: TLabel;
    FlatButton5: TFlatButton;
    Label1: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    FlatEdit3: TFlatEdit;
    FlatEdit4: TFlatEdit;
    FlatEdit5: TFlatEdit;
    FlatEdit6: TFlatEdit;
    FlatRadioButton1: TFlatRadioButton;
    FlatRadioButton2: TFlatRadioButton;
    Image3: TImage;
    Panel3: TPanel;
    Bevel3: TBevel;
    fcLabel3: TfcLabel;
    FlatButton6: TFlatButton;
    FlatButton7: TFlatButton;
    Label10: TLabel;
    Label9: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    FlatEdit7: TFlatEdit;
    FlatEdit8: TFlatEdit;
    FlatEdit9: TFlatEdit;
    FlatEdit10: TFlatEdit;
    FlatButton8: TFlatButton;
    Image4: TImage;
    Panel4: TPanel;
    Bevel4: TBevel;
    fcLabel4: TfcLabel;
    FlatButton10: TFlatButton;
    Label15: TLabel;
    Label14: TLabel;
    CardNo: TLabel;
    procedure FlatButton2Click(Sender: TObject);
    procedure FlatButton3Click(Sender: TObject);
    procedure FlatButton5Click(Sender: TObject);
    procedure FlatButton1Click(Sender: TObject);
    procedure FlatButton6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmLostCard: TFrmLostCard;

implementation

uses DTConnects, MainFRMS;

{$R *.dfm}

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;UserID:Integer):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));
      with DTConnect do begin
        QryBadCard.Close;
        QryBadCard.SQL.Text:='Select * From BadCard';
        QryBadCard.Open;
        QryBadCard.Append;
        QryBadCard.FieldByName('ICCardNo').AsString:=CardNo;
        QryBadCard.FieldByName('UserID').AsInteger:=UserID;
        QryBadCard.Post; 
      end;
    end else
      Right:=ClearAllRegisterCard(hPort);
    Windows.Beep(2500, 150);
    CloseCommPort(hPort);
  end;
end;

procedure TFrmLostCard.FlatButton2Click(Sender: TObject);
begin
  if (FlatEdit1.Text='') and (FlatEdit2.Text='') then
    abort;
  with DTConnect do begin
    QryCheck.Close;
    QryCheck.SQL.Text:='Select ICCardno,[Username],AddCount,CreateTime From UserCard where ICCardNo = '+FlatEdit1.Text
                        +' or username = '+chr(39)+FlatEdit2.Text+chr(39);
    QryCheck.Open;
    if QryCheck.RecordCount <1 then begin
      Application.MessageBox('找不到相关的IC卡信息','操作提示',0+16);
      Abort; 
    end;
    FlatEdit3.Text:=QryCheck.FieldValues['ICCardNo'];
    FlatEdit4.Text:=QryCheck.FieldValues['UserName'];
    FlatEdit8.Text:=QryCheck.FieldValues['UserName'];
    FlatEdit5.Text:=QryCheck.FieldValues['CreateTime'];
    FlatEdit9.Text:=QryCheck.FieldValues['CreateTime'];
    FlatEdit6.Text:=QryCheck.FieldValues['addcount'];
    FlatEdit10.Text:=QryCheck.FieldValues['addcount'];
  end;
  Notebook1.PageIndex:=Notebook1.PageIndex +1;
end;

procedure TFrmLostCard.FlatButton3Click(Sender: TObject);
begin
  self.Release;
end;

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

procedure TFrmLostCard.FlatButton1Click(Sender: TObject);
begin
  if FlatRadioButton1.Checked then
    Notebook1.PageIndex :=Notebook1.PageIndex +1;
  FlatEdit7.Focused;
end;

procedure TFrmLostCard.FlatButton6Click(Sender: TObject);
var   hPort: THandle;
      pclk: PClockInfo;
      CardInfo: TCardInfo;
      ReadInfo: TIniFile;
      FileName:String;
      CardNoStr: String;
      Right:boolean;
      UserID:Integer;
begin
  if FlatEdit7.Text='' then begin
    Application.MessageBox('请输入新IC卡的编号。','操作提示',0+32);
    abort; 
  end;
  FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
  ReadInfo:=TIniFile.Create(FileName);
  with DTConnect do begin
    qrycheck.Close;
    QryCheck.SQL.Text:='Select ID from ICCard where ICCardNo = '+chr(39)+FlatEdit7.Text+chr(39);
    QryCheck.Open;
    if QryCheck.RecordCount >0 then begin
      Application.MessageBox('已有相同编号的IC存在,请输入别的编号.','操作提示',0+16);
      Abort;
    end;
    QryUser.Close;
    QryUser.SQL.Text:='Select [ID] from [User] WHere [UserName] = '+chr(39)+FlatEdit8.Text +chr(39);
    QryUser.Open;
    if QryUser.RecordCount>1 then begin
      Application.MessageBox('系统在搜索用户时找到两个同名的,请修改此用户名称后,再进行发新IC卡.在发完IC卡后你可重新将此用户改回原来的名字.在此造成不便,敬请见谅.','操作提示',0+48);
      Abort;
    end;
    UserID:=QryUser.FieldValues['ID'];
    CardInfo.CardNo:=StrToIntDef(FlatEdit7.Text, 0);
    CardInfo.Times:=0;
    CardInfo.Money:=Round(StrToFloat(FlatEdit10.Text)*10);
    //CardNoStr:=FlatComboBox1.SelText;
    QryUser.Close;
    StrPCopy(@CardInfo.Name[1],FlatEdit8.Text );
    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;
    hPort:=OpenCommPort(pclk.Port, pclk.BaudRate);
    Right:=WriteCardInfo(hPort, @CardInfo);
    if right then begin
      QryICCard.Close;
      QryICCard.SQL.Text:='Select Top 1 * from ICcard';
      QryICCard.Open;
      QryICCard.edit;
      QryICCard.FieldByName('ICCardNo').AsString:=FlatEdit7.Text;
      QryICCard.FieldByName('UserN').AsInteger:=UserID;
      QryICCard.FieldByName('Ancount').AsFloat:=StrToFloat(FlatEdit10.Text);
      QryICCard.Post;
      QryICCard.Close;
      QryCheck.Close;
      QryCheck.SQL.Text:='Select * from BadCard';
      QryCheck.Open;
      QryCheck.Append;
      QryCheck.FieldByName('ICCardNo').AsString:=FlatEdit3.Text;
      QryCheck.FieldByName('UserID').AsInteger:=UserID; 
      QryCheck.Post; 
      CardNo.Caption:=FlatEdit7.Text;
      Notebook1.PageIndex:=Notebook1.PageIndex +1;
      RegDevice(FlatEdit1.Text,True,UserID);
      Application.MessageBox('成功写入IC卡信息!','操作提示',0+32);
    end else
      Application.MessageBox('写入IC卡信息时出错!','操作提示',0+16);
    Windows.Beep(2500, 150);
    CloseCommPort(hPort);
  end;
end;


end.

⌨️ 快捷键说明

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