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

📄 maintain.cpp

📁 停车场用
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <math.h>
#pragma hdrstop

#include "Maintain.h"
#include "option.h"
#include "servermodule.h"
#include "param.h"
#include "datetool.h"
#include "dido.h"
#include "bdbf.h"
#include "CBuilder.h"
#include "right.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

//检查用户数据
static int CheckUserData(USERDATA *pUser,int nMode);
//设置编辑、链表
static void SetEditText(TMaintainForm *ta,USERDATA *pUser,int nMode);
//显示当前记录
static void ShowCurRecord(TMaintainForm *te,USERDATA *t);
//显示更新记录
static void ShowNewRecord(TMaintainForm *te,USERDATA *t);
//显示未被领用或被自身领用的卡片
static void SetNewCardNoCoBox(TMaintainForm *te,USERDATA *t);
//根据类型设置子窗口状态
static void SetChildControl(TMaintainForm *te,int nMode);
//设置编辑、链表
static int GetEditText(TMaintainForm *ta,USERDATA *pUser,int nMode);

//---------------------------------------------------------------------------
__fastcall TMaintainForm::TMaintainForm(TComponent* Owner)
        : TForm(Owner)
{
}
//维护用户帐号
int MaintainUserData(TComponent* Owner,void *pUser,int nMode)
 {
  TMaintainForm *se;
  int rc;

  rc=CheckUserData((USERDATA *)pUser,nMode);
  if(rc){
    rc=FALSE;
    se = new TMaintainForm((TComponent*)Owner);
    if(se!=NULL){
      SetEditText(se,(USERDATA *)pUser,nMode);
      if(se->ShowModal()==mrOk)
        rc=GetEditText(se,(USERDATA *)pUser,nMode);
      delete se;
     }
   }
  return(rc);
 }
//检查用户数据
int CheckUserData(USERDATA *pUser,int nMode)
 {
  static char *pszText[]={"未建立用户帐号!",
     "领用新卡片前, \n\n必须先挂失或注销原领用卡片!",
     };
  int n,nStatus;
  int rc;

  n=0;
  rc=pUser->nHolderNo;
  if(rc){
    n = pUser->nCardNo;
    //原卡片未注销或挂失
    nStatus = GetUserPauseFlag(pUser);
    if(nMode==0 && n!=0 && nStatus==0)
     { n=1; rc=FALSE;}
   }
  if(rc==FALSE){
    MessageBeep(MB_ICONSTOP);
    Application->MessageBox(pszText[n],GetMainTitle(),
                MB_OK|MB_ICONHAND|MB_APPLMODAL);
   }
  return(rc);
 }
//设置编辑、链表
void SetEditText(TMaintainForm *te,USERDATA *pUser,int nMode)
 {
  ShowCurRecord(te,pUser);//显示当前记录
  ShowNewRecord(te,pUser); //显示更新记录
  SetChildControl(te,nMode);//根据类型设置子窗口状态
  if(nMode==0)//领用卡片
    SetNewCardNoCoBox(te,pUser);
 }
//显示当前记录
void ShowCurRecord(TMaintainForm *te,USERDATA *t)
 {
  char szBuf[30];

   te->m_UserNameEdit->Text=t->szUserName;
   te->m_CarTypeEdit->Text=t->szCarType;
   te->m_CarTagEdit->Text=t->szCarTag;

   GetNumberText(szBuf,t->nCardNo);//获取编号文本
   te->m_CardNoEdit->Text=szBuf;

   GetNumberText(szBuf,t->nHolderNo);//获取编号文本
   te->m_HolderNoEdit->Text=szBuf;

   GetUserTypeText(szBuf,t->nUserType);
   te->m_UserTypeEdit->Text=szBuf;

   GetDWORDDateText(szBuf,t->nBeginDate);//获取长整数日期文本
   te->m_BeginDateEdit->Text=szBuf;

   GetDWORDDateText(szBuf,t->nEndDate);//获取长整数日期文本
   te->m_EndDateEdit->Text=szBuf;

   sprintf(szBuf,"%-9.2f",t->fMoney);
   te->m_MoneyEdit->Text=szBuf;

   szBuf[0]=0;
   te->m_StateEdit->Text=GetUserStatusText(t);
 }
//显示更新记录
void ShowNewRecord(TMaintainForm *te,USERDATA *t)
 {
  char szBuf[50];
  int n;

  GetNumberText(szBuf,t->nCardNo);//获取编号文本
  te->m_NewCardNoCoBox->Text=szBuf;

  te->m_NewBeginDTP->Date=DWORDToTDate(t->nBeginDate);

  te->m_NewEndDTP->Date=DWORDToTDate(t->nEndDate);

  szBuf[0]=0;
  te->m_NewMoneyEdit->Text=szBuf;
 }
//显示未被领用或被自身领用的卡片
void SetNewCardNoCoBox(TMaintainForm *te,USERDATA *t)
 {
  TComboBox *pBox;
  int i,rc,nRec;
  TADOQuery *pQuery;
  CARDDATA a;
  char szBuf[50];

  pBox = te->m_NewCardNoCoBox;
  pBox->Items->Clear();

  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  rc=(int)pQuery;
  if(rc){//查找未被领用或被自身领用的卡片
    wsprintf(szBuf,"HOLDERNO=%d OR HOLDERNO=0",t->nHolderNo);
    nRec=QueryOneADOTable(pQuery,GetCardTableName(),szBuf,"CARDNO");
   }
  else nRec = 0;
  for(i=0;rc && i<nRec && i<200;i++){
    ReadCardRecord(pQuery,&a); //读取感应卡片
    if(a.nHolderNo!=0)
      wsprintf(szBuf,"%-4d (%d)",a.nCardNo,a.nHolderNo);
    else wsprintf(szBuf,"%-4d",a.nCardNo);
    pBox->Items->Add(szBuf);
    rc=NextDataSet(pQuery);
   }
 }
//根据类型设置子窗口状态
void SetChildControl(TMaintainForm *te,int nMode)
 {
  static char pszTitle[]="用户帐号维护 - ",
     *pszText[]={"领用感应卡片","变更有效日期","追加金额储备"};
  char szBuf[50];

  SetChildState(te,100,110,SW_SHOWNA);//设置子窗口为不活动状态
  if(nMode==0){//领用卡片
    te->m_NewCardNoLabel->Enabled=TRUE;
    te->m_NewCardNoCoBox->Enabled=TRUE;
   }
  else if(nMode==1){//有效日期
    te->m_NewBeginLabel->Enabled=TRUE;
    te->m_NewBeginDTP->Enabled=TRUE;
    te->m_NewEndLabel->Enabled=TRUE;
    te->m_NewEndDTP->Enabled=TRUE;
   }
  else if(nMode==2){//充值
    te->m_NewMoneyLabel->Enabled=TRUE;
    te->m_NewMoneyEdit->Enabled=TRUE;
   }
  //设置窗口标题
  lstrcpy(szBuf,pszTitle);
  if(nMode>=0 && nMode<sizeof(pszText)/sizeof(char *))
    lstrcat(szBuf,pszText[nMode]);
  te->SetTextBuf(szBuf);
 }
//设置编辑、链表
int GetEditText(TMaintainForm *te,USERDATA *pUser,int nMode)
 {
  static char pszAddMoney[]="车主用户追加金额";
  int rc;
  DWORD nCardNo,nDate1,nDate2;
  float f;

  rc=FALSE;
  nCardNo=atoi(te->m_NewCardNoCoBox->Text.c_str());
  if(nCardNo==0 && pUser->nCardNo!=0)//原已领用卡时,则必须有卡
    nCardNo = pUser->nCardNo;
  nDate1 = TDateToDWORD(te->m_NewBeginDTP->Date);
  nDate2 = TDateToDWORD(te->m_NewEndDTP->Date);
  f = atof(te->m_NewMoneyEdit->Text.c_str());
  f=pUser->fMoney+f;
  if(f<1.0e-2f)f=0.0f;
  //领用卡片,有效日期
  if(nCardNo!=pUser->nCardNo
      || nDate1 != pUser->nBeginDate || nDate2!=pUser->nEndDate
      || f>1.0e-2f)
   {
     rc=TRUE;
     pUser->nCardNo=nCardNo;
     pUser->nBeginDate=nDate1;
     pUser->nEndDate=nDate2;
     pUser->fMoney=f;
     GetUserNewStatus(pUser);//获取最新状态
   }
  if(rc){
    if(nMode<2)//领用卡片,有效日期,保存用户部分资料到卡片表中
      rc=SaveUserDataToCardTable(pUser);
    else if(nMode==2)//有效充值,保存充值金额
      rc=SaveMoneyToTable(pUser,f,pszAddMoney);
   }
  return(rc);
 }
//保存用户部分资料到卡片表中
int SaveUserDataToCardTable(void *pUser)
 {
  static char pszText[]="不存在卡号为 \"%d\" 的卡片资料!";
  int rc;
  TADOQuery *pQuery;
  CARDDATA a;
  USERDATA *t;
  char szBuf[100];
  DWORD nCardNo;

  t = (USERDATA *)pUser;
  nCardNo = t->nCardNo;
  if(nCardNo==0)return(TRUE);

  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  wsprintf(szBuf,"CARDNO=%d",nCardNo);
  rc=QueryOneADOTable(pQuery,GetCardTableName(),szBuf,NULL);
  if(rc>0){
    ReadCardRecord(pQuery,&a); //读取感应卡片
    a.nBeginDate=t->nBeginDate;
    a.nBeginDate=t->nBeginDate;
    if(GetUserHoldFlag(t))//用户已领用卡片
       a.nHolderNo = t->nHolderNo;
    else   a.nHolderNo=0;

    rc=GetUserPauseFlag(t);//卡片暂停使用
    SetCardPauseFlag(&a,rc);

    GetCardNewStatus(&a);//获取卡片最新状态

    rc=EditDataSet(pQuery);
    if(rc)SaveCardRecord(pQuery,&a);
    if(rc)rc=PostDataSet(pQuery);
    if(!rc)ShowTableError(1);
   }
  else if(rc==0){
    wsprintf(szBuf,pszText,nCardNo);
    MessageBeep(MB_ICONSTOP);
    Application->MessageBox(szBuf,GetMainTitle(),
                MB_OK|MB_ICONHAND|MB_APPLMODAL);
   }
  else rc=FALSE;
  return(rc);
 }

void __fastcall TMaintainForm::m_OkButClick(TObject *Sender)
{
 ModalResult = mrOk;
}

//保存交费金额到金额表中
int SaveMoneyToTable(void *pUser,float fMoney,char *pszRemark)
 {
  int rc;
  TADOQuery *pQuery;
  DWORD nCardNo,nHolderNo;
  int nUserType;

  if(pUser!=NULL){
    nCardNo = ((USERDATA *)pUser)->nCardNo;
    nHolderNo = ((USERDATA *)pUser)->nHolderNo;
    nUserType = ((USERDATA *)pUser)->nUserType;
   }
  else { nCardNo = 0;  nHolderNo = 0; nUserType = 0;}

  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  rc=QueryOneADOTable(pQuery,GetMoneyTableName(),NULL,NULL);
  if(rc>=0) rc=AppendDataSet(pQuery);
  else rc=FALSE;
  if(rc){
    SetCurDataSet(pQuery);
    SetFieldText("Operator",GetCurAccName());//获取当前帐号名;
    SetFieldText("REMARK",pszRemark);//备注
    SetFieldInt("CARDNO",nCardNo);
    SetFieldInt("HOLDERNO",nHolderNo);
    SetFieldInt("USERTYPE",nUserType);
    SetFieldDouble("MONEY",fMoney);
    SetFieldDouble("PAYTIME",Now());
   }
  if(rc)rc=PostDataSet(pQuery);
  if(!rc)ShowTableError(0);
  return(rc);
 }

⌨️ 快捷键说明

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