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

📄 card_inicard.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 4 页
字号:
      Trim(CardNo);
    DBEdit3.ReadOnly := True;
    OldCardFlag := True;
  end
  else
    //ChangeKh(CardType,CardValue);{新卡}
  begin
    ShowMessage('这是一张新卡,请输入卡号!');
    DBEdit3.ReadOnly := False;
    DBEdit3.DataSource.DataSet.FieldByName('IC卡号').EditMask := '00000000';
    DBEdit3.SetFocus;
  end;
  //DBEdit1.SetFocus;
  ToolButton4.Enabled := True;
  ti.Free;
end;

{通过卡号获得卡片类型和卡片面值的相关信息}

procedure TFrmCard_IniCard.GetPreCardXx(CardNo: string);
var
  Fir, Sec, CardLx, CardValue: string;
  ti: TInifile;
begin
  CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(CardNo);
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  Fir := Copy(Trim(CardNo), 1, 1);
  Sec := Copy(Trim(CardNo), 2, 1);
  CardLx := ti.ReadString('卡类型对照表', Fir, '');
  CardValue := ti.ReadString('卡面值对照表', Sec, '');
  if CardLx <> '' then
    CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
      Trim(CardLx);
  if CardValue <> '' then
    CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString :=
      Trim(CardValue);
  CardSell_DataModule.ADOQuery2.FieldByName('存款金额').AsFloat :=
    StrToFloat(CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString) -
    CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat;
  DBComboBox1.ReadOnly := True;
  DBComboBox2.ReadOnly := True;
end;
{设置默认值}

procedure TFrmCard_IniCard.SetValue;
var
  ti: TInifile;
  MachineNo, CardType, CardValue: string;
  Yj: Double;
begin
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  MachineNo :=
    Trim(CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString);
  Yj := CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat;
  CardType := CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString;
  CardValue := CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString;
  ti.WriteString('默认选项', 'MachineNo', MachineNo);
  ti.WriteString('默认选项', 'CardType', CardType);
  ti.WriteString('默认选项', 'CardValue', CardValue);
  ti.WriteFloat('默认选项', 'CardYj', Yj);
  ti.Free;
end;

procedure TFrmCard_IniCard.GetCardNo;
var
  CardType, CardValue, Kh: string;
begin
  CardType :=
    Trim(CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString);
  CardValue :=
    Trim(CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString);
  if (CardType = '') or (CardValue = '') then
  begin
    ShowMessage('请输入卡号和卡片类型!');
    Exit;
  end;
  PZ_DmDic.SetWork('IC卡号', Kh, 10, CardType, CardValue);
  CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(Kh);
end;

//初始化多张卡片(所有卡片的卡片类型,面值,押金,存款金额,日期等信息默认为与第一张卡片完全一样)

procedure TFrmCard_IniCard.IniMulCard;
var
  CardLx, CardValue, IcKh, KhName, CardStatus, CzyName, MachineNo,
    ValDate, Ss, CardNo: string;
  i, Sl, ValDayNum: integer;
  CkJe, TkJe, Yj, Ye: Double;
  Rq: TDate;
  KpList: TStrings;
