📄 maintain.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 + -