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

📄 newcarunit.~pas

📁 完整的ic卡管理软件
💻 ~PAS
字号:
unit NewCarUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, bsSkinBoxCtrls, bsSkinCtrls, Mask, BusinessSkinForm,
  bsSkinGrids, bsDBGrids, bsMessages, Grids, DBGrids, bsdbctrls, ImgList,
  ComCtrls, ValEdit;

type
  TNewCarForm = class(TForm)
    bsSkinStdLabel1: TbsSkinStdLabel;
    bsSkinEdit1: TbsSkinEdit;
    bsSkinButton6: TbsSkinButton;
    bsSkinButton7: TbsSkinButton;
    bsSkinButton8: TbsSkinButton;
    bsSkinStdLabel2: TbsSkinStdLabel;
    bsSkinStdLabel3: TbsSkinStdLabel;
    bsSkinEdit2: TbsSkinEdit;
    bsSkinStatusBar1: TbsSkinStatusBar;
    bsSkinStatusPanel1: TbsSkinStatusPanel;
    bsSkinListView2: TbsSkinListView;
    bsSkinScrollBar1: TbsSkinScrollBar;
    bsSkinEdit3: TbsSkinEdit;
    bsSkinMessage1: TbsSkinMessage;
    bsBusinessSkinForm1: TbsBusinessSkinForm;
    procedure bsSkinButton8Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  //  procedure bsSkinButton5Click(Sender: TObject);
    procedure bsSkinButton6Click(Sender: TObject);
   
    procedure FormCreate(Sender: TObject);
    procedure bsSkinButton7Click(Sender: TObject);
   // procedure bsSkinDBLookupComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  NewCarForm: TNewCarForm;
  dataIC,dataP,data2,data3,data4,data5,hexdata3,hexdataP,hexdataIC:Array[0..1000]of char;
  datamax:Array[0..1000]of char; //地址长度
  icdev: longint;
  st:smallint;
  length1:integer;  //字符长度
  offset:integer;  //偏移地址
  status:integer;
  offset1:integer;
  iswrite:boolean;

  source,dest:array[0..16]of char;
  function chk_24c64(icdev:longint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'chk_24c64';
  function swr_24c64(icdev: longint;offset:smallint;length:smallint;data1:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'swr_24c64';
  function srd_24c64(icdev: longint;offset:smallint;length:smallint;data1:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'srd_24c64';
   function auto_init(port: smallint;baud:longint): longint;stdcall;
  far;external 'MWIC_32.DLL' name 'auto_init';
  function ic_init(port: smallint;baud:longint): longint; stdcall;
  far;external 'MWIC_32.DLL' name 'ic_init';
  function ic_exit(icdev: longint):smallint;stdcall;
  far;external 'MWIC_32.dll' name 'ic_exit';
  function get_status(icdev: longint;status:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll' name 'get_status';

  function cmp_dvsc(icdev:longint;length:smallint;password:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll' name 'cmp_dvsc';
  function setsc_md(icdev: longint;mode:smallint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'setsc_md';
  function srd_dvsc(icdev: longint;length:smallint;password:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'srd_dvsc'
  function swr_dvsc(icdev: longint;length:smallint;password:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'swr_dvsc';

  function auto_pull(icdev: longint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'auto_pull';
  function srd_ver(icdev: longint;length:smallint;ver:pchar):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'srd_ver';
  function dv_beep(icdev: longint;time:smallint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'dv_beep';

  function asc_hex(asc:pchar;hex:pchar;len:smallint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'asc_hex';
  function hex_asc(hex:pchar;asc:pchar;len:smallint):smallint;stdcall;
  far;external 'MWIC_32.dll'name 'hex_asc';

  function ic_encrypt(key:pchar;source:pchar;len:smallint;dest:pchar):smallint;
  stdcall;far;external 'MWIC_32.dll'name 'ic_encrypt';
  function ic_decrypt(key:pchar;dest:pchar;len:smallint;source:pchar):smallint;
  stdcall;far;external 'MWIC_32.dll'name 'ic_decrypt';
  function writeIC(s2:string):string;//汉字转化字模
  function GetChineseLattice(ChineseText: String; out LatticeData: array of char; Style: Integer): Boolean; stdcall;far;external 'Lattices.dll'
  function mythreadIC(p:pointer):longint;stdcall;    //***检测读卡器连接线程

implementation
uses
 datamodel,mainUnit;

{$R *.dfm}

procedure TNewCarForm.bsSkinButton8Click(Sender: TObject);
begin
   close;
   
end;

procedure TNewCarForm.FormShow(Sender: TObject);
var
 adress,id:string;
 aListItem:TListItem;
 hthread:thandle;//定义一个句柄
 threadid:dword;
begin
      //*****连接数据库********
      datamodule1.carTable.Open;
      datamodule1.personTable.Open;
      datamodule1.Car_adressTable.Open;
      datamodule1.alarmAdressTable.Open;
       iswrite:=false;
      
       bsSkinEdit2.Text:='';
       bsSkinEdit1.Text:='';   //IC卡编号清空
       bsSkinListView2.Items.Clear;

   with  datamodule1.alarmAdressTable do     //Listview加入报警地址
      begin
           open;
           DisableControls;
           first;
           while not eof do
             begin
                id:=FieldByname('adressid').AsString;
                adress:=FieldByName('address').AsString;
                aListItem:=bsSkinListView2.Items.Add;
                aListItem.Caption:=id;
                aListItem.SubItems.Add(adress);
                next;
             end;
           EnableControls ;
           close;
      end;
     createthread(nil,0,@mythreadfunc,nil,0,threadid);    //***检测读卡器连接线程
   

end;
function mythreadIC(p:pointer):longint;stdcall;    //***检测读卡器连接线程
var
  dc:hdc;
begin
  dc:=getdc(NewCarform.handle);
  with newcarform   do
  begin
  //******调试串口************
   icdev:=auto_init(0,9600);  //初始化串口一,并将读写器波特率设置为9600
      st:=chk_24c64(icdev);           //检测是否24c64卡
         if st<>0 then
           begin
           bsSkinStatusPanel1.Caption:='读卡器未插入卡';
           mainform.bsSkinStatusPanel3.Caption:='读卡器未插入卡';
          end
        else
            bsSkinStatusPanel1.Caption:='读卡器已插卡成功';
            mainform.bsSkinStatusPanel3.Caption:='读卡器已插卡成功';

   releasedc(newcarform.handle,dc);
  end;
end;


 //保存数据
procedure TNewCarForm.bsSkinButton6Click(Sender: TObject);
var
i:integer;

begin

//*********判断输入编号是否3位******

     if length(bsSkinEdit1.Text)<>3 then
      begin
         newCarform.bsSkinMessage1.MessageDlg('请输入三位IC卡编号!',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
      end;
   {  if length(bssKinEdit4.Text)<>3 then
      begin
        newCarform.bsSkinMessage1.MessageDlg('请输入三位机器编号',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
      end; }
     if length(bssKinEdit3.Text)<>3 then
      begin
        newCarform.bsSkinMessage1.MessageDlg('请输入三位值班人员编号',mtError,[mbok],0);
          bsSkinEdit3.SetFocus;
          exit;
      end;


 //****判断IC卡编号是否重复**********
  with datamodule1.carQuery do
       begin
           close;
           sql.Clear;
           sql.Add('select * from carMIS where carid=:a');
           parameters[0].Value :=bsSkinEdit1.Text;
           open;
           if not eof then
            begin
                newCarform.bsSkinMessage1.MessageDlg('IC卡编号已存在,请重新输入!',mtError,[mbok],0);
                bsSkinEdit1.Text:='';
                bsskinEdit1.SetFocus;
                exit;
                
            end;
       end;
 //**判断人员是否重复************  

      with datamodule1.personQuery do
       begin
           close;
           sql.Clear;
           sql.Add('select * from personMIs where persionID=:a');
           parameters[0].Value :=bsSkinEdit3.Text;
           open;
           if not eof then
            begin
              newCarform.bsSkinMessage1.MessageDlg('人员编号已存在,请重新输入!',mtError,[mbok],0);
              exit;
            end;


         
       end;


 //****保存IC卡编号信息*********
          with datamodule1.carTable do                       //保存人员编号,报警编号
             begin
              open;
              append;
              FieldByName('carid').AsString:=bsSkinEdit1.Text;
              FieldByName('userid').AsString:=bsSkinEdit3.Text;
             // fieldByName('sid').AsString:=bsSkinEdit4.Text;
              FieldByname('date').AsDateTime:=date();
              post;
              end;

 //*****保存值班人员信息************
         with datamodule1.personTable do
                     begin
                     open;
                     append;
                     FieldByName('persionID').AsString:=bsSkinEdit3.Text;
                     FieldByName('Pname').AsString:=bsSkinEdit2.Text;
                     post;
                    end;


 //****保存地址编号****************
          for  i:=0 to bsSkinListView2.Items.Count-1 do      //保存报警地址.
          begin
             if bsSkinListView2.Items[i].Checked    then
              begin
                with datamodule1.Car_adressTable do
                 begin
                 open;
                 append;
                 FieldByname('carid').AsString:=bsSkinEdit1.Text;
                 FieldByname('adressid').AsString:=bsSkinListView2.Items[i].Caption;
                 FieldByName('adress').AsString:=bsSkinListView2.Items[i].SubItems.CommaText;
                 post;
                
               end;
              end;
           end;

         iswrite:=true;
         newCarform.bsSkinMessage1.MessageDlg('保存成功!',mtInformation,[mbok],0);

end;




procedure TNewCarForm.FormCreate(Sender: TObject);
begin
    //  st:=ic_exit(icdev);          //退出串口
end;
///*****写卡********
procedure TNewCarForm.bsSkinButton7Click(Sender: TObject);
var
 i,j,k,l,n,sdn,t:integer;
 sIC,sP,sd,strtext,s1,s2:string;
begin
        if not iswrite then
      begin
        newCarform.bsSkinMessage1.MessageDlg('注意!先保存再写卡',mtError,[mbok],0);
         bsSkinButton7.SetFocus;
          exit;
      end;
    //*********检测是否24c64卡 ********
       st:=chk_24c64(icdev);           
         if st<>0 then
           begin
            newcarForm.bsSkinMessage1.MessageDlg('读卡器未插卡!',mtError,[mbok],0);
            exit;
         end;
        if bsSkinEdit1.Text='' then                              //判断输入信息是否正确
      begin
        newCarForm.bsSkinMessage1.MessageDlg('IC卡编号不能为空!',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
      end;
     
        st:=chk_24c64(icdev);           //检测是否24c64卡
         if st<>0 then
           begin
           bsSkinStatusPanel1.Caption:='读卡器未插入卡';
           newCarForm.bsSkinMessage1.MessageDlg('读卡器未插入卡!',mtInformation,[mbok],0);
           mainform.bsSkinStatusPanel3.Caption:='读卡器未插入卡';
           exit;
          end
        else
            bsSkinStatusPanel1.Caption:='读卡器已插卡成功';
            
            mainform.bsSkinStatusPanel3.Caption:='读卡器已插卡成功';
//******写卡************
       offset:=0;       //IC卡偏移地址
       length1:=3;       //字符长度
       sIC:=bsSkinEdit1.Text;            //卡编号,
       sP:=bsSkinEdit4.Text;         // 机器编号
       for i:=0 to 2 do
          begin
           dataIC[i]:=sIC[i+1];
          end;
           for i:=0 to 2 do
         begin
           dataP[i]:=SP[i+1];
         end;

       st:=swr_24c64(icdev,offset,length1,dataIC); //写入IC卡编号,3位地址
       offset1:=3;
       st:=swr_24c64(icdev,3,length1,dataP); //写入人员编号号  3位地址
      for j:=0 to  bsSkinListView2.Items.Count-1 do
       begin
          if bsSkinListView2.Items[j].Checked  then
           begin
                sdn:=strtoint( bsSkinListView2.Items[j].Caption); // 读机器编号
                sd:= bsSkinListView2.Items[j].SubItems.CommaText; // 读机器名称
                s2:=inttostr(length(sd)div 2);                    //S2机器名称汉字个数
                strtext:=writeIC(sd);                             //得到汉字的16进制编码
                l:=length(strtext);
                n:=l div 2;                                       //求出汉字存放地址的长度
                datamax[0]:=s2[1];
                offset1:=1000+sdn*400-400;                       //存汉字个数
                st:=swr_24c64(icdev,offset1,1,datamax);
                for i:=0 to  length(strtext)-1  do
                 begin
                    data3[i]:=strtext[i+1];
                 end;
                 offset1:=1001+sdn*400-400;                     //存储汉字16*16编码
                 st:=asc_hex(data3,hexdata3,n);
                 st:=swr_24c64(icdev,offset1,n,hexdata3);

           end;

        end;

 ///*********判断是否写卡成功****************

       if st<>0 then
        begin
          newCarForm.bsSkinMessage1.MessageDlg('写卡失败,请重新写卡!',mtInformation,[mbok],0);
            exit;
        end
        else
         newCarForm.bsSkinMessage1.MessageDlg('写卡成功!',mtInformation,[mbok],0);
        // bsSkinEdit1.Text:='';
        // bsSkinEdit2.Text:='';
        // bsSkinEDIT3.Text:='';
         iswrite:=true;


end;
//*********将汉字转化字模***********
function writeIC(s2:string):string;       
var
  s1,s3,strtext:string;
  i,j,n:integer;
  LatticeData: array[1..32] of char;
  k, stemp:string;
  hzk16:file  of  char  ;
  count:longint;
  m:array[1..32]  of  char;
  r:integer;
begin
  with newCarform do
   begin
    assignfile(hzk16,'hzk16');
    FileMode  :=  0;
    reset(hzk16);
    strtext:='';
              r:=1;
                while r<length(s2) do
                 begin
                   k:=copy(s2,r,r+2);
                   j:=((ord(k[1])-161)*94+(ord(k[2])-161))*32;      //asci
                   seek(hzk16,j);
                   n:=1;
                  
                    for  count:=1  to  32  do
                        begin
                          read(hzk16,m[n]);                        //  将一个整数转换为16进制的字符串
                          stemp:=inttohex(ord(m[n]),2);
                          strtext:=strtext+stemp;
                          n:=n+1;
                        end;

                    r:=r+2;
                 end;

        writeIC:=strtext;

   end;
end;

end.

⌨️ 快捷键说明

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