begin
  if not OldCardFlag then
  begin
    ShowMessage('新卡无法批量初始化!');
    PublicUnit.IsErrorFlag := True;
    Exit;
  end;
  Sl := StrToInt(Trim(SpinEdit1.Text));
  KpList := TStringList.Create;
  KpList.Clear;
  with CardSell_DataModule.ADOQuery2 do
  begin
    FieldByName('有效天数').AsInteger := 0;
    Rq := StrToDate(DateTimeToStr(Fields[0].AsDateTime));
    //CardNo:=Trim(FieldByName('IC卡号').AsString);
    CkJe := Fields[2].AsFloat;
    TkJe := 0;
    Yj := Fields[4].AsFloat;
    KhName := '';
    ValDayNum := FieldByName('有效天数').AsInteger;
    CardStatus := '未使用';
    CardLx := Trim(Fields[8].AsString);
    CzyName := Trim(Fields[9].AsString);
    MachineNo := Trim(Fields[10].AsString);
    CardValue := Trim(Fields[11].AsString);
    Ye := CKJe;
    ValDate := '0';
  end;
  //FirCardh:=StrToInt(CardNo);
  for i := 1 to Sl do
  begin
    if i = 1 then
      ShowMessage('请插入IC卡!')
    else
    begin
      ShowMessage('请取出上一张IC卡!');
      ShowMessage('请插入下一张IC卡!');
    end;
    if MessageBox(handle, '想继续此张卡片吗?', '提示', MB_YesNo) = ID_No then
      Continue;
    //FirCardh := FirCardh + 1;
    //IcKh := IntToStr(FirCardh);
    if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
      Continue;
    if CardNo = '' then
      Continue;
    IcKh := Trim(CardNo);
    if not GetCardStatus(Rq, IcKh) then
      Continue;
    CardStatus := '未使用';
    if not SaveToDb1(Rq, IcKh, KhName, CardStatus,
      CardLx, CzyName, MachineNo, CardValue, ValDate,
      CkJe, TkJe, Yj, Ye, ValDayNum) then
    begin
      PublicUnit.IsErrorFlag := True;
      Continue;
    end;
    KpList.Add(IntToStr(i));
  end;
  for i := 0 to KpList.Count - 1 do
  begin
    if KpList[i] = '' then
      Continue;
    if i <> KpList.Count - 1 then
      Ss := Ss + KpList[i] + ','
    else
      Ss := Ss + KpList[i] + '张';
  end;
  ShowMessage('第' + Ss + '卡片初始化成功!');
  ScanData;
  KpList.Free;
end;
{在数据库中寻找指定类型和面值的最大卡号}

function TFrmCard_IniCard.GetMaxKh(CardLx, CardValue: string; var MaxKh:
  string): Boolean;
var
  IntMaxKh, IntMaxKh1: integer;
