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

📄 card.cpp

📁 停车场用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Card.h"
#include "servermodule.h"
#include "option.h"
#include "dido.h"
#include "Param.h"
#include "gridtool.h"
#include "bdbf.h"
#include "editcard.h"
#include "delesome.h"
#include "dido.h"
#include "InqCard.h"
#include "DataProc.h"
#include "dynamic.h"
#include "Cbuilder.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
//设置编辑、链表
static void SetEditText(TCardForm *ta);
//设置编辑格栅的列宽度
static void SetTextDBGridWith(TDBGrid *pDBGrid);
//刷卡机排序
static int SortCardOnTList(void *pHead,int nIndex);
 //比较刷卡机节点
static int CompCardDot(void *p1,void *p2);
//获取相同内容的其它记录(0=>无,1=>其它记录)
static int GetOtherCardOnTable(CARDDATA *Sour,int nOld);

//获取相同内容的其它记录(0=>无,1=>其它记录)
static int GetOtherCardOnTable(TADOQuery *pQuery,CARDDATA *Sour,int nOld);

//设置刷卡控制器
static void SetCRCoBox(TComboBox *pBox);
//设置刷卡读卡机
static void SetReaderCoBox(TComboBox *pBox,int nCRNo);
//设置卡片类型
static void SetCardTypeCoBox(TComboBox *pBox);

//刷卡识别处理(若数据未经处理,则返回FALSE)
static int ReadCardProc(void *pIORec);
//根据设定生成卡片数据
static int GetCardDataOnForm(TCardForm *pForm,CARDDATA *pCard);
//根据设定卡片起始编号
static int SetCardNoOnForm(TCardForm *pForm,int nCardNo);

//删除当前一条记录
static int DeleteOneCurCard(TADOQuery *pCardQuery);
//删除一些卡片
static int DeleteSomeCard(TADOQuery *pCardQuery,int nCardNo1,int nCardNo2);
//删除前,确认卡片是否被领用
static int GetCardFreeBeforeDelete(CARDDATA *pCard);

//设置查询编辑框
static void SetInquireText(TCardForm *ta);

static TCardForm *pCardForm;
//---------------------------------------------------------------------------
__fastcall TCardForm::TCardForm(TComponent* Owner)
        : TForm(Owner)
{
  pCardForm=this;
  m_nDone=0;
}
void __fastcall TCardForm::FormDestroy(TObject *Sender)
 {
  m_PauseButClick(Sender);
  pCardForm=NULL;
 }
//设置感应卡片
int SetCardData(TObject *Owner)
 {
  TCardForm *se;
  int rc;

  rc=FALSE;
  se = new TCardForm((TComponent*)Owner);
  if(se!=NULL){
    SetEditText(se);
    se->ShowModal();
    rc=se->m_nDone;
    delete se;
   }
  return(rc);
 }
//查询感应卡片
int InquireCardData(TObject *Owner)
 {
  TCardForm *se;
  int rc;

  rc=FALSE;
  se = new TCardForm((TComponent*)Owner);
  if(se!=NULL){
    SetInquireText(se);
    se->ShowModal();
    delete se;
    rc=TRUE;
   }
  return(rc);
 }
//设置查询编辑框
void SetInquireText(TCardForm *ta)
 {
  TADOQuery *pQuery;

  ta->m_nHex=0;
  ta->m_CardFormatCoBox->ItemIndex=0;

  ta->m_ReadPanel->Hide();
  ta->m_DelBut->Enabled=FALSE;
  ta->m_AddBut->Enabled=FALSE;
  ta->m_EditBut->Enabled=FALSE;

  //用EditADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetEditQuery();
  ta->m_CardDataSource->DataSet = pQuery;
  ta->m_InqButClick(ta->m_InqBut);
 }

//设置编辑、链表
void SetEditText(TCardForm *ta)
 {
  TADOQuery *pQuery;

  ta->m_nHex=0;
  ta->m_CardFormatCoBox->ItemIndex=0;

  //用EditADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetEditQuery();
  ta->m_CardDataSource->DataSet = pQuery;
  if(pQuery==NULL){
    ta->m_DelBut->Enabled=FALSE;
    ta->m_AddBut->Enabled=FALSE;
    ta->m_EditBut->Enabled=FALSE;
   }
  else  ta->m_TextDBGridTitleClick(ta->m_TextDBGrid->Columns->Items[0]);

  //设置刷卡识别的控件
  SetCRCoBox(ta->m_CRCoBox);//设置刷卡控制器
  SetCardTypeCoBox(ta->m_CardTypeCoBox);//设置卡片类型
  ta->m_CRCoBoxChange(ta->m_CRCoBox);//刷卡控制器变化
  ta->m_PauseBut->Enabled=FALSE;
 }
//设置刷卡控制器
void SetCRCoBox(TComboBox *pBox)
 {
  void *pHead,*pCur;
  CONTROLER *pCR;
  char szBuf[50],szStr[50];
  int i;

  pBox->Items->Clear();
  pHead = GetControlerList(); //获取本地控制器
  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;
    pCR = LookControler(pCur);
    GetCRNameText(szStr,pCR);
    wsprintf(szBuf,"%d: %s",pCR->nCRNo,szStr);
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=0;
 }
