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

📄 card_firini.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  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_FirIni.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;

{---------------------------------------}
{开始初始化卡片}

procedure TFrmCard_FirIni.BitBtn1Click(Sender: TObject);
var
  Rq: TDate;
  Kh, CardStatus: string;
  Thnum: integer;
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));
  end;
  {判断老卡是否已经退还}
  if OldCardFlag then
  begin
    if not GetCardStatus(Rq, Kh) then
    begin
      PublicUnit.IsErrorFlag := True;
      DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
        nbInsert, nbEdit, nbCancel];
      DBNavigator1.DataSource.DataSet.Cancel;
      ToolButton4.Enabled := False;
      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, nbEdit, nbCancel];
      DBNavigator1.DataSource.DataSet.Cancel;
      ToolButton4.Enabled := False;
      Exit;
    end;
  end;
  if SaveToDb then
    //ShowMessage('卡片初始化成功!')
  else
  begin
    PublicUnit.IsErrorFlag := True;
    ShowMessage('卡片初始化失败!');
  end;
  DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
    nbEdit, nbCancel];
  ToolButton4.Enabled := False;
  ScanData;
end;
{取消初始化}

procedure TFrmCard_FirIni.BitBtn2Click(Sender: TObject);
var
  rq: TDate;
  IcKh, MachineNo, CardStatus, CzyName: string;
  comh: smallint;
  pass: PChar;
begin
  PublicUnit.IfDeleteClick := True;
  with CardSell_DataModule.ADOQuery2 do
  begin
    rq := StrToDate(DateTimeToStr(Fields[0].AsDateTime));
    IcKh := (Fields[1].AsString);
    MachineNo := (Fields[10].AsString);
    CardStatus := Trim(Fields[7].AsString);
    CzyName := Trim(Fields[9].AsString);
  end;
  if not DeleteFromDB(rq, IcKh, MachineNo, CardStatus, CzyName) then
  begin
    ShowMessage('删除售卡信息表失败!');
    Exit;
  end;
  if not DeleteFromSubDB(rq, IcKh, MachineNo, Cardstatus, CzyName) then
  begin
    ShowMessage('删除售卡信息子表失败');
    Exit;
  end;
  //加入将卡恢复到操作前的状态
  //returnvalue:=ReadFromDll('intialize',comh,pass);
  //清除有效期和余额
  //returnvalue:=ReadFromDll('clear',comh,pass);
  ScanData;
end;

procedure TFrmCard_FirIni.DBEdit1DblClick(Sender: TObject);
var
  DI_DfmDBCalendar: TDI_DfmDBCalendar;
  Rq: TDate;
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  {DI_DfmDBCalendar := TDI_DfmDBCalendar.Create(Application, nil,
    TDBEdit(Sender),
    'DBEdit');
  with DI_DfmDBCalendar do
  begin
    Width := 400;
    ShowModal;
    Free;
  end;}
  PZ_RqXz.SetWork(Rq);
  DBEdit1.Field.Value := Rq;
end;

procedure TFrmCard_FirIni.DBEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
  begin
    if TDBEdit(Sender).Tag = 8 then
    begin
      if TDBEdit(Sender).DataSource.DataSet <> nil then
        with TDBEdit(Sender).DataSource.DataSet do
        begin
          Next;
          DBEdit1.SetFocus;
          if EOF and CanModify then
            Append;
        end;
    end
    else
      perform(WM_NEXTDLGCTL, 0, 0);
  end;
end;

procedure TFrmCard_FirIni.BitBtn3Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmCard_FirIni.DBEdit1Exit(Sender: TObject);
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  CardSell_DataModule.ADOQuery2.FieldByName('操作员姓名').AsString :=
    Trim(FrmMain.UserName);
  CardSell_DataModule.ADOQuery2.FieldByName('卡片状态').AsString := '未使用';
end;

procedure TFrmCard_FirIni.DBEdit2Exit(Sender: TObject);
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  if TEdit(Sender).Text = '' then
  begin
    ShowMessage(TEdit(Sender).Hint + '字段不能为空!');
    TEdit(Sender).SetFocus;
    Exit;
  end;
  if TEdit(Sender).Tag = 7 then
    DBEdit7Enter(Self);
end;

procedure TFrmCard_FirIni.DBEdit7Enter(Sender: TObject);
var
  CardValue, CardYj: Double;
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  CardValue := StrToFloat(Trim(DBComboBox2.Text));
  with CardSell_DataModule.ADOQuery2 do
  begin
    FieldByName('卡片面值').AsString := FloatToStr(CardValue);
    if (CardValue -
      FieldByName('押金').AsFloat) < 0 then
    begin
      ShowMessage('押金不能大于卡片面值!');
      FieldByName('存款金额').AsFloat := 0;
      Exit;
    end
    else
      FieldByName('存款金额').AsFloat :=
        CardValue -
        FieldByName('押金').AsFloat;
  end;
end;

procedure TFrmCard_FirIni.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbInsert then
  begin
    DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbEdit,
      nbCancel];
    ToolButton4.Enabled := False;
    GetIniValue;
  end;
end;

//设置默认选项(售卡机编码,押金)

procedure TFrmCard_FirIni.BitBtn4Click(Sender: TObject);
begin
  SetValue;
end;

procedure TFrmCard_FirIni.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
    Exit;
  if Key = 40 then
  begin
    CardSell_DataModule.ADOQuery2.Append;
    GetIniValue;
  end;
end;