begin
  Result := False;
  with CardSell_DataModule.ADOQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select Distinct IC卡号 From  SCSJ_TKPXX');
    Sql.Add('Where 卡片类型=''' + Trim(CardLx) + '''' + 'And 卡片面值=''' +
      Trim(CardValue) + '''');
    try
      Open;
    except
      ShowMessage('无法打开卡号信息表!');
      Exit;
    end;
    if RecordCount = 0 then
    begin
      Result := True;
      MaxKh := '';
      Exit;
    end;
    First;
    IntMaxKh := StrToInt(Fields[0].AsString);
    while not eof do
    begin
      IntMaxKh1 := StrToInt(Fields[0].AsString);
      if IntMaxKh1 > IntMaxKh then
        IntMaxKh := IntMaxKh1;
      Next;
    end;
    MaxKh := IntToStr(IntMaxKh);
  end;
  Result := True;
end;

{初始化卡片类型和卡片面值列表}

procedure TFrmCard_IniCard.IniComboBox;
var
  ti: TInifile;
  TypeCount, i: integer;
  CardType: string;
begin
  DBComboBox1.Clear;
  DBComboBox2.Clear;
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
  TypeCount := ti.ReadInteger('CardTypeList', 'CardTypeCount', 0);
  for i := 1 to TypeCount do
  begin
    CardType := ti.ReadString('CardTypeList', 'CardType' + IntToStr(i), '');
    if CardType = '' then
      Continue;
    DBComboBox1.Items.Add(CardType);
    if DBComboBox1.Items.Count > 0 then
      DBComboBox1.ItemIndex := 0;
  end;
  TypeCount := ti.ReadInteger('CardValueList', 'CardValueCount', 0);
  for i := 1 to TypeCount do
  begin
    CardType := ti.ReadString('CardValueList', 'CardValue' + IntToStr(i), '');
    if CardType = '' then
      Continue;
    DBComboBox2.Items.Add(CardType);
    if DBComboBox2.Items.Count > 0 then
      DBComboBox2.ItemIndex := 0;
  end;
  ti.Free;
end;

{根据卡片类型和面值自动生成卡号}

function TFrmCard_IniCard.ChangeKh(CardLx, CardValue: string): Boolean;
var
  MaxKh, First, Second: string;
  ti: TInifile;
  ADataSet: TDataSet;
begin
  ADataSet := DBComboBox1.DataSource.DataSet;
  if not (ADataSet.State in [dsEdit, dsInsert]) then
    Exit;
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
  First := ti.ReadString('卡类型首位对照表', Trim(CardLx), '0');
  if First = '0' then
  begin
    ShowMessage('读取卡片类型信息错误!');
    Exit;
  end;
  ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
  Second := ti.ReadString('卡面值首位对照表', Trim(CardValue), '0');
  if Second = '0' then
  begin
    ShowMessage('读取卡片面值信息错误!');
    Exit;
  end;
  if not GetMaxKh(CardLx, CardValue, MaxKh) then
    Exit;
  if MaxKh = '' then
    MaxKh := Trim(First + Second + '000000')
  else
    MaxKh := Trim(IntToStr(StrToInt(Trim(MaxKh)) + 1));
  with CardSell_DataModule.ADOQuery2 do
  begin
    FieldByName('存款金额').AsFloat :=
      StrToFloat(FieldByName('卡片面值').AsString) -
      FieldByName('押金').AsFloat;
    FieldByName('IC卡号').AsString := Trim(MaxKh);
  end;
  ti.Free;
end;

{获得数据库中与读写器中卡片卡号相同,状态为使用的最近的一条记录的序号}
function  TFrmCard_IniCard.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_IniCard.BitBtn1Click(Sender: TObject);
var
  Rq: TDateTime;
  Kh, CardStatus: string;
begin
  //if IfEditNull then Exit;
  WriteToHistroy('前台', Now, Time, '用户《' + FrmMain.UserName +
    '进行了退卡操作', FrmMain.UserName);
  PublicUnit.IfSaveClick := True;
  if StrToInt(Trim(SpinEdit1.Text)) > 1 then
  begin
    //IniMulCard;
    Exit;
  end;
  CardStatus := '未使用';
  with CardSell_DataModule.ADOQuery2 do
  begin
    Kh := Trim(FieldByName('IC卡号').AsString);
    //Rq := StrToDate(DateTimeToStr(FieldByName('日期').AsDateTime));
    Rq:=FieldByName('日期').AsDateTime;
  end;
  {判断老卡是否已经退还}
  if OldCardFlag then
  begin
    if not GetCardStatus(Rq, Kh) then
    begin
      PublicUnit.IsErrorFlag := True;
      DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
        nbInsert,nbCancel];
      DBNavigator1.DataSource.DataSet.Cancel;
      ToolButton4.Enabled := False;
      SetReadOnlyTrue;
      Exit;
    end;
  end
  else {若是新卡,要保证此卡号没有在数据库中出现过}
  begin
    CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString :=
      Trim(DBEdit3.Text);
    Kh := Trim(CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString);
    if not GetNewCardStatus(Rq, Kh) then
    begin
      PublicUnit.IsErrorFlag := True;
      DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
        nbInsert, nbCancel];
      DBNavigator1.DataSource.DataSet.Cancel;
      ToolButton4.Enabled := False;
      DBEdit3.ReadOnly:=True;
      SetReadOnlyTrue;
      Exit;
    end;
  end;
  if SaveToDb then
    //ShowMessage('卡片初始化成功!')
  else
  begin
    PublicUnit.IsErrorFlag := True;
    ShowMessage('卡片初始化失败!');
  end;
  DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
    nbCancel];
  ToolButton4.Enabled := False;

⌨️ 快捷键说明

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