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

📄 transview.cpp

📁 这是一个银行证券转帐系统。可以实现银行和证券公司之间的转帐。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// TransView.cpp : implementation of the CTransView class
//

#include "stdafx.h"
#include "Trans.h"

#include "TransDoc.h"
#include "TransView.h"

#include <fstream>
using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTransView

IMPLEMENT_DYNCREATE(CTransView, CListView)

BEGIN_MESSAGE_MAP(CTransView, CListView)
	//{{AFX_MSG_MAP(CTransView)
	ON_COMMAND(ID_MENU_OPEN, OnMenuOpen)
	ON_COMMAND(ID_MENU_CLOSE, OnMenuClose)
	ON_COMMAND(ID_MENU_REPORT, OnMenuReport)
	ON_COMMAND(ID_MENU_SGDZ, OnMenuSgdz)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTransView construction/destruction
UINT GetBankReq(LPVOID PARAM);
UINT GetSecuReq(LPVOID PARAM);

CTransView::CTransView()
{
	m_bOpen=FALSE;
	m_bCheckIn=FALSE;
	m_bMulti=FALSE;
	m_Interface=NULL;
	m_BankInte=NULL;
	char szTmp[200];
	memset(&m_comm,0,sizeof(INNERCOMM));
	GetPrivateProfileString("证券","银行代码","",m_comm.BANKID,6,CONFIGINI);//
	GetPrivateProfileString("银行","券商代码","",m_comm.SECUID,6,CONFIGINI);//
	GetPrivateProfileString("证券","操作员","",m_comm.OPERATOR,40,CONFIGINI);//4-操作员代码
	GetPrivateProfileString("证券","操作员密码","",m_comm.OPERPSWD,40,CONFIGINI);
	GetPrivateProfileString("系统","发起方","券商发起",szTmp,20,CONFIGINI);
	GetPrivateProfileString("银行","银行名称","银行",m_szBankName,40,CONFIGINI);
	if(strcmp(szTmp,"券商发起")==0)
		m_nCauseType=1;
	else  if(strcmp(szTmp,"银行发起")==0)
		m_nCauseType=2;
	else				//双方发起
		m_nCauseType=3;
	int n=GetPrivateProfileInt("系统","支持多币种",0,CONFIGINI);
	if(n)	m_bMulti=TRUE;
}

CTransView::~CTransView()
{
	if(m_bOpen){
		AfxMessageBox("尚未签退!");
	}
	m_bOpen=FALSE;
	if(m_Interface)	delete m_Interface;
	if(m_BankInte)	delete m_BankInte;
}

BOOL CTransView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CTransView drawing

void CTransView::OnDraw(CDC* pDC)
{
	CTransDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CTransView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS);
		GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|
		LVS_EX_FULLROWSELECT);
	CDC *pDC=GetDC();
	TEXTMETRIC tm;
	pDC->GetTextMetrics(&tm);
	GetListCtrl().InsertColumn(0,"账号",LVCFMT_LEFT,15*tm.tmAveCharWidth,0);
	GetListCtrl().InsertColumn(1,"券商流水号",LVCFMT_LEFT,15*tm.tmAveCharWidth,1);
	GetListCtrl().InsertColumn(2,"银行",LVCFMT_LEFT,12*tm.tmAveCharWidth,2);
	GetListCtrl().InsertColumn(3,"银行流水号",LVCFMT_LEFT,18*tm.tmAveCharWidth,3);
	GetListCtrl().InsertColumn(4,"操作类型",LVCFMT_LEFT,16*tm.tmAveCharWidth,4);
	GetListCtrl().InsertColumn(5,"金额",LVCFMT_LEFT,20*tm.tmAveCharWidth,5);
	GetListCtrl().InsertColumn(6,"操作结果",LVCFMT_LEFT,20*tm.tmAveCharWidth,6);
	GetListCtrl().InsertColumn(7,"结果说明",LVCFMT_LEFT,20*tm.tmAveCharWidth,7);
	
	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CTransView printing

BOOL CTransView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTransView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTransView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CTransView diagnostics

#ifdef _DEBUG
void CTransView::AssertValid() const
{
	CListView::AssertValid();
}

