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

📄 card_scanxx.~pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 ~PAS
字号:
unit Card_ScanXx;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ToolWin, ComCtrls, StdCtrls, DBCtrls, DB, ADODB, IniFiles;

type
  TFrmCard_ScanXx = class(TForm)
    Panel1: TPanel;
    Label8: TLabel;
    DBText7: TDBText;
    Label9: TLabel;
    DBText8: TDBText;
    Label10: TLabel;
    DBText9: TDBText;
    Panel2: TPanel;
    Label6: TLabel;
    DBText5: TDBText;
    Label7: TLabel;
    DBText6: TDBText;
    Label2: TLabel;
    DBText1: TDBText;
    Panel3: TPanel;
    Label3: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    DBText2: TDBText;
    DBText3: TDBText;
    DBText11: TDBText;
    DBText12: TDBText;
    DBText13: TDBText;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    DateTimePicker1: TDateTimePicker;
    Label15: TLabel;
    Edit1: TEdit;
    Label5: TLabel;
    DBText4: TDBText;
    Panel4: TPanel;
    Button1: TButton;
    Button3: TButton;
    Panel5: TPanel;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    IsNew: Boolean;
    function Scan(Rq: TDate; Kh: string): Boolean;
    function GetCardNo: Boolean;
    function ReadKh(var CardNo: string; comh: smallint; pass: Pchar): Boolean;
    function ReadFromDll(filelx: string; comh: smallint; passwordz: PChar):
      smallint;

  public
    { Public declarations }
  end;

procedure SetWork;

implementation
uses Card_DataModule, PublicUnit;

{$R *.dfm}

procedure SetWork;
var
  FrmCard_ScanXx: TFrmCard_ScanXx;
begin
  Screen.Cursor := crHourGlass;
  Application.CreateForm(TFrmCard_ScanXx, FrmCard_ScanXx);
  FrmCard_ScanXx.ShowModal;
  FrmCard_ScanXx.Free;
end;

procedure TFrmCard_ScanXx.FormShow(Sender: TObject);
begin
  ADOQuery1.ConnectionString:= 'Provider=SqlOLEDB.1;Persist Security Info=True;User ID='
      + PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
      ';Initial Catalog='
      + PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;
  DateTimePicker1.Date := Date;
  Screen.Cursor := CrDefault;
end;

function TFrmCard_ScanXx.Scan(Rq: TDate; Kh: string): Boolean;
begin
  with ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select top 1 *');
    Sql.Add('From SCSJ_TSKXX Where');
    Sql.Add('Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
    Sql.Add('And IC卡号=''' + Trim(Kh) + '''');
    Sql.Add('Order by 序号 DESC');
    //Sql.SaveToFile('c:\dd.sql');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览卡片状态信息!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      ShowMessage('数据库中没有此卡片的信息!');
      Exit;
    end;
  end;
end;

function TFrmCard_ScanXx.GetCardNo: Boolean;
var
  ti: TInifile;
  CardNo, PassWord1: string;
  Comhm: smallint;
begin
  Result := False;
  IsNew := False;
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  PassWord1 := ti.ReadString('默认选项', 'Mima', '55555');
  PassWord1 := UnEncryFunc(Trim(PassWord1));
  Comhm := ti.ReadInteger('默认选项', 'Port', 0);
  if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
    Exit;
  if CardNo <> '00000000' then {老卡}
    Edit1.Text := Trim(CardNo)
  else
  begin
    IsNew := True;
    ShowMessage('这是一张新卡!');
  end;
  ti.Free;
  Result := True;
end;

//从文件中读取卡号信息

function TFrmCard_ScanXx.ReadKh(var CardNo: string; comh: smallint; pass:
  Pchar): Boolean;
var
  returnvalue: smallint;
  AFileName, s: string;
  ATextFile: Textfile;
begin
  Result := False;
  returnvalue := ReadFromDll('readcardno', comh, pass);
  if returnvalue <> 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('读取卡号错误!');
    Exit;
  end;
  AFileName := Trim('c:\windows\cardno.txt');
  if not FileExists(AFileName) then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('卡号信息文件' + AFileName + '不存在,系统无法继续工作!');
    Exit;
  end;
  AssignFile(ATextFile, AFileName);
  try
    ReSet(ATextFile);
  except
    Screen.Cursor := crDefault;
    ShowMessage('卡号信息文件' + AFileName + '受到破坏,系统无法继续工作!');
    CloseFile(ATextFile);
    Exit;
  end;
  while not Eof(ATextFile) do
    Readln(ATextFile, s);
  CloseFile(ATextFile);
  s := Trim(s);
  if s='FFFFFFFF' then
  begin
    ShowMessage('卡片插反了,请正确插入卡片!');
    Exit;
  end;
  {while Copy(s, 1, 1) = '0' do
    s := Trim(Copy(s, 2, 10000000));}
  CardNo := Trim(s);
  Result := True;
end;

// 读取卡的各类信息

function TFrmCard_ScanXx.ReadFromDll(filelx: string; comh: smallint; passwordz:
  PChar): smallint;
type
  TDllFunc = function(com: integer; password: pchar): smallint; stdcall;
var
  alib: THandle;
  proc: TDllFunc;
  FileName: string;
  x: FARPROC;
begin
  Screen.Cursor := crHourGlass;
  FileName := ExtractFilePath(Application.ExeName) + 'iccardp.dll';
  alib := LoadLibrary(PChar(FileName)); //调用dll文件
  if alib = 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('无法访问ic卡机的函数iccardp.dll!');
    FreeLibrary(alib);
    Exit;
  end;
  x := GetProcAddress(alib, PChar(filelx)); //获取指定函数指针
  if x = nil then
  begin
    Screen.Cursor := crDefault;
    ShowMessage(' 函数' + filelx + '调用失败!');
    FreeLibrary(alib);
    Exit;
  end;
  Proc := TDllFunc(x); //转换函数类型
  if @Proc = nil then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('无法访问ic卡机读取数据函数!');
    x := nil;
    FreeLibrary(alib);
    Exit;
  end;
  try
    Result := Proc(comh, passwordz);
  except
    ShowMessage('函数运行失败!');
  end;
  proc := nil;
  if not FreeLibrary(alib) then
    ShowMessage('释放文件不成功!');
  Screen.Cursor := crDefault;
end;

procedure TFrmCard_ScanXx.Button1Click(Sender: TObject);
begin
  if not GetCardNo then
  begin
    ShowMessage('从卡片上读取卡号信息错误,请输入卡号!');
    Edit1.SetFocus;
  end;
end;

procedure TFrmCard_ScanXx.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmCard_ScanXx.Button3Click(Sender: TObject);
var
  Rq: TDate;
  Kh: string;
begin
  if IsNew then
    Exit;
  Rq := DateTimePicker1.Date;
  Kh := Trim(Edit1.Text);
  if Kh = '' then
  begin
    ShowMessage('卡号不能为空!');
    Edit1.SetFocus;
    Exit;
  end;
  Scan(Rq, Kh);
end;

procedure TFrmCard_ScanXx.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then  Button3.Click;
end;

end.

⌨️ 快捷键说明

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