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

📄 zk_u.pas

📁 delphi7.0+SQl server 2000开发的,对于初学者有较好的参考价值
💻 PAS
字号:
unit zk_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Mask, ComCtrls, ExtCtrls,strutils;

type
  Tfrm_zk = class(TForm)
    GroupBox1: TGroupBox;
    rdb_danzhang: TRadioButton;
    rdb_duozhang: TRadioButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    zk_bt: TBitBtn;
    BitBtn1: TBitBtn;
    kh_MaskEdit: TMaskEdit;
    skh_MaskEdit: TMaskEdit;
    wkh_MaskEdit: TMaskEdit;
    Label4: TLabel;
    zk_Panel: TPanel;
    jdt_ProgressBar: TProgressBar;
    xkjd_Label: TLabel;
    zks_Label: TLabel;
    dqks_Label: TLabel;
    dqkh_Label: TLabel;
    zks_Edit: TEdit;
    dqks_Edit: TEdit;
    dqkh_Edit: TEdit;
    Label5: TLabel;
    kxdh_ComboBox: TComboBox;
    xkzt_Label: TLabel;
    xkzt_Edit: TEdit;
    procedure zk_btClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BitBtn1Click(Sender: TObject);
    procedure rdb_danzhangEnter(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure kxdh_ComboBoxChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frm_zk: Tfrm_zk;

implementation

uses public_u, surehope_api, sfsb_u, DES;

{$R *.dfm}

procedure Tfrm_zk.BitBtn1Click(Sender: TObject);
begin
  close;
end;

procedure Tfrm_zk.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  self.Free;
end;

procedure Tfrm_zk.FormCreate(Sender: TObject);
begin
  zk_panel.Visible:=false;  //隐藏制多张卡,进度面板
  kxdh_combobox.Text:=cardtype_str(cardtype_num_v);
end;

procedure Tfrm_zk.kxdh_ComboBoxChange(Sender: TObject);
begin
  cardtype_num_v:=cardtype_num(kxdh_combobox.Text);
  frm_sfsb.ADOTable1.Edit;  //把卡型代码字符提交到数据库
  frm_sfsb.ADOTable1.FieldByName('cardtype').AsString:=kxdh_combobox.Text;
  frm_sfsb.ADOTable1.Post;
end;

procedure Tfrm_zk.rdb_danzhangEnter(Sender: TObject);
begin
  zk_panel.Visible:=false;  //隐藏制多张卡,进度面板
end;

procedure Tfrm_zk.zk_btClick(Sender: TObject);
var
  Buf_ascii:array[0..16] of char; // 150个字符串缓冲区
  buf_hex:array[0..300] of char;  //300个HEX数据缓冲区
  kh_DES,en_strhex,skh_str:string;
  ii,cardcount,skh,wkh,kh_length:integer;
begin
    if rdb_danzhang.Checked=true then  //制单张卡
    begin
      if trim(kh_maskedit.Text)='' then
      begin
       messagebox(0,'请输入卡号!','警告提示',mb_iconwarning+mb_ok);
       exit;
      end;
      if openport()=1 then exit; //操作失败则退出
      kh_length:=length(trim(kh_maskedit.Text));
      kh_length_filter_xk(kh_length,buf_hex);  //根据卡号长度处理卡号长度的取值,如果不满10则取第2位数,否则两位数都取.
      kh_DES:='sunrise';  //DES密钥
      en_strhex:=encrystrhex(kh_maskedit.Text,kh_des); //返回卡号加密8字节的16个HEX字符
      strpcopy(buf_ascii,en_strhex); //把加密卡号写入IC卡1区0-7位置(8字节)字符串数组缓冲区
      if (Wr_asc(1,0,8,Buf_ascii)=SURE_HOPE_OK) and (wr_asc(1,13,1,buf_hex)=sure_hope_ok) then
      begin
        MessageBox(0,'写卡成功!',pchar('卡号:'+kh_maskedit.text),mb_iconinformation+mb_ok);
      end
      else
          MessageBox(0,'写卡失败!','写卡',mb_iconerror+mb_ok);
      Close_com; //关闭串口
    end;

  //制多张卡
  if rdb_duozhang.Checked=true then
  begin
    //showmessage('duo'+skh_maskedit.Text+'1');
    if (trim(skh_maskedit.Text)='') or (trim(wkh_maskedit.Text)='') then
    begin
     messagebox(0,'请输入首卡号或尾卡号!','警告提示',mb_iconwarning+mb_ok);
     exit;
    end;
    if openport()=1 then exit; //操作失败则退出
    skh:=strtoint(skh_maskedit.text);
    wkh:=strtoint(wkh_maskedit.Text);
    cardcount:=wkh-skh+1;
    kh_length:=length(kh_maskedit.Text);
    zk_panel.Visible:=true;  //显示制多张卡,进度面板
    zks_edit.Text:=inttostr(cardcount);  //总卡数
    kh_length_filter_xk(kh_length,buf_hex);  //根据卡号长度处理卡号长度的取值,如果不满10则取第2位数,否则两位数都取.
    kh_DES:='sunrise';  //DES密钥
    ii:=1;
    while ii<=cardcount do
    begin
      Close_com; //关闭串口
      if openport()=1 then
      begin
        if messagebox(0,'是否跳过当前卡号?(同时请取走出错的卡片)','提示信息',mb_iconquestion+mb_yesno)=IDYES then
        begin
          skh:=skh+1;
          cardcount:=cardcount-1;
        end;
          if ii>cardcount then
          begin
            jdt_progressbar.Position:=trunc((ii/cardcount)*100);  //进度条位置
            break;
          end;
          openport();
      end;
      skh_str:=inttostr(skh);
      en_strhex:=encrystrhex(skh_str,kh_des);  //返回加密卡号8字节的16个HEX字符
      strpcopy(buf_ascii,en_strhex);
      if (Wr_asc(1,0,8,Buf_ascii)=SURE_HOPE_OK) and (wr_asc(1,13,1,buf_hex)=sure_hope_ok) then
      begin
        xkzt_Label.Refresh;
        xkjd_Label.Refresh;
        jdt_progressbar.Position:=trunc((ii/cardcount)*100);  //进度条位置
        zks_edit.Refresh;
        zks_label.Refresh;
        dqks_label.Refresh;
        dqkh_label.Refresh;
        dqks_edit.Text:=inttostr(ii);  //当前卡数
        dqks_edit.Refresh;
        dqkh_edit.Text:=skh_str;  //当前卡号
        dqkh_edit.Refresh;
        if ii<>cardcount then
        begin
          //MessageBox(0,'写卡成功,请插入下一张卡!',pchar(khstr),mb_iconinformation+mb_ok)
          beep;  //制卡成功使喇叭发声
          repeat  //判断是否已取卡
            xkzt_edit.Text:='请取卡!';
            xkzt_edit.Refresh;
            sleep(50);
          until Power_on<>SURE_HOPE_OK;
          repeat  //判断是否已插卡
            xkzt_edit.Text:='请插卡!';
            xkzt_edit.Refresh;
            sleep(50);
          until Power_on=SURE_HOPE_OK;
        end
        else
        begin
          MessageBox(0,pchar('恭喜您制完:'+inttostr(cardcount)+'张卡片!'),'制卡',mb_iconinformation+mb_ok);
          zk_panel.Visible:=false;  //隐藏制多张卡,进度面板
        end;
        skh:=skh+1;
        ii:=ii+1;
      end
      else
      begin
        MessageBox(0,'写卡失败,请重新插卡','错误提示',mb_iconerror+mb_ok);
      end;
    end; //循环结束语句
    Close_com; //退出循环时关闭串口
  end;

end;

end.

⌨️ 快捷键说明

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