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

📄 card_firback.~pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
  FileName := ExtractFilePath(Application.ExeName) + 'iccardp.dll';
  try
    alib := LoadLibrary(PChar(FileName));
    if alib = 0 then
    begin
      Screen.Cursor := crDefault;
      ShowMessage('无法访问ic卡机的函数iccardp.dll!');
      Exit;
    end;
    Proc := TDllFunc(GetProcAddress(alib, PChar('writeCard')));
    if @Proc = nil then
    begin
      Screen.Cursor := crDefault;
      ShowMessage('无法访问ic卡机写卡函数!');
      Exit;
    end;
    Result := Proc(PassWord, Comh, Cardh, ValDay, CardType, UserPass1, Discount,
      Ye);
  finally
    begin
      proc := nil;
      FreeLibrary(alib);
    end;
  end;
end;

{删除售卡信息SCSJ_TSKXX表中相同的记录}

function TFrmCard_FirBack.DeleteFromDB(rq: TDate; cardno, machineno,
  cardstatus, czyname: string): Boolean;
begin
  Result := False;
  with CardSell_DataModule.ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Delete');
    Sql.Add('From SCSJ_TSKXX');
    Sql.Add('Where Convert(char(10),日期,20)=''' + Trim(DateToStr(rq)) + '''');
    Sql.Add('And IC卡号=''' + Trim(cardno) + '''');
    Sql.Add('And 售卡机编码=''' + Trim(machineno) + '''');
    Sql.Add('And 卡片状态=''' + Trim(cardstatus) + '''');
    Sql.Add('And 操作员姓名=''' + Trim(czyname) + '''');
    try
      ExecSql;
    except
      ShowMessage('无法清空' + machineno + '号售卡机' + DateToStr(rq) + '日' +
        cardno + '号卡' + '的数据,系统无法继续工作!');
      Exit;
    end;
  end;
  Result := True;
end;

{删除与售卡信息表相关的SCSJ_TKPXX表中相同的记录}

function TFrmCard_FirBack.DeleteFromSubDB(rq: TDate; cardno, machineno,
  cardstatus, czyname: string): Boolean;
begin
  Result := False;
  with CardSell_DataModule.ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Delete');
    Sql.Add('From SCSJ_TKPXX');
    Sql.Add('Where Convert(char(10),创建日期,20)=''' + Trim(DateToStr(rq)) +
      '''');
    Sql.Add('And IC卡号=''' + Trim(cardno) + '''');
    Sql.Add('And 售卡机编码=''' + Trim(machineno) + '''');
    Sql.Add('And 卡片状态=''' + Trim(cardstatus) + '''');
    Sql.Add('And 操作员姓名=''' + Trim(czyname) + '''');
    try
      ExecSql;
    except
      ShowMessage('无法清空' + machineno + '号售卡机' + DateToStr(rq) + '日' +
        cardno + '号卡' + '的数据,系统无法继续工作!');
      Exit;
    end;
  end;
  Result := True;
end;
{向售卡信息表中插入记录}

function TFrmCard_FirBack.InsertToDb(rq: TDate; IcKh: string; CkJe, TkJe, Yj:
  Double; KhName: string; ValDaynum: integer; CardStatus, CardLx, CzyName,
  MachineNo, CardValue: string; Ye: Double): BooLean;
begin
  Result := False;
  with CardSell_DataModule.ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Insert Into SCSJ_TSKXX');
    Sql.Add('(IC卡号,日期,存款金额,退款金额,押金,客户姓名,有效天数,卡片状态,卡片类型,操作员姓名,售卡机编码,卡片面值,卡内余额)');
    Sql.Add('values(');
    Sql.Add('''' + IcKh + ''',''' + Trim(DateToStr(rq)) + ''',' +
      floattostr(CkJe) + ',' + floattostr(TkJe) + ',' + floattostr(Yj));
    Sql.Add(',''' + KhName + ''',' + IntToStr(ValDaynum) + ',''' +
      Trim(CardStatus) + '''');
    Sql.Add(',''' + CardLx + ''',''' + CzyName + ''',''' + MachineNo + ''',''' +
      CardValue + ''',' + floatToStr(Ye) + ')');
    try
      ExecSql;
    except
      ShowMessage('向数据库中插入' + DateToStr(rq) + '日' + IcKh +
        '号卡数据失败');
      Exit;
    end;
  end;
  Result := True;
end;
{向与售卡信息表相关的表中插入记录}

function TFrmCard_FirBack.InsertToSubDb(rq: TDate; IcKh: string; Yj: Double;
  ValDaynum: integer; CardStatus, CardLx, CzyName, MachineNo, CardValue:
  string):
  BooLean;
begin
  Result := False;
  with CardSell_DataModule.ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Insert Into SCSJ_TKPXX');
    Sql.Add('(IC卡号,创建日期,押金,有效天数,卡片状态,卡片类型,操作员姓名,售卡机编码,卡片面值)');
    Sql.Add('values(');
    Sql.Add('''' + IcKh + ''',''' + Trim(DateToStr(rq)) + ''',' +
      floattostr(Yj));
    Sql.Add(',' + IntToStr(ValDaynum) + ',''' + Trim(CardStatus) + '''');
    Sql.Add(',''' + CardLx + ''',''' + CzyName + ''',''' + MachineNo + ''',''' +
      CardValue + ''')');
    try
      ExecSql;
    except
      ShowMessage('向数据库中插入' + DateToStr(rq) + '日' + IcKh +
        '号卡数据失败');
      Exit;
    end;
  end;
  Result := True;
end;

{判断Edit是否有为空的字段}

function TFrmCard_FirBack.IfEditNull: Boolean;
var
  i: integer;
  Temp: TComponent;
begin
  Result := True;
  for i := 0 to ComponentCount - 1 do
  begin
    Temp := Components[i];
    if (Temp is TDBEdit) then
      if TDBEdit(Temp).Text = '' then
      begin
        ShowMessage(TDBEdit(Temp).Hint + '不能为空');
        TDBEdit(Temp).SetFocus;
        Exit;
      end;
  end;
  Result := False;
end;

// 读取卡的各类信息

function TFrmCard_FirBack.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';
  //ShowMessage('开始调用文件iccardp.dll');
  alib := LoadLibrary(PChar(FileName)); //调用dll文件
  if alib = 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('无法访问ic卡机的函数iccardp.dll!');
    FreeLibrary(alib);
    Exit;
  end;
  //ShowMessage('调用文件iccardp.dll成功!');
  //ShowMessage('开始调用函数'+filelx);
  x := GetProcAddress(alib, PChar(filelx)); //获取指定函数指针
  if x = nil then
  begin
    Screen.Cursor := crDefault;
    ShowMessage(' 函数' + filelx + '调用失败!');
    FreeLibrary(alib);
    Exit;
  end;
  // else ShowMessage('函数调用成功!');
  Proc := TDllFunc(x); //转换函数类型
  if @Proc = nil then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('无法访问ic卡机读取数据函数!');
    x := nil;
    FreeLibrary(alib);
    Exit;
  end;
  //else ShowMessage('函数转换成功!');
  try
    Result := Proc(comh, passwordz);
    //ShowMessage('函数运行成功!');
  except
    ShowMessage('函数运行失败!');
    proc := nil;
    FreeLibrary(alib);
    Exit;
  end;
  proc := nil;
  if not FreeLibrary(alib) then
    ShowMessage('释放文件不成功!');
  //else ShowMessage('释放文件成功!');
  Screen.Cursor := crDefault;
end;

{从文件中读取卡号信息}

function TFrmCard_FirBack.ReadKh(var CardNo: string; comh: smallint; pass:
  Pchar): Boolean;
var
  returnvalue: smallint;
  AFileName, s: string;
  ATextFile: Textfile;
begin
  Result := False;
  AFileName := Trim('c:\windows\cardno.txt');
  if FileExists(AFileName) then
    DeleteFile(AFileName);
  returnvalue := ReadFromDll('readcardno', comh, pass);
  if returnvalue <> 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('读取卡号错误!');
    Exit;
  end;
  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_FirBack.ReadValdate(var ValDate: string; comh: smallint;
  pass: Pchar): Boolean;
var
  returnvalue: smallint;
  AFileName, s: string;
  ATextFile: Textfile;
begin
  Result := False;
  AFileName := Trim('c:\windows\valdate.txt');
  if FileExists(AFileName) then
    DeleteFile(AFileName);
  returnvalue := ReadFromDll('readvaldate', comh, pass);
  if returnvalue <> 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('读取IC卡有效期错误!');
    Exit;
  end;
  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);
  while Copy(s, 1, 1) = '0' do
    s := Trim(Copy(s, 2, 10000000));
  if s = '' then
    s := '0';
  ValDate := Trim(s);
  Result := True;
end;
{从文件中读取卡内余额}

function TFrmCard_FirBack.ReadYe(var Ye: Double; comh: smallint; pass: Pchar):
  Boolean;
var
  returnvalue: smallint;
  AFileName, s: string;
  ATextFile: Textfile;
begin
  Result := False;
  AFileName := Trim('c:\windows\balance.txt');
  if FileExists(AFileName) then
    DeleteFile(AFileName);
  returnvalue := ReadFromDll('readBalance', comh, pass);
  if returnvalue <> 0 then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('读取IC卡余额错误!');
    Exit;
  end;
  if not FileExists(AFileName) then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('IC卡余额信息文件' + AFileName + '不存在,系统无法继续工作!');
    Exit;
  end;
  AssignFile(ATextFile, AFileName);
  try
    ReSet(ATextFile);
  except
    Screen.Cursor := crDefault;
    ShowMessage('IC卡余额信息文件' + AFileName +
      '受到破坏,系统无法继续工作!');
    CloseFile(ATextFile);
    Exit;
  end;
  while not Eof(ATextFile) do
    Readln(ATextFile, s);
  CloseFile(ATextFile);
  s := Trim(s);
  while Copy(s, 1, 1) = '0' do
    s := Trim(Copy(s, 2, 10000000));
  if s = '' then
    s := '0';
  Ye := (StrToInt(Trim(s))) / 100;
  Result := True;
end;

function TFrmCard_FirBack.ReadXx(CardNo: string; Rq: TDate): Boolean;
var
  CardStatus: string;
begin
  CardStatus := '使用';
  Result := False;
  with CardSell_DataModule.ADOQuery3 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select top 1 卡片类型,卡片面值,押金,存款金额,客户姓名,有效天数');
    Sql.Add('From SCSJ_TSKXX Where 卡片状态=''' + Trim(CardStatus) + '''');
    Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
    Sql.Add('And IC卡号=''' + Trim(CardNo) + '''');
    Sql.Add('Order by 序号 DESC');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览售卡信息!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      Screen.Cursor := crDefault;
      ShowMessage('此卡未售出!');
      Exit;
    end;
    CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
      Trim(Fields[0].AsString);
    CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString :=
      Trim(Fields[1].AsString);
    CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat :=
      Fields[2].AsFloat;
    CardSell_DataModule.ADOQuery2.FieldByName('存款金额').AsFloat :=
      Fields[3].AsFloat;
    CardSell_DataModule.ADOQuery2.FieldByName('客户姓名').AsString :=
      Trim(Fields[4].AsString);
    CardSell_DataModule.ADOQuery2.FieldByName('有效天数').AsInteger :=
      Fields[5].AsInteger;
  end;
  Result := True;
end;

function TFrmCard_FirBack.ReadXx1(CardNo: string; Rq: TDate): Boolean;
var
  CardStatus: string;
  ValRq: TDate;
begin
  CardStatus := '使用';
  Result := False;
  with CardSell_DataModule.ADOQuery3 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select top 1 卡片类型,卡片面值,押金,存款金额,客户姓名,有效天数,日期,卡内余额');
    Sql.Add('From SCSJ_TSKXX Where 卡片状态=''' + Trim(CardStatus) + '''');
    Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
    Sql.Add('And IC卡号=''' + Trim(CardNo) + '''');
    Sql.Add('Order by 序号 DESC');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览售卡信息!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      Screen.Cursor := crDefault;
      ShowMessage('此卡未售出!');
      Exit;
    end;
    CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
      Trim(Fields[0].AsString);

⌨️ 快捷键说明

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