📄 param.cpp
字号:
//---------------------------------------------------------------------------
#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 + -