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

📄 param.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Param.h"
#include "dido.h"
#include "bdbf.h"
#include "datetool.h"
#include "servermodule.h"
#include "dynamic.h"

#pragma package(smart_init)
//读记录函数
typedef int (* READPROC)(TDataSet *pQuery,void *pText);
//写记录函数
typedef int (* SAVEPROC)(TDataSet *pQuery,void *pText);
//写记录函数
typedef int (* PARAMSAVEPROC)(TDataSet *pQuery,void *pText,DWORD lParam);

 //从查询表中读取链表
static int ReadTableTList(void *pHead,char *pszTable,READPROC Fun,
       int nSize,char *pszWhere,char *pszOrder);

//保存链到数据表
#define SaveTableTList(pHead,pszTable,Fun) \
     SaveTableTListWithParam(pHead,pszTable,Fun,NULL,0,0)

//保存链到数据表(带条件和参数)
static int SaveTableTListWithParam(void *pHead,char *pszTable,SAVEPROC Fun,
    char *pWhere,DWORD lParam,int nHaveMode);

//读取所有帐号
int ReadAllAccount(void *pHead)
 {
  static char pszWhere[]="LEVEL<256";
  int rc;
   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetAccountTableName(),ReadAccountRecord,
           sizeof(ACCOUNT),pszWhere,NULL);
  return(rc);
 }

//保存所有帐号
int SaveAllAccount(void *pHead)
 {
  static char pszWhere[]="LEVEL<256";
  int rc;

  //保存链到数据表(带条件和参数)
  rc=SaveTableTListWithParam(pHead,GetAccountTableName(),SaveAccountRecord,
        pszWhere,NULL,FALSE);
  return(rc);
 }
//读取所有系统密码
int ReadAllSysPassword(void *pHead)
 {
  static char pszWhere[]="LEVEL>256";
  int rc;

   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetAccountTableName(),ReadAccountRecord,
           sizeof(ACCOUNT),pszWhere,NULL);
  return(rc);
 }
//保存所有系统密码
int SaveAllSysPassword(void *pHead)
 {
  static char pszWhere[]="LEVEL>256";
  static char pszName[]="(SystemPassword)";
  void *pCur;
  ACCOUNT *t;
  int i,rc;

  for(i=0; ;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;

    t = LookAccount(pCur);
    t->nLevel = MAKEWORD(t->nLevel,100);
    lstrcpy(t->szName,pszName);
   }
//保存链到数据表(带条件和参数)
  rc=SaveTableTListWithParam(pHead,GetAccountTableName(),SaveAccountRecord,
        pszWhere,NULL,FALSE);
  return(rc);
 }
//读取用户收费类型
int ReadAllPrice(void *pHead)
 {
  int rc;
   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetPriceTableName(),ReadPriceRecord,
           sizeof(PRICEDATA),NULL,NULL);
  return(rc);
 }
//保存用户收费类型
int SaveAllPrice(void *pHead)
 {
  int rc;
//保存链表到查询表
  rc=SaveTableTList(pHead,GetPriceTableName(),SavePriceRecord);
  return(rc);
 }
//读取所有车道
int ReadAllRoadway(void *pHead)
 {
  int rc;
   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetRoadwayTableName(),ReadRoadwayRecord,
           sizeof(ROADWAY),NULL,NULL);
  return(rc);
 }
//保存所有车道
int SaveAllRoadway(void *pHead)
 {
  int rc;
//保存链表到查询表
  rc=SaveTableTList(pHead,GetRoadwayTableName(),SaveRoadwayRecord);
  return(rc);
 }
//读取控制器
int ReadAllControler(void *pHead)
 {
  int rc;
   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetControlerTableName(),ReadControlerRecord,
           sizeof(CONTROLER),NULL,NULL);
  return(rc);
 }
//保存控制器
int SaveAllControler(void *pHead)
 {
  int rc;
//保存链表到查询表
  rc=SaveTableTList(pHead,GetControlerTableName(),SaveControlerRecord);
  return(rc);
 }
//读取所有停车场
int ReadAllPark(void *pHead)
 {
  int rc;
   //从查询表中读取所有链表
  rc=ReadTableTList(pHead,GetParkTableName(),ReadParkRecord,
           sizeof(CONTROLER),NULL,NULL);
  return(rc);
 }
//保存所有停车场
int SaveAllPark(void *pHead)
 {
  int rc;
//保存链表到查询表
  rc=SaveTableTList(pHead,GetParkTableName(),SaveParkRecord);
  return(rc);
 }

