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

📄 cust_unit.pas

📁 餐营的数据核算,模拟入库,出库,库存.对餐营的流程详细叙述
💻 PAS
字号:
unit CUST_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, StdCtrls, DBCtrls, DBCtrlsEh, Mask, Buttons, Tabenter,
  Grids, DBGridEh, ComCtrls, ToolWin, ExtCtrls,DB, ADODB,IniFiles;

type
   TarrChar=array of char;
  TCUST_Form = class(TForm)
    Splitter1: TSplitter;
    ToolBar1: TToolBar;
    tbbtnPrint: TToolButton;
    ToolButton3: TToolButton;
    tbbtnNewBill: TToolButton;
    tbbtnDeleteBill: TToolButton;
    tbbtnCommit: TToolButton;
    tbbtnRollback: TToolButton;
    ToolButton11: TToolButton;
    tbbtnPrior: TToolButton;
    ToolButton4: TToolButton;
    tbbtnNext: TToolButton;
    tbbtnLast: TToolButton;
    ToolButton5: TToolButton;
    tbbtnFirst: TToolButton;
    ToolButton23: TToolButton;
    tbbtnSearch: TToolButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    DBGridEh1: TDBGridEh;
    PageControl2: TPageControl;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    kEnterAsTab1: TkEnterAsTab;
    DBEditEh1: TDBEditEh;
    DBEditEh2: TDBEditEh;
    DBEditEh3: TDBEditEh;
    DBMemo1: TDBMemo;
    DBEditEh5: TDBEditEh;
    ilSmall: TImageList;
    ToolButton2: TToolButton;
    ToolButton6: TToolButton;
    DBDateTimeEditEh1: TDBDateTimeEditEh;
    Label4: TLabel;
    DBEditEh6: TDBEditEh;
    DBNumberEditEh2: TDBNumberEditEh;
    Label10: TLabel;
    DBNumberEditEh3: TDBNumberEditEh;
    Label9: TLabel;
    DBEdit1: TDBEdit;
    CustQry: TADOQuery;
    NUMQry: TADOQuery;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Panel1: TPanel;
    Edit1: TEdit;
    Label17: TLabel;
    Button1: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tbbtnNewBillClick(Sender: TObject);
    procedure tbbtnDeleteBillClick(Sender: TObject);
    procedure tbbtnCommitClick(Sender: TObject);
    procedure tbbtnRollbackClick(Sender: TObject);
    procedure tbbtnPriorClick(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure tbbtnNextClick(Sender: TObject);
    procedure tbbtnLastClick(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure tbbtnSearchClick(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure tbbtnFirstClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function BS(M:integer):integer;
    function HexToStr(AHex: String): String;
    function MyIntToHex(aNum, aLength: Integer): TarrChar;
    { Public declarations }
  end;

var
  CUST_Form: TCUST_Form;

implementation

uses MainUnit, DMUnit;

{$R *.dfm}

procedure TCUST_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=cafree;
end;

procedure TCUST_Form.FormDestroy(Sender: TObject);
begin
//CUST_FORM:=nil;
end;

procedure TCUST_Form.FormCreate(Sender: TObject);
begin
  with DM.CUST_ADOQ do
  begin
    Close;
    SQl.Clear;
    SQl.Add('SELECT * FROM CUST_ITEM');
    Open;
  end;
end;

procedure TCUST_Form.tbbtnNewBillClick(Sender: TObject);
begin
 DM.CUST_ADOQ.First;
end;

procedure TCUST_Form.tbbtnDeleteBillClick(Sender: TObject);
begin
 DM.CUST_ADOQ.Prior;
end;

procedure TCUST_Form.tbbtnCommitClick(Sender: TObject);
begin
  DM.CUST_ADOQ.Next;
end;

procedure TCUST_Form.tbbtnRollbackClick(Sender: TObject);
begin
  DM.CUST_ADOQ.Last;
end;

function TCUST_Form.BS(M: integer): integer;
begin
if M=0 then
begin
  DBEditEh1.Enabled:=True;
  DBEditEh2.Enabled:=True;
  DBEditEh3.Enabled:=True;
  DBEdit1.Enabled:=True;
  DBEditEh5.Enabled:=True;
  DBEditEh6.Enabled:=True;
  DBDateTimeEditEh1.Enabled:=True;
  DBNumberEditEh2.Enabled:=True;
  DBNumberEditEh3.Enabled:=True;
  DBMemo1.Enabled:=True;
end;
if M=1 then
begin
  DBEditEh1.Enabled:=false;
  DBEditEh2.Enabled:=false;
  DBEditEh3.Enabled:=false;
  DBEdit1.Enabled:=false;
  DBEditEh5.Enabled:=false;
  DBEditEh6.Enabled:=false;
  DBDateTimeEditEh1.Enabled:=false;
  DBNumberEditEh2.Enabled:=false;
  DBNumberEditEh3.Enabled:=false;
  DBMemo1.Enabled:=false;
end;
end;

procedure TCUST_Form.tbbtnPriorClick(Sender: TObject);
begin
  if DM.CUST_ADOQ.State in [DSBROWSE] then
     DM.CUST_ADOQ.Append;
     BS(0);
     DBEditEh1.SetFocus;
end;

procedure TCUST_Form.ToolButton4Click(Sender: TObject);
begin
  if DM.CUST_ADOQ.FieldByName('CUST_NO').AsString='0001' then Exit;
  if DM.CUST_ADOQ.State in [DSBROWSE] then
     DM.CUST_ADOQ.Edit;
     BS(0);
     DBEditEh1.SetFocus;
end;

procedure TCUST_Form.tbbtnNextClick(Sender: TObject);
begin
  if DM.CUST_ADOQ.FieldByName('CUST_NO').AsString='000000' then Exit;
  if Application.MessageBox('是否确认删除该员工信息?', '提示',
     MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = IDYES then
     DM.CUST_ADOQ.Delete;
end;

procedure TCUST_Form.tbbtnLastClick(Sender: TObject);
begin
  if (Trim(DBEditEh1.Text)='') then Exit;
  if DM.CUST_ADOQ.State in [DSINSERT,DSEDIT] then
     DM.CUST_ADOQ.Post;
     BS(1);
end;

procedure TCUST_Form.ToolButton5Click(Sender: TObject);
begin
  DM.CUST_ADOQ.Cancel;
  BS(1);
end;

procedure TCUST_Form.tbbtnSearchClick(Sender: TObject);
begin
Close;
end;
procedure TCUST_Form.ToolButton6Click(Sender: TObject);
var
  BSNO,BSNAME,BSDATE,BSMEMO1,BSMEMO2,PASS:String;
  i:integer;
begin
 { BSNO:=DBEditEh1.Text; //编号
  BSNAME:=DBEditEh2.Text;//姓名
  BSDATE:=DBDateTimeEditEh1.Text;//发卡日期

  BSMEMO2:=DBMemo1.Text;//备注2
  PASS:=DBEditEh6.Text;//口令
  //串口初始化
  Mifare_DLL_Handle:=  OpenCardReader(1,9600);

  //初始化读写信息数组检测卡片
   for i:=0 to 15 do
     begin
       pszData[i]:=Char(0);
     end;
   //开始检测卡片
   nResult:=QueryRFCard(Mifare_DLL_Handle,$52,pszData);
   if (nResult=255) or (nResult=256)then
   begin
    showMessage('检测卡片时通讯失败!');
    Exit;
   end
   else if(pszData[1]= char(8)) then
     showMessage('Mifare Standard ATQ卡')
   else ShowMessage('没有卡片!');

  //验证密匙
   for i:=0 to 5 do
     begin
       pszKey[i]:=$ff;
     end;
   //Byte型转为Char型
   for i:=0 to 5 do
     begin
       pszData[i]:=chr(pszKey[i]);
     end;
   //验证提交的密钥       验证第2扇区 A密钥
   nResult:=AuthenRFCard(Mifare_DLL_Handle,$60,2,@pszData[0]);
   //读写延时
   Sleep(100);
   if (nResult=0) then
   begin
     showMessage('验证密钥成功!');
   end
   else
   begin
     showMessage('验证密钥失败!');
   end; }
   //设定写卡信息内容
   {for i:=0 to 15 do
     begin
       pTempBuff[i]:=$AA;
     end;

   //Byte型转为Char型 }
  { for i:=0 to 20 do
     begin
       //pWriteBuff[i]:=Char(pTempBuff[i]);
       pWriteBuff[i]:=BSNAME[i];
     end;

   //写卡内容               写第2扇区第0块
   nResult:=WriteRFCard(Mifare_DLL_Handle,2,0,pWriteBuff);

   //读写延时
   Sleep(100);

   //写卡信息结果提示
   if (nResult=0) then
      begin
          showMessage('写卡信息成功!');
          Exit;
      end
   else if (nResult=255) or (nResult=256)then
       begin
          showMessage('写卡信息时通讯失败!');
          Exit;
       end
   else
       ShowMessage('写卡信息失败!'); }

end;

procedure TCUST_Form.ToolButton2Click(Sender: TObject);
var
  BSNO,BSNAME,BSDATE,BSMEMO1,BSMEMO2,PASS:String;
  i:integer;
begin
 { BSNO:=DBEditEh1.Text; //编号
  BSNAME:=DBEditEh2.Text;//姓名
  BSDATE:=DBDateTimeEditEh1.Text;//发卡日期
  
  BSMEMO2:=DBMemo1.Text;//备注2
  PASS:=DBEditEh6.Text;//口令
  //串口初始化
  Mifare_DLL_Handle:=  OpenCardReader(1,9600);

  //初始化读写信息数组检测卡片
   for i:=0 to 20 do
     begin
       pszData[i]:=Char(0);
     end;
   //开始检测卡片
   nResult:=QueryRFCard(Mifare_DLL_Handle,$52,pszData);
   if (nResult=255) or (nResult=256)then
   begin
    showMessage('检测卡片时通讯失败!');
    Exit;
   end
   else if(pszData[1]= char(8)) then
     showMessage('Mifare Standard ATQ卡')
   else ShowMessage('没有卡片!');

  //验证密匙
   for i:=0 to 5 do
     begin
       pszKey[i]:=$ff;
     end;
   //Byte型转为Char型
   for i:=0 to 5 do
     begin
       pszData[i]:=chr(pszKey[i]);
     end;
   //验证提交的密钥       验证第2扇区 A密钥
   nResult:=AuthenRFCard(Mifare_DLL_Handle,$60,2,@pszData[0]);
   //读写延时
   Sleep(100);
   if (nResult=0) then
   begin
     showMessage('验证密钥成功!');
   end
   else
   begin
     showMessage('验证密钥失败!');
   end;

   //读卡
   //初始化读卡信息数组
  // for i:=0 to 15 do
   //  pReadBuff[i]:=Char(0);
   //读卡信息到数组           读第2扇区第0块
   nResult:=ReadRFCard(Mifare_DLL_Handle,2,0,pReadBuff);
   //读写延时
     Sleep(100);
    // MessageBox(Handle, pReadBuff, '串口初始化',MB_ICONASTERISK or MB_OKCANCEL or MB_DEFBUTTON2);
   //读卡信息结果提示
     if (pReadBuff[0]=Char(0)) then
      begin
        showMessage('读卡信息成功!');
      end
     else if (nResult=255) or (nResult=256) then
       begin
          showMessage('读卡信息时通讯失败!');
          Exit;
       end
     else
       ShowMessage('读卡信息失败!');  }
end;

function TCUST_Form.HexToStr(AHex: String): String;
var
  I: Integer;
  J: Byte;
  R: String;
begin
  J:= 0;
  R:= '';
  for I:=1 to (Length(AHex) div 2) do
  begin
    if (AHex[2 * I - 1] >= 'A') and (AHex[2 * I - 1] <= 'F') then
      J:= J * 16 + (Byte(Char(AHex[2 * I - 1]))-55)
    else
      J:= J * 16 + StrToInt(AHex[2 * I - 1]);
    if (AHex[2 * I] >= 'A') and (AHex[2 * I] <= 'F') then
      J:= J * 16 + (Byte(Char(AHex[2 * I]))-55)
    else
      J:= J * 16 + StrToInt(AHex[2 * I]);
    R:= R + Char(J);
  end;
  Result:= TrimRight(R);
end;

procedure TCUST_Form.tbbtnFirstClick(Sender: TObject);
var
 p:array[0..5] of char;
 i,j:integer;
 S:string;
 //定义变量
 CUST_NO,CUST_AGE,CUST_PASS,CUST_CZZS,CUST_CZQX:string;
 Cust:array [0..9999] of char;
 NUM:TarrChar;
 index:integer;
begin
  if Trim(Edit1.Text)='' then
  begin
    ShowMessage('请先查询再下传数据!');
    Exit;
  end;
  for i:=0 to 9999 do
    Cust[i]:=char(0);
    Index:=0;
  with NUMQry do
  begin
    Close;
    SQl.Clear;
    SQL.Add('SELECT COUNT(*) FROM Cust_Item WHERE CUST_PASS='''+Edit1.Text+'''');
    Open;
  end;
  Num:=MYINTTOHEX(NUMQry.Fields[0].AsInteger,2);
  S:='';

  Result:=POS_Comm_Start(1);
  if Result=0 then
    ShowMessage('通讯成功')
  else
  begin
    ShowMessage(' 通讯失败'+inttostr(Result));
    Exit;
  end; 
  CUST_AGE:='A001';
  S:=S+CUST_AGE;
  CUST[0]:=#0;
  index:=1;
  for j:=index to Length(S) do
    Cust[j]:=Char(S[j]);
    index:=j;
    S:='';
  for j:=index to index+length(NUM)-1 do
   Cust[j]:=char(NUM[j-Index]);
   index:=j;
  with CustQry do
  begin
    Close;
    SQL.clear;
    SQL.add('SELECT CUST_NO,CUST_PASS,CUST_CZQX FROM CUST_ITEM WHERE CUST_PASS='''+Edit1.text+'''');
    Open;
  end;
  CustQry.first;
  while not CustQry.Eof do
  begin
    CUST_NO:=CustQry.Fields[0].Asstring; //编号
    CUST_PASS:=CustQry.Fields[1].Asstring;//口令
    CUST_CZQX:=CustQry.Fields[2].Asstring;//打印权限
    S:=CUST_NO+CUST_PASS+CUST_CZQX;
    for j:=index to index+length(S)-1 do
     Cust[j]:=char(S[j-Index+1]);
     index:=j;
     S:='';
    CustQry.Next;
  end;
  Result:=1;
  Result:=POS_DownLoad_Data(1,@Cust[1],index-1);
  if Result=0 then
  begin
    ShowMessage('操作员数据下传成功!');
    POS_Comm_End();
  end
  else
  begin
    ShowMessage('操作员数据下传失败!');
    Exit;
  end;
end;
function TCUST_Form.MyIntToHex(aNum, aLength: Integer): TarrChar;
var
  s:string;
  i:Integer;
begin
  setLength(Result,aLength);
  s:= inttoHex(aNum,aLength*2);
  for i:=0 to aLength-1 do
  begin
    Result[i]:=chr(strToInt('$'+copy(s,i*2+1,2)));
  end;
end;

procedure TCUST_Form.Button1Click(Sender: TObject);
var
  T:string;
begin
  T:='SELECT * FROM CUST_ITEM WHERE 2>1';
  if Trim(Edit1.Text)<>'' then
   T:=T+' and CUST_pass ='''+Edit1.text+'''';
  with DM.CUST_ADOQ do
  begin
    Close;
    Sql.clear;
    SQl.add(T);
    Open;
  end;
end;

end.

⌨️ 快捷键说明

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