//设置刷卡读卡机
void SetReaderCoBox(TComboBox *pBox,int nCRNo)
 {
  CONTROLER *pCR;
  void *pHead;
  int i,n,nRoads;
  WORD *pRoadNo;
  char szBuf[50],szStr[50];

  pBox->Items->Clear();
  pHead = GetControlerList(); //获取本地控制器
  pCR = (CONTROLER *)GetCROnListWithNo(pHead,nCRNo);//根据编号获取控制器
  if(pCR!=NULL){
    nRoads = pCR->nRoads;
    pRoadNo = pCR->wzRoadNo;
   }
  else nRoads=0;
  for(i=0;i<nRoads;i++){  //获取车道名称文本
    n = pRoadNo[i];
    GetRoadwayNameText(szStr,n);
    wsprintf(szBuf,"%d: %s",n,szStr);
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=0;
 }
//设置卡片类型
void SetCardTypeCoBox(TComboBox *pBox)
 {
  int i;
  char szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    GetCardTypeStr(szBuf,i);
    if(szBuf[0]==0)break;
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=0;
 }
//刷卡控制器变化
void __fastcall TCardForm::m_CRCoBoxChange(TObject *Sender)
{
 int nCRNo;

 nCRNo = atoi(m_CRCoBox->Text.c_str());
 SetReaderCoBox(m_ReaderCoBox,nCRNo);
}
//---------------------------------------------------------------------------
void __fastcall TCardForm::m_CloseButClick(TObject *Sender)
 {
  ModalResult=IDOK;
}
//刷卡机排序
int SortCardOnTList(void *pHead,int nIndex)
 {
  nIndex=SortDotOnTList(pHead,nIndex,CompCardDot);
  return(nIndex);
 }
 //比较刷卡机节点
int CompCardDot(void *p1,void *p2)
 {
  int m,n;

  m = (int)LookCardData(p1)->nCardNo;
  n = (int)LookCardData(p2)->nCardNo;

  return(m-n);
 }
//设置编辑格栅的列宽度
void SetTextDBGridWith(TDBGrid *pDBGrid)
 {
 int i,m,n,nWidth;
 int x[10];

  nWidth = pDBGrid->ClientRect.Width()-10;
  n = pDBGrid->Columns->Count;
  ZeroMemory(x,sizeof(x));

  x[0]=55; x[1]=140; x[2]=140; x[3]=55;
  for(i=m=0;i<n;i++){
    nWidth -= x[i]+1;
    if(x[i]!=0)m++;
   }
  m = n-m;
  if(m>1)nWidth = (nWidth-2) / m;
  for(i=0;i<n;i++)
    if(x[i]==0)x[i]=nWidth;
  for(i=0;i<n;i++)
   pDBGrid->Columns->Items[i]->Width=x[i];
 }

void __fastcall TCardForm::FormResize(TObject *Sender)
{
//设置编辑格栅的列宽度
  SetTextDBGridWith(m_TextDBGrid);
}
//---------------------------------------------------------------------------
void __fastcall TCardForm::m_TextDBGridDrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
 static char *pszFormat[]={"%10u-%010u","%10u","%08X-%08X","%08X"};
 CARDDATA a;
 TDataSet *pQuery;
 int m,n,nFormat;
 char szBuf[50],*p;

  pQuery = m_CardDataSource->DataSet;
  if(pQuery->IsEmpty())return;

  if(DataCol==1){
    ReadCardRecord(pQuery,&a);
    m=a.nCardHI;n = a.nCardID;//内码
    nFormat = m_nHex<<1;
    if(m!=0)
      wsprintf(szBuf,pszFormat[nFormat],m,n);
    else if(n!=0)wsprintf(szBuf,pszFormat[nFormat+1],n);
    else szBuf[0]=0; //未分配内码
    SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
  }
 else if(DataCol==2){//卡片类型
    ReadCardRecord(pQuery,&a);
    p = GetCardType(a.nType);
    SetDBGridText(Sender,Rect,Column,p);//设置DB格栅文字
  }
 else if(DataCol==3){//持卡人编号
    ReadCardRecord(pQuery,&a);
    GetNumberText(szBuf,a.nHolderNo);
    SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
  }
 else if(DataCol==4){//生效日期
    ReadCardRecord(pQuery,&a);
    GetDWORDDateText(szBuf,a.nBeginDate);
    SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
  }
 else if(DataCol==5){//截止日期
   ReadCardRecord(pQuery,&a);
   GetDWORDDateText(szBuf,a.nEndDate);
   SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
  }
 else if(DataCol==6){//卡片状态
   ReadCardRecord(pQuery,&a);
   p = GetCardStatusText(&a);
   SetDBGridText(Sender,Rect,Column,p);//设置DB格栅文字
  }
}

void __fastcall TCardForm::m_CardFormatCoBoxChange(TObject *Sender)
{
 m_nHex = m_CardFormatCoBox->ItemIndex;
 if(m_nHex>1)m_nHex=0;
 m_CardDataSource->DataSet->DisableControls();
 m_CardDataSource->DataSet->EnableControls();
}
//---------------------------------------------------------------------------

void __fastcall TCardForm::m_EditButClick(TObject *Sender)
 {
  TADOQuery *pQuery;
  CARDDATA a;
  int rc,nCount;

  pQuery = (TADOQuery *)m_CardDataSource->DataSet;
  ReadCardRecord(pQuery,&a);
  rc = (int)pQuery;
  nCount = GetRecordIDOnTable(pQuery);
 // nCount = GetCurRecno(pQuery);//获取当前记录号
  while(rc){
    rc=ReworkCard(this,&a,1);
    if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
      if(GetOtherCardOnTable(&a,nCount)==FALSE)
        break; //没有重复
     }
   }
  if(rc){
    rc=EditDataSet(pQuery);
    if(rc)SaveCardRecord(pQuery,&a);
    if(rc)rc=PostDataSet(pQuery);
    if(!rc)ShowTableError(1);
   }
 }

void __fastcall TCardForm::m_AddButClick(TObject *Sender)

⌨️ 快捷键说明

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