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

📄 db.cpp

📁 一个与金融方面有关的问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/**********************************************************
数据库类的实现代码
其中主要对每个功能进行了函数封装,包括:首次注册函数 
客户登陆函数 用户下线管理 显示用户信息 存款 取款 转帐
查询余额 修改密码 创建新用户
说明:此类的主要提供访问数据库的功能调用,各大函数相对独立
作者:颜永华
***********************************************************/
#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 + -