void CTransView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CTransDoc* CTransView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTransDoc)));
	return (CTransDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTransView message handlers

//签到
void CTransView::OnMenuOpen() 
{
	//取得基本数据
	PARAM myParam;
	RESULT myResult;
	char szTmp[256];
	CTime t=CTime::GetCurrentTime();
	CString strTime=t.Format("%Y%m%d");
	GetPrivateProfileString("系统","签到日期","",szTmp,10,CONFIGINI);
	if(strTime==szTmp)
	{
		m_nBankToSecu=GetPrivateProfileInt("系统","银行转证券笔数",0,CONFIGINI);
		m_nSecuToBank=GetPrivateProfileInt("系统","证券转银行笔数",0,CONFIGINI);
		m_nBToS=GetPrivateProfileInt("系统","银行转证券金额",0,CONFIGINI);
		m_nSToB=GetPrivateProfileInt("系统","证券转银行金额",0,CONFIGINI);
		m_nOpenAcc=GetPrivateProfileInt("系统","开户数目",0,CONFIGINI);
		m_nDelAcc=GetPrivateProfileInt("系统","销户数目",0,CONFIGINI);
	}
	else
	{
		m_nBankToSecu=0;
		m_nSecuToBank=0;
		m_nBToS=0;
		m_nSToB=0;
		m_nOpenAcc=0;
		m_nDelAcc=0;
	}
	m_nInnerPort=GetPrivateProfileInt("证券","内部服务端口",8003,CONFIGINI);
	if(!m_bOpen)
	{
		BOOL OK1,OK2;
		OK1=OK2=FALSE;
		GetPrivateProfileString("证券","券商接口文件","0",szTmp,200,CONFIGINI);
		m_Interface=new CInterface;
		if(m_Interface)
		{	
			if(m_Interface->Init(szTmp))
				OK1=TRUE;
		}
		else
		{
			LogMsg("加载券商接口文件失败!",0);
		}

		GetPrivateProfileString("银行","银行接口文件","0",szTmp,200,CONFIGINI);
		m_BankInte=new CInterface;
		if(m_BankInte)
		{	
			if(m_BankInte->Init(szTmp))
				OK2=TRUE;
		}
		else
		{
			LogMsg("加载银行接口文件失败!",0);
		}
		if(OK1&OK2)	m_bOpen=TRUE;
	}
	else
		return ;
	GetPrivateProfileString("银行","银行地址","127.0.0.1",myParam.prData.prCol.Array[6],40,CONFIGINI);//6-目的地址
	GetPrivateProfileString("银行","券商代码","",m_comm.SECUID,20,CONFIGINI);
	GetPrivateProfileString("证券","营业部代码","2110",m_comm.DETCODE,20,CONFIGINI);
	GetPrivateProfileString("证券","银行代码","02",m_comm.BANKID,20,CONFIGINI);

	m_nTRecords=0;
	if(!m_bCheckIn)
	{
		strcpy(myParam.prData.prCol.Array[v_jylx],"9");		//签到
		strTime=t.Format("%Y%m%d");
		strcpy(myParam.prData.prCol.Array[v_rq],(LPCSTR)strTime);
		strTime=t.Format("%H%M%S");
		strcpy(myParam.prData.prCol.Array[v_time],(LPCSTR)strTime);
		strcpy(myParam.prData.prCol.Array[v_bankid],m_comm.BANKID);
		strcpy(myParam.prData.prCol.Array[v_secuid],m_comm.SECUID);
		LogMsg("开始券商签到........",0);
		if(m_Interface->CheckInOut(&myParam,&myResult)>=0)
		{
			LogMsg("券商签到成功.........",0);
			sprintf(m_comm.RETCODE,"%d",myResult.iRet);
			strcpy(m_comm.NOTE,myResult.szErrMsg);
			m_comm.TRTYPE='9';
			if(myResult.iRet>=0)
			{
				LogMsg("开始调用银行签到..........",0);
				m_BankInte->CheckInOut(&myParam,&myResult);
				LogMsg("调用银行签到结束",0);
				if(myResult.iRet>=0)
					m_bCheckIn=TRUE;
				else
				{
					sprintf(m_comm.RETCODE,"%d",myResult.iRet);
					m_bCheckIn=FALSE;
					strcpy(m_comm.NOTE,myResult.szErrMsg);	
				}
				ShowMSG(&m_comm);
			}
			if(m_bCheckIn)
			{
				strTime=t.Format("%Y%m%d");
				DWORD dw=WritePrivateProfileString("系统","签到日期",(LPCSTR)strTime,CONFIGINI);
				if(dw>0)	m_bCheckIn=TRUE;
			}
		}
		else
		{
			strcpy(m_comm.NOTE,"签到失败!");
			ShowMSG(&m_comm);	
			m_bCheckIn=FALSE;
		}
	}

	//处理银证服务器请求

	if(m_bOpen){
		if(m_nCauseType==1){		//券商发起,处理中间件过来的包
			LogMsg("券商发起开始>>>>>>>>>",0);
			if(m_bCheckIn)	SecuGen();
		}
		else if(m_nCauseType==2)	//银行发起
		{
			LogMsg("银行发起开始>>>>>>>>",0);
			BankGen();
		}
		else if(m_nCauseType==3)	//双方发起
		{
			LogMsg("双方发起开始>>>>>>>>",0);
			DoubleGen();
		}
	}
}

//证券公司签退
void CTransView::OnMenuClose() 
{
	//取得基本数据
	PARAM myParam;
	RESULT myResult;
	if(m_bOpen)
	{
		closesocket(m_sInnerSocket);
		CTime t=CTime::GetCurrentTime();
		CString strTime=t.Format("%Y%m%d");
		strcpy(myParam.prData.prCol.Array[v_jylx],"0");
		strcpy(myParam.prData.prCol.Array[v_rq],(LPCSTR)strTime);
		strTime=t.Format("%H%M%S");
		strcpy(myParam.prData.prCol.Array[v_time],(LPCSTR)strTime);
		strcpy(myParam.prData.prCol.Array[v_bankid],m_comm.BANKID);
		strcpy(myParam.prData.prCol.Array[v_secuid],m_comm.SECUID);
		strcpy(myParam.prData.prCol.Array[v_oper],m_comm.OPERATOR);
		strcpy(myParam.prData.prCol.Array[v_operpswd],m_comm.OPERPSWD);
		m_Interface->CheckInOut(&myParam,&myResult);
		if(myResult.iRet>=0){
			m_bOpen=FALSE;
			m_BankInte->CheckInOut(&myParam,&myResult);
		}
		INNERCOMM data;
		memset(&data,0,sizeof(INNERCOMM));
		data.TRTYPE='0';
		strcpy(data.BANKID,m_comm.BANKID);
		sprintf(data.RETCODE,"%d",myResult.iRet);
		strcpy(data.NOTE,myResult.szErrMsg);
		ShowMSG(&data);
		//
		//标明已经签退
		strTime=t.Format("%Y%m%d");
		DWORD dw=WritePrivateProfileString("系统","签退日期",strTime,CONFIGINI);
		char szTmp[200];
		sprintf(szTmp,"%d",m_nBankToSecu);
		WritePrivateProfileString("系统","银行转证券笔数",szTmp,CONFIGINI);
		sprintf(szTmp,"%d",m_nSecuToBank);
		WritePrivateProfileString("系统","证券转银行笔数",szTmp,CONFIGINI);
		sprintf(szTmp,"%d",m_nBToS);
		WritePrivateProfileString("系统","银行转证券金额",szTmp,CONFIGINI);
		sprintf(szTmp,"%d",m_nSToB);
		WritePrivateProfileString("系统","证券转银行金额",szTmp,CONFIGINI);
		sprintf(szTmp,"%d",m_nOpenAcc);
		WritePrivateProfileString("系统","开户数目",szTmp,CONFIGINI);
		sprintf(szTmp,"%d",m_nDelAcc);
		WritePrivateProfileString("系统","销户数目",szTmp,CONFIGINI);
	}
}

//处理证券发起的转账
int CTransView::SecuGen()
{
	AfxBeginThread(GetSecuReq,this);
	return 0;
}

//处理银行发起的请求
int CTransView::BankGen()
{
	SOCKADDR_IN LocalServer;
	char LocalAddr[40];
	ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	LocalServer.sin_family=AF_INET;
	int nPort=GetPrivateProfileInt("证券","券商端口",3026,CONFIGINI);
	GetPrivateProfileString("证券","券商地址","127.0.0.1",LocalAddr,20,CONFIGINI);
	LocalServer.sin_port=htons(nPort);
	LocalServer.sin_addr.s_addr=inet_addr(LocalAddr);
	bind(ListenSocket,(SOCKADDR *)&LocalServer,sizeof(LocalServer));
	if(listen(ListenSocket,5)==SOCKET_ERROR)
	{
		LogMsg("CTransView::BankGen()-->监听失败!",0);
		return -1;
	}
	AfxBeginThread(GetBankReq,this);
	return 0;
}

//处理双方发起的请求
int CTransView::DoubleGen()
{
	BankGen();
	if(m_bCheckIn)	SecuGen();

	return 0;
}


void CTransView::ShowMSG(INNERCOMM *data)
{
	if(m_nTRecords<=0)	m_nTRecords=0;
	LV_ITEM lvitem;
	int iPos;
	lvitem.mask=LVIF_TEXT;
	lvitem.iItem=m_nTRecords;
	lvitem.iSubItem=0;
	lvitem.pszText=data->SECUACC;
	iPos=GetListCtrl().InsertItem(&lvitem);//返回表项插入后的索引号
	lvitem.iItem=iPos;
	lvitem.iSubItem=1;
	lvitem.pszText=data->SECUSER;
	GetListCtrl().SetItem(&lvitem);
	lvitem.iSubItem=2;
	lvitem.pszText=(char *)(LPCSTR)m_szBankName;
	GetListCtrl().SetItem(&lvitem);
	lvitem.iSubItem=3;
	lvitem.pszText=data->BANKSER;
	GetListCtrl().SetItem(&lvitem);
	lvitem.iSubItem=4;
	switch(data->TRTYPE){
	case '1':
		lvitem.pszText="银行转证券";
		break;
	case '2':
		lvitem.pszText="证券转银行";
		break;
	case '3':
		lvitem.pszText="查询银行余额";
		break;
	case '4':
		lvitem.pszText="修改银行密码";
		break;
	case '5':
		lvitem.pszText="银行冲销申请";
		break;

⌨️ 快捷键说明

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