//从查询表中读取链表
int ReadTableTList(void *pHead,char *pszTable,READPROC Fun,
       int nSize,char *pszWhere,char *pszOrder)
 {
  static char pszText[]="读取系统参数";
  TADOQuery *pQuery;
  void *pCur;
  int i,rc,nRec;

  rc=TRUE;
  DelTList(pHead);
  pQuery = (TADOQuery *)GetOtherQuery();
  nRec = QueryOneADOTable(pQuery,pszTable,pszWhere,pszOrder);//查询一个表
  for(i=0;i<nRec&&rc!=FALSE;i++){
    pCur=AddContentToTList(pHead,NULL,nSize);//增加内容到TList链末尾
    if(pCur){
      Fun(pQuery,ListContent(pCur));
      rc=NextDataSet(pQuery);
     }
    else { ShowNotMemory(pszText);rc=FALSE;}
   }
  return(i);
 }
//保存链表到数据表
int SaveTableTListWithParam(void *pHead,char *pszTable,SAVEPROC Fun,
         char *pszWhere,DWORD lParam,int nHaveParam)
 {
  TADOQuery *pQuery;
  void *pCur;
  int i,rc;

  pQuery = (TADOQuery *)GetOtherQuery();
  rc=EmptyOneADOTable(pQuery,pszTable,pszWhere);
  if(rc){
    rc=QueryOneADOTable(pQuery,pszTable,NULL,NULL);
    if(rc>=0)rc=TRUE;  else rc=FALSE;
   }
  if(rc<=0)return(-1); //数据库不存在

  for(i=0;rc!=FALSE;i++){
    pCur =GetDotOnTList(pHead,i);//获取TList链上的节点(From "0")
    if(pCur==NULL)break;

    rc= AppendDataSet(pQuery);//添加空记录
    if(rc){
      if(nHaveParam==FALSE) Fun(pQuery,pCur);
      else  ((PARAMSAVEPROC)Fun)(pQuery,pCur,lParam);
      rc=PostDataSet(pQuery);//使操作有效
     }
   }
  return(i);
 }

#define PASSCHAR 0x05
#define PASSINT 0x1e65087f
static char pszNoPass[]="#@!~\t";//无密码
//将密文转化为Ascii
int PasswordToAscii(char *pszBuf)
 {
  char szStr[50];
  int i,j,m,n,nLen;

  nLen = lstrlen(pszBuf);
  for(i=0;i<nLen;i++)
    if(pszBuf[i]!=pszNoPass[i])break;
  if(i>=nLen){ szStr[0]=0;j=0;}//无密码
  else {
    for(i=j=0;i<nLen&&j<sizeof(szStr)-1;j++,i+=2){
      m = pszBuf[i];
      if(m==0)break;
      m = (m^PASSCHAR)&0x0f;
      n = pszBuf[i+1];
      if(n==0)break;
      n = (n^PASSCHAR)&0x0f;
      szStr[j]=(char)(m+(n<<4));
     }
    szStr[j]=0;
   }
  strcpy(pszBuf,szStr);
  return(j);
 }

//从Ascii中得出密文
int AsciiToPassword(char *pszBuf)
 {
  char szStr[50];
  int i,m,n;

  if(pszBuf[0]==0) //无密码
     strcpy(pszBuf,pszNoPass);
  else{
    for(i=0;pszBuf[i]!=0 && i<(sizeof(szStr)-1)/2;i++){
      m = pszBuf[i]&0x0f;
      if(m<3)n=3; else if(m>=6)n=6; else n=m;
      m = (n<<4)+((m^PASSCHAR)&0x0f);
      szStr[i*2]=(char)m;
      m = (pszBuf[i]>>4)&0x0f;
      if(m<=3)n=3; else if(m>=6)n=6; else n=m;
      m = (n<<4)+((m^PASSCHAR)&0x0f);
      szStr[i*2+1]=(char)m;
     }
    szStr[i*2]=0;
    strcpy(pszBuf,szStr);
   }
  return(i);
 }
//获取帐号
int ReadAccountRecord(TDataSet *pQuery,void *pText)
 {
  char szBuf[50];
  ACCOUNT *t;
  int m,n;

  SetCurTable(pQuery);
  t = (ACCOUNT *)pText;
  ZeroMemory(t,sizeof(ACCOUNT));
  GetFieldText("NAME",szBuf,sizeof(szBuf));
  PasswordToAscii(szBuf);//将密码转化为Ascii
  lstrcpyn(t->szName,szBuf,sizeof(t->szName));

  GetFieldText("PASSWORD",szBuf,sizeof(szBuf));
  PasswordToAscii(szBuf);//将密码转化为Ascii
  lstrcpyn(t->szPassword,szBuf,sizeof(t->szPassword));

  n = GetFieldInt("LEVEL");
  m = (LOBYTE(n)^PASSINT)&0x0ff;//低字节加密
  n = MAKEWORD(m,HIBYTE(n));
  t->nLevel = n;

  n = GetFieldInt("RIGHT");
  t->nRight = n^PASSINT;
  return(TRUE);
 }
//存盘帐号
int SaveAccountRecord(TDataSet *pQuery,void *pText)
 {
  ACCOUNT *t;
  char szBuf[50];
  int m,n;

  SetCurTable(pQuery);
  t = (ACCOUNT *)pText;
  lstrcpyn(szBuf,t->szName,sizeof(szBuf));
  AsciiToPassword(szBuf);//将Ascii转化为密码
  SetFieldText("NAME",szBuf);

  lstrcpyn(szBuf,t->szPassword,sizeof(szBuf));
  AsciiToPassword(szBuf);//将Ascii转化为密码
  SetFieldText("PASSWORD",szBuf);

  n=t->nLevel;
  m = (LOBYTE(n)^PASSINT)&0x0ff;//低字节加密
  n = MAKEWORD(m,HIBYTE(n));
  SetFieldInt("LEVEL",n);

  n = t->nRight; n = n^PASSINT;
  SetFieldInt("RIGHT",n);
  return(TRUE);
 }
//读取感应卡片
int ReadCardRecord(TDataSet *pQuery,void *pText)
 {
  CARDDATA *t;
  TDateTime d1,d2;

  t = (CARDDATA *)pText;
  ZeroMemory(t,sizeof(CARDDATA));
  SetCurTable(pQuery);

  t->nCardNo=GetFieldInt("CARDNO");
  t->nCardID=GetFieldInt("CARDID");
  t->nCardHI=GetFieldInt("CARDHI");
  t->nType=GetFieldInt("CARDTYPE");
  t->nPurpose=GetFieldInt("PURPOSE");
  t->nHolderNo=GetFieldInt("HOLDERNO");

  d1=GetFieldDouble("BEGINDATE");
  d2=GetFieldDouble("ENDDATE");
  t->nBeginDate = TDateToDWORD(d1);
  t->nEndDate = TDateToDWORD(d2);

  t->nStatus = GetFieldInt("STATUS");
  return(TRUE);
 }
//保存感应卡片
int SaveCardRecord(TDataSet *pQuery,void *pText)
 {
  CARDDATA *t;
  TDateTime d1,d2;
  int n;

  SetCurTable(pQuery);
  t = (CARDDATA *)pText;

  SetFieldInt("CARDNO",t->nCardNo);
  SetFieldInt("CARDID",t->nCardID);
  SetFieldInt("CARDHI",t->nCardHI);
  SetFieldInt("CARDTYPE",t->nType);
  SetFieldInt("PURPOSE",t->nPurpose);
  SetFieldInt("HOLDERNO",t->nHolderNo);

  d1=DWORDToTDate(t->nBeginDate);
  d2=DWORDToTDate(t->nEndDate);
  SetFieldDouble("BEGINDATE",d1);
  SetFieldDouble("ENDDATE",d2);

  n=GetCardPauseFlag(t);
  SetFieldInt("PAUSEUSE",n);
  n=GetCardHoldFlag(t);
  SetFieldInt("GETFLAG",n);

  SetFieldInt("STATUS",t->nStatus);
  return(TRUE);
 }
//读取用户收费类型
int ReadPriceRecord(TDataSet *pQuery,void *pText)
 {
  int n;
  PRICEDATA *t;

  t = (PRICEDATA *)pText;
  ZeroMemory(t,sizeof(PPRICEDATA));
  SetCurTable(pQuery);

  t->nID=GetFieldInt("USERTYPE");
  t->nChargeType=GetFieldInt("CHARGETYPE");

  t->nFirstTime=GetFieldInt("FIRSTTIME");
  t->nSecondTime=GetFieldInt("SECONDTIME");
  t->nNeverTime=GetFieldInt("NEVERTIME");

  t->fPriceValue=GetFieldDouble("PRICEVALUE");
  t->fFirstPrice=GetFieldDouble("FIRSTPRICE");
  t->fSecondPrice=GetFieldDouble("SECONDPRICE");
  t->fNightPrice=GetFieldDouble("NIGHTPRICE");

  GetFieldText("USERSTR",t->szUserType,sizeof(t->szUserType));
  return(TRUE);
 }
//保存用户收费类型
int SavePriceRecord(TDataSet *pQuery,void *pText)
 {
  PRICEDATA *t;
  int n;

  SetCurTable(pQuery);
  t = (PRICEDATA *)pText;

  SetFieldInt("USERTYPE",t->nID);
  SetFieldInt("CHARGETYPE",t->nChargeType);

  SetFieldInt("FIRSTTIME",t->nFirstTime);
  SetFieldInt("SECONDTIME",t->nSecondTime);
  SetFieldInt("NEVERTIME",t->nNeverTime);

  SetFieldDouble("PRICEVALUE",t->fPriceValue);
  SetFieldDouble("FIRSTPRICE",t->fFirstPrice);

⌨️ 快捷键说明

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