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

📄 accview.cpp

📁 本家庭理财系统是一个简易的家庭理财工具
💻 CPP
字号:
// AccView.cpp : implementation file
//

#include "stdafx.h"
#include "FFMS.h"
#include "AccView.h"
#include "GeneralDef.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAccView

IMPLEMENT_DYNCREATE(CAccView, CFormView)

CAccView::CAccView()
	: CFormView(CAccView::IDD)
{
	//{{AFX_DATA_INIT(CAccView)
	m_strCard = _T("");
	m_dtAcc = 0;
	m_strName = _T("");
	m_strNum = _T("");
	m_strRemark = _T("");
	m_dtExch = 0;
	m_nType = -1;
	m_dbAccMon = 0.0f;
	m_dbExMon = 0.0f;
	//}}AFX_DATA_INIT
}

CAccView::~CAccView()
{
}

void CAccView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAccView)
	DDX_Control(pDX, IDC_ACC_LIST1, m_listAcc);
	DDX_Control(pDX, IDC_ACC_LIST2, m_listExch);
	DDX_Text(pDX, IDC_ACC_CARD, m_strCard);
	DDX_DateTimeCtrl(pDX, IDC_ACC_DATE, m_dtAcc);
	DDX_Text(pDX, IDC_ACC_NAME, m_strName);
	DDX_Text(pDX, IDC_ACC_NUM, m_strNum);
	DDX_Text(pDX, IDC_ACC_REMARK, m_strRemark);
	DDX_DateTimeCtrl(pDX, IDC_EXCH_DATE, m_dtExch);
	DDX_Radio(pDX, IDC_RADIO1, m_nType);
	DDX_Control(pDX, IDC_ACC_BANK, m_strBank);
	DDX_Text(pDX, IDC_ACC_MONEY, m_dbAccMon);
	DDX_Text(pDX, IDC_EXCH_MONEY, m_dbExMon);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAccView, CFormView)
	//{{AFX_MSG_MAP(CAccView)
	ON_BN_CLICKED(IDC_ACC_ADD, OnAccAdd)
	ON_BN_CLICKED(IDC_ACC_DEL, OnAccDel)
	ON_BN_CLICKED(IDC_EXCH_ADD, OnExchAdd)
	ON_BN_CLICKED(IDC_EXCH_DEL, OnExchDel)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_ACC_LIST1, OnItemchangedAccList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAccView diagnostics

#ifdef _DEBUG
void CAccView::AssertValid() const
{
	CFormView::AssertValid();
}

void CAccView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAccView message handlers

void CAccView::InitControl()
{
	DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;//|LVS_EX_UNDERLINEHOT
	m_listAcc.SetExtendedStyle(dwExStyle);
	m_listExch.SetExtendedStyle(dwExStyle);
	m_listAcc.InsertColumn(0,"账号",LVCFMT_CENTER,100);
	m_listAcc.InsertColumn(1,"户名",LVCFMT_CENTER,100);
	m_listAcc.InsertColumn(2,"关联卡号",LVCFMT_CENTER,120);
	m_listAcc.InsertColumn(3,"开户银行",LVCFMT_CENTER,120);
	m_listAcc.InsertColumn(4,"开户日期",LVCFMT_CENTER,120);
	m_listAcc.InsertColumn(5,"余额",LVCFMT_CENTER,100);
	m_listAcc.InsertColumn(6,"说明",LVCFMT_CENTER,120);

	m_listExch.InsertColumn(0,"交易ID",LVCFMT_CENTER,60);
	m_listExch.InsertColumn(1,"交易日期",LVCFMT_CENTER,100);
	m_listExch.InsertColumn(2,"存/取款",LVCFMT_CENTER,80);
	m_listExch.InsertColumn(3,"金额",LVCFMT_CENTER,100);
}

void CAccView::InsertAccCtrlItem(CString item0, CString item1, CString item2, CString item3, CString item4, CString item5, CString item6)
{
	int nIndex=m_listAcc.GetItemCount();
	LV_ITEM lvItem;
	lvItem.mask = LVIF_TEXT ;   
	lvItem.iItem = nIndex; 
	lvItem.iSubItem = 0;
	lvItem.pszText = (char*)(LPCTSTR)item0;
	m_listAcc.InsertItem(&lvItem);
	m_listAcc.SetItemText(nIndex,1,item1);
	m_listAcc.SetItemText(nIndex,2,item2);
	m_listAcc.SetItemText(nIndex,3,item3);
	m_listAcc.SetItemText(nIndex,4,item4);
	m_listAcc.SetItemText(nIndex,5,item5);
	m_listAcc.SetItemText(nIndex,6,item6);
}

