📄 db.cpp
字号:
/**********************************************************
数据库类的实现代码
其中主要对每个功能进行了函数封装,包括:首次注册函数
客户登陆函数 用户下线管理 显示用户信息 存款 取款 转帐
查询余额 修改密码 创建新用户
说明:此类的主要提供访问数据库的功能调用,各大函数相对独立
作者:颜永华
***********************************************************/
#include "StdAfx.h"
#include ".\db.h"
CDB::CDB(void)
{
if(S_OK!=CoInitialize(NULL))
{
::MessageBox(NULL,"ADO 初始化失败!","ADO消息",0);
}
}
CDB::~CDB(void)
{
CoUninitialize();
}
/*连接数据库
*/
_ConnectionPtr CDB::ConnectDB()
{
try
{
_ConnectionPtr pConn;
pConn.CreateInstance("ADODB.Connection");
if(FAILED(pConn->Open(_bstr_t("driver=sql server;server=192.168.0.136;uid=sa;pwd=;database=bank"),"","",-1)))
{
::MessageBox(NULL,"ADO连接失败!","ADO消息",0);
return NULL;
}else
return pConn;
}catch(_com_error e)
{
MessageBox(NULL,e.ErrorMessage(),"ADO异常",0);
return NULL;
}
}
/*用户首次注册函数
返回值:
-1--没有注册银行
-2 --已经有用户注册
-4--帐户已经注册
1--成功 0 --失败
*/
int CDB::firstReg(
char customerName[],
char customerPwd[],
char accountId[],
char accountPwd[],
char customerRealName[],
char customerRegBankIP[],
char customerPhone[],
char customerAddr[],
char customerEmail[])
{
//1)连接数据库
_ConnectionPtr pConn;
pConn=ConnectDB();
//2)设置命令对象
_CommandPtr pCmd;
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t("register_first_proc");
//3)定义参数集合成员
_ParameterPtr paramName,paramPwd,paramAccountId,paramAccountPwd,
paramRealName,paramRegBankIP,paramPhone,paramAddr,paramEmail,paramRetVal;
//4)创建参数
paramName=pCmd->CreateParameter(_bstr_t("customerName"),adChar,adParamInput,11,_variant_t(customerName));
paramPwd=pCmd->CreateParameter(_bstr_t("customerPwd"),adChar,adParamInput,17,_variant_t(customerPwd));
paramAccountId=pCmd->CreateParameter(_bstr_t("AccountId"),adChar,adParamInput,19,_variant_t(accountId));
paramAccountPwd=pCmd->CreateParameter(_bstr_t("AccountPwd"),adChar,adParamInput,17,_variant_t(accountPwd));
paramRealName=pCmd->CreateParameter(_bstr_t("customerRealName"),adChar,adParamInput,11,_variant_t(customerRealName));
paramRegBankIP=pCmd->CreateParameter(_bstr_t("customerRegBankIP"),adChar,adParamInput,17,_variant_t(customerRegBankIP));
paramPhone=pCmd->CreateParameter(_bstr_t("customerPhone"),adChar,adParamInput,16,_variant_t(customerPhone));
paramAddr=pCmd->CreateParameter(_bstr_t("customerAddr"),adChar,adParamInput,21,_variant_t(customerAddr));
paramEmail=pCmd->CreateParameter(_bstr_t("customerEmail"),adChar,adParamInput,21,_variant_t(customerEmail));
paramRetVal=pCmd->CreateParameter(_bstr_t("RetVal"),adInteger,adParamReturnValue,sizeof(long),NULL);
//5)添加参数到命令对象参数集合
pCmd->Parameters->Append(paramRetVal);
pCmd->Parameters->Append(paramName);
pCmd->Parameters->Append(paramPwd);
pCmd->Parameters->Append(paramAccountId);
pCmd->Parameters->Append(paramAccountPwd);
pCmd->Parameters->Append(paramRealName);
pCmd->Parameters->Append(paramRegBankIP);
pCmd->Parameters->Append(paramPhone);
pCmd->Parameters->Append(paramAddr);
pCmd->Parameters->Append(paramEmail);
//6)执行命令
try
{
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
pCmd->Execute(&vNull,&vNull,adCmdStoredProc);
}catch(_com_error e){return 0;}
//7)获得返回值
int ret=(int)pCmd->Parameters->GetItem(_bstr_t("RetVal"))->GetValue();
//8)释放
pCmd.Detach();
pConn->Close();
pConn.Release();
return ret;
}
/*客户登陆函数
返回值:
-1 --没有你要登陆的银行
0 --登陆失败
1 --登陆成功
*/
int CDB::Login(char customerName[],
char customerPwd[],
char customer_login_ip[])
{
////1)连接数据库
_ConnectionPtr pConn;
pConn=ConnectDB();
////2)设置命令对象
_CommandPtr pCmd;
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t("customer_login_proc");
//3)定义参数集合成员
_ParameterPtr paramName,paramPwd,paramLoginBankIP,paramRetVal;
paramName=pCmd->CreateParameter(_bstr_t("customerName"),adChar,adParamInput,11,_variant_t(customerName));
paramPwd=pCmd->CreateParameter(_bstr_t("customerPwd"),adChar,adParamInput,17,_variant_t(customerPwd));
paramLoginBankIP=pCmd->CreateParameter(_bstr_t("customerRegBankIP"),adChar,adParamInput,17,_variant_t(customer_login_ip));
paramRetVal=pCmd->CreateParameter(_bstr_t("RetVal"),adInteger,adParamReturnValue,sizeof(long),NULL);
//4)创建参数
pCmd->Parameters->Append(paramRetVal);
pCmd->Parameters->Append(paramName);
pCmd->Parameters->Append(paramPwd);
pCmd->Parameters->Append(paramLoginBankIP);
//5)执行命令
try
{
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
pCmd->Execute(&vNull,&vNull,adCmdStoredProc);
}catch(_com_error e)
{
pCmd.Detach();
pConn->Close();
pConn.Release();
return 0;
}
//6)获得返回对象
int ret=(int)pCmd->Parameters->GetItem(_bstr_t("RetVal"))->GetValue();
//释放
pCmd.Detach();
pConn->Close();
pConn.Release();
return ret;
}
/*用户下线管理,
输入用户名,
对用户状态进行操作
*/
void CDB::DownLine(char customerName[])
{
_ConnectionPtr pConn;
pConn=ConnectDB();
_CommandPtr pCmd;
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t("customer_exit_proc");
_ParameterPtr paramName;
paramName=pCmd->CreateParameter(_bstr_t("customerName"),adChar,adParamInput,11,_variant_t(customerName));
pCmd->Parameters->Append(paramName);
try
{
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
pCmd->Execute(&vNull,&vNull,adCmdStoredProc);
}catch(_com_error e){}
pCmd.Detach();
pConn->Close();
pConn.Release();
}
/*
显示用户信息
通过输入用户名
返回信息到结构LPSHOW_INFO_PACKET中
*/
void CDB::ShowCustomerInfo(char customerName[],
LPSHOW_INFO_PACKET pShowPacket)
{
//1)连接数据库
_ConnectionPtr pConn;
pConn=ConnectDB();
//2)设置命令对象
_CommandPtr pCmd;
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t("show_customer_proc");
//3)定义参数集合成员
_ParameterPtr paramName;
paramName=pCmd->CreateParameter(_bstr_t("customerName"),adChar,adParamInput,11,_variant_t(customerName));
pCmd->Parameters->Append(paramName);
try
{//4)执行
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
_RecordsetPtr pRs=pCmd->Execute(&vNull,&vNull,adCmdStoredProc);
//5)拷贝数据到指定的结构中
strcpy(pShowPacket->RealName,(char*)_bstr_t(pRs->GetCollect(_variant_t("customer_real_name"))));
strcpy(pShowPacket->Phone,(char*)_bstr_t(pRs->GetCollect(_variant_t("customer_phone"))));
strcpy(pShowPacket->Addr,(char*)_bstr_t(pRs->GetCollect(_variant_t("customer_addr"))));
strcpy(pShowPacket->Email,(char*)_bstr_t(pRs->GetCollect(_variant_t("customer_Email"))));
strcpy(pShowPacket->RegBankIP,(char*)_bstr_t(pRs->GetCollect(_variant_t("customer_regbank_ip"))));
pShowPacket->nGrade=(int)pRs->GetCollect(_variant_t("customer_grade"));
pShowPacket->nScore=(int)pRs->GetCollect(_variant_t("customer_score"));
//customer_real_name,customer_phone,customer_addr,
//customer_email,customer_score,customer_grade,customer_regbank_ip
/*typedef struct showinfopacket
{
OPCODE wCode;
#define CLIENT_SHOW_INFO 0X0B03
#define SERVER_SHOW_INFO 0X0A03
WORD wLen;
char RealName[11];
char Phone[16];
char Addr[21];
char Email[21];
int nScore;
int nGrade;
char RegBankIP[17];
}SHOW_INFO,*LPSHOW_INFO;*/
}catch(_com_error e){}
//6)释放
pCmd.Detach();
pConn->Close();
pConn.Release();
}
/*存款
返回值:
-1--账号或密码错误
-2--没有取款银行
1--成功 0-- 失败
*/
int CDB::InMoney(char accountId[],
char accountPwd[],
char moneyNum[],
char opBankIP[])
{
//1)连接数据库
_ConnectionPtr pConn;
pConn=ConnectDB();
//2)设置命令对象
_CommandPtr pCmd;
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t("inMoney_proc");
//3)定义参数集合成员
_ParameterPtr paramAccountId,paramAccountPwd,
paramMoneyNum,paramOpBankIP,paramRetVal;
//4)创建参数
paramAccountId=pCmd->CreateParameter(_bstr_t("accountId"),adChar,adParamInput,19,_variant_t(accountId));
paramAccountPwd=pCmd->CreateParameter(_bstr_t("accountPwd"),adChar,adParamInput,17,_variant_t(accountPwd));
paramMoneyNum=pCmd->CreateParameter(_bstr_t("moneyNum"),adChar,adParamInput,10,_variant_t(moneyNum));
paramOpBankIP=pCmd->CreateParameter(_bstr_t("BankIP"),adChar,adParamInput,17,_variant_t(opBankIP));
paramRetVal=pCmd->CreateParameter(_bstr_t("retVal"),adInteger,adParamReturnValue,sizeof(long),NULL);
//5)添加参数到参数集合
pCmd->Parameters->Append(paramRetVal);
pCmd->Parameters->Append(paramAccountId);
pCmd->Parameters->Append(paramAccountPwd);
pCmd->Parameters->Append(paramMoneyNum);
pCmd->Parameters->Append(paramOpBankIP);
//6)执行
try
{
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
pCmd->Execute(&vNull,&vNull,adCmdStoredProc);
}catch(_com_error e)
{
pCmd.Detach();
pConn->Close();
pConn.Release();
return 0;
}
//7)获得返回值
int ret=(int)pCmd->Parameters->GetItem(_bstr_t("RetVal"))->GetValue();
//8)释放
pCmd.Detach();
pConn->Close();
pConn.Release();
return ret;
}
/*取款函数
返回值:
-1--账号或密码错误
-2--没有取款银行
-3 --余额不足
1--成功 0-- 失败
*/
int CDB::OutMoney(char accountId[],
char accountPwd[],
char moneyNum[],
char opBankIP[])
{
//1)连接数据库
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -