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

📄 card_secsell.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  ResultString := ResultString + '卡号:       ' + IcKh + #13 + #10;
  ResultString := ResultString + '卡片面值:   ' + CardValue + #13 + #10;
  ResultString := ResultString + '押金:       ' + FloatToStr(Yj) + #13 + #10;
  ResultString := ResultString + '存款金额:   ' + FloatToStr(CkJe) + #13 + #10;
  ResultString := ResultString + '卡片状态:   ' + CardStatus + #13 + #10;
  ResultString := ResultString + '卡片类型:   ' + CardLx + #13 + #10;
  ResultString := ResultString + '有效天数:   ' + IntToStr(ValDay) + #13 + #10;
  ResultString := ResultString + '客户姓名:   ' + KhName + #13 + #10;
  ResultString := ResultString + '操作员姓名: ' + CzyName + #13 + #10;
  ResultString := ResultString + '售卡机编码: ' + MachineNo + #13 + #10;
  Xj := StrToFloat(CardValue) - PublicUnit.YsJe;
  if  PublicUnit.IsPassValDay then
  begin
    HintXx:='超期退卡!应该退还餐券' + FloatToStr(PublicUnit.YsCqJe) + '元!'+#13+#10;
    HintXx:=HintXx+'应收现金' + FloatToStr(Xj) + '元';
  end
  else
    HintXx:='应收现金' + FloatToStr(Xj) + '元';
  ResultString:=ResultString+HintXx;
  Card_Result.SetWork(ResultString, '售卡结果');
  Result := True;
end;

//向卡中写入数据

function TFrmCard_SecSell.WriteToCard(PassWord: Pchar; Comh: smallint; Cardh:
  PChar; ValDay: PChar; CardType: string; UserPass1: string; Discount: string;
  Ye:
  string): smallint;
type
  TDllFunc = function(pass: Pchar; comh: smallint; cardno: PChar; valdate:
    PChar; dyte: string; userpass: string; disc: string; blance: string):
    smallint; stdcall;
var
  alib: THandle;
  proc: TDllFunc;
  FileName: string;
begin
  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_SecSell.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_SecSell.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_SecSell.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_SecSell.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;

// 读取卡的各类信息

function TFrmCard_SecSell.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;

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

function TFrmCard_SecSell.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_SecSell.FindNeareastRecord(CardNo:String;var MaxXh:integer):Boolean;
begin
  Result:=False;
  MaxXh:=-100;
  with CardSell_DataModule.ADOQuery3 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('IC卡号=''' + Trim(CardNo) + '''');
    Sql.Add('And 卡片状态=''' +'使用'+ '''');
    Sql.Add('Order by 序号 DESC');
    try
      Open;
    except
      Screen.Cursor := crDefault;
      ShowMessage('无法浏览卡片销售信息!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      ShowMessage('卡片信息表中没有此卡号的销售信息!');
      Exit;
    end;
    MaxXh:=FieldByName('序号').AsInteger;
  end;
  Result:=True;
end;

procedure TFrmCard_SecSell.BitBtn1Click(Sender: TObject);
var
  Rq: TDate;
  Kh,HintXx,ResultString: string;
begin
  WriteToHistroy('前台退卡', Now, Time, '用户《' + FrmMain.UserName +
    '进行了退卡操作', FrmMain.UserName);
  //if IfEditNull then
   // Exit;
  with CardSell_DataModule.ADOQuery2 do
  begin
    Kh := Trim(FieldByName('IC卡号').AsString);
    Rq := StrToDate(DateTimeToStr(FieldByName('日期').AsDateTime));
  end;
  if not ReadXx(Kh, Rq) then
  begin
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
      nbEdit, nbCancel];
    PublicUnit.IsErrorFlag := True;
    ToolButton1.Enabled := False;
    DBNavigator1.DataSource.DataSet.Cancel;
    Exit;
  end;
  //是新卡
  if not OldCardFlag then
  begin
    ShowMessage('此卡片是一张新卡,还未初始化!');
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
      nbEdit, nbCancel];
    DBNavigator1.DataSource.DataSet.Cancel;
    PublicUnit.IsErrorFlag := True;
    ToolButton1.Enabled := False;
    Exit;
  end
  else {//老卡,判断是否已经初始化}  if not GetCardStatus(Rq, Kh) then
  begin
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
      nbInsert, nbEdit, nbCancel];
    DBNavigator1.DataSource.DataSet.Cancel;
    PublicUnit.IsErrorFlag := True;
    ToolButton1.Enabled := False;
    Exit;
  end;
  if SaveToDb then
    //ShowMessage('卡片销售成功!')
  else
  begin
    PublicUnit.IsErrorFlag := True;
    DBNavigator1.DataSource.DataSet.Cancel;
    //ShowMessage('卡片销售失败!');
    ResultString:='';
    ResultString:=ResultString+'卡片销售失败!'+#13+#10;
    if  PublicUnit.IsPassValDay then
       HintXx:='超期退卡!应该退还现金' + FloatToStr(PublicUnit.YsJe) +
        '元,退还餐券' + FloatToStr(PublicUnit.YsCqJe) + '元!'
    else
       HintXx:='有效期内退卡!应该退还现金' + FloatToStr(PublicUnit.YsJe) + '元!';
    ResultString:=ResultString+HintXx+#13+#10;
    Card_Result.SetWork(ResultString, '退卡结果');
  end;
  DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
    nbCancel];
  ToolButton1.Enabled := False;
  ToolButton2.Enabled := True;
  ScanData;
  //Close;

⌨️ 快捷键说明

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