void CAccView::InsertExCtrlItem(CString item0, CString item1, CString item2, CString item3)
{
	int nIndex=m_listExch.GetItemCount();
	LV_ITEM lvItem;
	lvItem.mask = LVIF_TEXT;   
	lvItem.iItem = nIndex; 
	lvItem.iSubItem = 0;
	lvItem.pszText = (char*)(LPCTSTR)item0;
	m_listExch.InsertItem(&lvItem);
	m_listExch.SetItemText(nIndex,1,item1);
	m_listExch.SetItemText(nIndex,2,item2);
	m_listExch.SetItemText(nIndex,3,item3);
}

void CAccView::InitCtrlData()
{
	if(!adoDB.IsOpen())
		return;
	m_listAcc.DeleteAllItems();
	CDStrs acFields;
	adoDB.ExecuteQuery("select * from ACC_INFO",acFields);
	for(int i=0;i<acFields.size();i++)
	{
		CStrs strs=acFields[i];
		InsertAccCtrlItem(strs[0],strs[1],strs[2],strs[3],strs[4],strs[5],strs[6]);
		m_strCurrAcc=strs[0];
		m_dbCurrMoney=atof(strs[5]);
	}
	RefreshExchData(m_strCurrAcc);
}

void CAccView::RefreshExchData(CString currAcc)
{
	m_listExch.DeleteAllItems();
	CDStrs exFields;
	CString sql;
	sql.Format("select * from ACC_EXCH where acc_num='%s'",currAcc);
	adoDB.ExecuteQuery(sql,exFields);
	for(int i=0;i<exFields.size();i++)
	{
		CStrs strs=exFields[i];
		InsertExCtrlItem(strs[0],strs[2],strs[3]=="0"?"存款":"取款",strs[4]);
	}
}

void CAccView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	// TODO: Add your specialized code here and/or call the base class
	InitControl();
	CString sql="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Finance;Data Source=(local)";
	if(adoDB.Open(sql)==TRUE)
		InitCtrlData();
}

void CAccView::OnAccAdd() 
{
	// TODO: Add your control notification handler code here
	if(!adoDB.IsOpen())
	{
		AfxMessageBox("数据库未打开!");
		return;
	}
	if(!UpdateData())
		return;
	CString strBank=m_strBank.GetText();
	if(strBank.IsEmpty()||m_strNum.IsEmpty()||m_strCard.IsEmpty()||m_strName.IsEmpty())
	{
		AfxMessageBox("账户信息不完整!");
		return;
	}
	if(m_dbAccMon<=0)
	{
		AfxMessageBox("金额必须大于0!");
		return;
	}
	CString strDT=m_dtAcc.Format("%Y-%m-%d");
	CString sql;
	sql.Format("insert into ACC_INFO(acc_num,acc_name,acc_card,acc_bank,acc_date,"
		"acc_balance,acc_remark) values('%s','%s','%s','%s','%s',%.2f,'%s')",
		m_strNum,m_strName,m_strCard,strBank,strDT,m_dbAccMon,m_strRemark);
	adoDB.Execute(sql);
	InsertAccCtrlItem(m_strNum,m_strName,m_strCard,strBank,strDT,float2Str(m_dbAccMon),m_strRemark);
	GetDlgItem(IDC_ACC_NAME)->SetWindowText("");
	GetDlgItem(IDC_ACC_BANK)->SetWindowText("");
	GetDlgItem(IDC_ACC_NAME)->SetWindowText("");
	GetDlgItem(IDC_ACC_NUM)->SetWindowText("");
	GetDlgItem(IDC_ACC_MONEY)->SetWindowText("0");
	GetDlgItem(IDC_ACC_CARD)->SetWindowText("");
	GetDlgItem(IDC_ACC_REMARK)->SetWindowText("");
}