procedure TFrmCard_FirIni.DBEdit3DblClick(Sender: TObject);
var
  ADataSet: TDataSet;
  DicName, CardValue, CardType: string;
  TemporaryTableNames: TStrings;
  DI_DfmDBDictionery: TDI_DfmDBDictionery;
begin
  ADataSet := TDBEdit(Sender).DataSource.DataSet;
  if not (ADataSet.State in [dsEdit, dsInsert]) then
    Exit;
  if TDBEdit(Sender).Tag = 7 then
    Exit;
  DicName := 'Dic_' + Trim(TDbEdit(Sender).Field.FieldName);
  DI_DfmDataModule1.AnotherDBADOConnection.Close;
  DI_DfmDataModule1.AnotherDBADOConnection.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.Dbuser
    +
    ';Password=' + FrmMain.DBPass + ';Initial Catalog=' + FrmMain.DbName +
    ';Data Source=' + FrmMain.ServerName;
  TemporaryTableNames := TStringList.Create;
  DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
    False);
  if TemporaryTableNames.IndexOf(DicName) = -1 then
  begin
    if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
      mrCancel then
      Exit;
    with DI_DfmDataModule1.DictioneryADOQuery do
    begin
      Close;
      Sql.Clear;
      Sql.Add('Create Table ' + DicName);
      Sql.Add('(ID varChar (10),DICTIONARY varChar(50))');
      try
        ExecSql;
      except
        ShowMessage('error');
        Exit;
      end;
    end;
  end;
  DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DicName, DBGrid1,
    TDBEdit(Sender), 'DBEdit');
  DI_DfmDBDictionery.ShowModal;
  DI_DfmDBDictionery.Free;
  TemporaryTableNames.Free;
end;

procedure TFrmCard_FirIni.DBEdit3Change(Sender: TObject);
begin
  if (CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString = '') or
    (CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString = '') then
    Exit;
  if (PublicUnit.IfSaveClick) or (PublicUnit.IfDeleteClick) then
    Exit;
  //GetCardNo;
  DBEdit7Enter(Sender);
end;

procedure TFrmCard_FirIni.DBEdit5DblClick(Sender: TObject);
var
  ADataSet: TDataSet;
  DicName, CardValue, CardType: string;
  TemporaryTableNames: TStrings;
  DI_DfmDBDictionery: TDI_DfmDBDictionery;
begin
  ADataSet := TDBEdit(Sender).DataSource.DataSet;
  if not (ADataSet.State in [dsEdit, dsInsert]) then
    Exit;
  DicName := 'Dic_' + Trim(TDbEdit(Sender).Field.FieldName);
  DI_DfmDataModule1.AnotherDBADOConnection.Close;
  DI_DfmDataModule1.AnotherDBADOConnection.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.Dbuser
    +
    ';Password=' + FrmMain.DBPass + ';Initial Catalog=' + FrmMain.DbName +
    ';Data Source=' + FrmMain.ServerName;
  TemporaryTableNames := TStringList.Create;
  DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
    False);
  if TemporaryTableNames.IndexOf(DicName) = -1 then
  begin
    if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
      mrCancel then
      Exit;
    with DI_DfmDataModule1.DictioneryADOQuery do
    begin
      Close;
      Sql.Clear;
      Sql.Add('Create Table ' + DicName);
      Sql.Add('(ID varChar (10),DICTIONARY varChar(50) not null Primary Key)');
      try
        ExecSql;
      except
        ShowMessage('error');
        Exit;
      end;
    end;
  end;
  DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DicName, DBGrid1,
    TDBEdit(Sender), 'DBEdit');
  DI_DfmDBDictionery.ShowModal;
  DI_DfmDBDictionery.Free;
  TemporaryTableNames.Free;
end;

procedure TFrmCard_FirIni.Button1Click(Sender: TObject);
begin
  Card_ChangePsw.SetWork;
end;

function TFrmCard_FirIni.GetIcKh(CardLx, CardValue: string; var First:
  string; var Second: string): Boolean;
var
  MaxKh: string;
  ti: TInifile;
begin
  Result := False;
  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;
  Result := True;
end;

procedure TFrmCard_FirIni.DBComboBox2Change(Sender: TObject);
var
  CardNo: string;
begin
  {if OldCardFlag then {老卡保留原卡号}
  {begin
    CardNo:=CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString;
    GetPreCardXx(CardNo);
  end
  else{新卡,根据类型和面值自动生成卡号}
   { if not ChangeKh(Trim(DBComboBox1.Text),Trim(DBComboBox2.Text)) then Exit;}
  DBEdit7Enter(Self);
end;

procedure TFrmCard_FirIni.Button2Click(Sender: TObject);
var
  Pass2: string;
  returnvalue, Comh: smallint;
  pass: Pchar;
  ti1: TIniFile;
begin
  ti1 := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
  Pass2 := ti1.ReadString('默认选项', 'Mima', '55555');
  Pass2 := UnEncryFunc(Trim(Pass2));
  Comh := ti1.ReadInteger('默认选项', 'Port', 0);
  pass := Pchar(Trim(Pass2));
  returnvalue := ReadFromDll('checkpass', Comh, pass);
  if returnvalue <> 1 then
  begin
    ShowMessage('密码校验错误!');
    Exit;
  end;
  //returnvalue := WriteToCard(pass, Comhm, Pchar('00000000'), Pchar('00000000'), '04',
   // '0000', '00', '0');
  returnvalue := ReadFromDll('intialize', Comh, pass);
  if returnvalue <> 1 then
  begin
    ShowMessage('写卡错误!');
    Exit;
  end
  else
    ShowMessage('清空卡号成功!');
end;

end.

⌨️ 快捷键说明

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