void CAccView::OnAccDel() 
{
	// TODO: Add your control notification handler code here
	if(!adoDB.IsOpen())
	{
		AfxMessageBox("数据库未打开!");
		return;
	}
	int nItem=m_listAcc.GetNextItem(-1,LVNI_SELECTED);
	if(nItem==-1)
	{
		AfxMessageBox("没有选定要删除的账户信息!");
		return;
	}
	CString strAccNum=m_listAcc.GetItemText(nItem,0);
	CString sql;
	sql.Format("delete from ACC_EXCH where acc_num='%s'",strAccNum);
	adoDB.Execute(sql);
	m_listExch.DeleteAllItems();
	sql.Format("delete from ACC_INFO where acc_num='%s'",strAccNum);
	adoDB.Execute(sql);
	m_listAcc.DeleteItem(nItem);
	m_listExch.DeleteAllItems();
}

void CAccView::OnItemchangedAccList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	int nItem=m_listAcc.GetNextItem(-1,LVNI_SELECTED);
	if(nItem!=-1)
	{
		m_nCurrIndex=nItem;
		m_strCurrAcc=m_listAcc.GetItemText(nItem,0);
		m_dbCurrMoney=atof(m_listAcc.GetItemText(nItem,5));
		RefreshExchData(m_strCurrAcc);
	}
	*pResult = 0;
}

void CAccView::OnExchAdd() 
{
	// TODO: Add your control notification handler code here
	if(!adoDB.IsOpen())
	{
		AfxMessageBox("数据库未打开!");
		return;
	}
	if(!UpdateData())
		return;
	if(m_nType==-1)
	{
		AfxMessageBox("存款还是取款?");
		return;
	}
	if(m_dbExMon<=0)
	{
		AfxMessageBox("金额必须大于0!");
		return;
	}
	CString strID;
	adoDB.ExecuteQueryValue("select max(ex_id) from ACC_EXCH",strID);
	int newID=atoi(strID)+1;
	CString strDT=m_dtExch.Format("%Y-%m-%d");
	CString sql;
	if(m_nType)
	{
		if(m_dbCurrMoney<m_dbExMon)
		{
			AfxMessageBox("银行存款余额不足!");
			return;
		}
		m_dbCurrMoney-=m_dbExMon;
	}
	else 
		m_dbCurrMoney+=m_dbExMon;
	sql.Format("insert into ACC_EXCH(ex_id,acc_num,ex_date,ex_type,ex_money)"
		"values(%d,'%s','%s',%d,%.2f)",
		newID,m_strCurrAcc,strDT,m_nType,m_dbExMon);
	adoDB.Execute(sql);
	InsertExCtrlItem(Int2Str(newID),strDT,m_nType==0?"存款":"取款",float2Str(m_dbExMon));
	m_listAcc.SetItemText(m_nCurrIndex,5,float2Str(m_dbCurrMoney));
	sql.Format("update ACC_INFO set acc_balance=%.2f"
		"where acc_num='%s'",m_dbCurrMoney,m_strCurrAcc);
	adoDB.Execute(sql);
	GetDlgItem(IDC_EXCH_MONEY)->SetWindowText("0");
}

void CAccView::OnExchDel() 
{
	// TODO: Add your control notification handler code here
	if(!adoDB.IsOpen())
	{
		AfxMessageBox("数据库未打开!");
		return;
	}
	int nItem=m_listExch.GetNextItem(-1,LVNI_SELECTED);
	if(nItem==-1)
	{
		AfxMessageBox("没有选定要删除的账户信息!");
		return;
	}
	int id=atoi(m_listExch.GetItemText(nItem,0));
	m_dbExMon=atof(m_listExch.GetItemText(nItem,3));
	CString typeSel=m_listExch.GetItemText(nItem,2);
	CString sql;
	sql.Format("delete from ACC_EXCH where ex_id=%d",id);
	adoDB.Execute(sql);
	m_listExch.DeleteItem(nItem);
	int type=typeSel=="存款"?0:1;
	if(type)
		m_dbCurrMoney+=m_dbExMon;
	else 
		m_dbCurrMoney-=m_dbExMon;
	m_listAcc.SetItemText(m_nCurrIndex,5,float2Str(m_dbCurrMoney));
	sql.Format("update ACC_INFO set acc_balance=%.2f"
		"where acc_num='%s'",m_dbCurrMoney,m_strCurrAcc);
	adoDB.Execute(sql);
}

void CAccView::OnRadio1() 
{
	// TODO: Add your control notification handler code here
	m_nType=0;
}

void CAccView::OnRadio2() 
{
	// TODO: Add your control notification handler code here
	m_nType=1;
}

⌨️ 快捷键说明

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