📄 accountview.cpp
字号:
// AccountView.cpp : implementation file
//
#include "stdafx.h"
#include "FinaceMIS.h"
#include "AccountView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAccountView
IMPLEMENT_DYNCREATE(CAccountView, CFormView)
CAccountView::CAccountView()
: CFormView(CAccountView::IDD)
{
//{{AFX_DATA_INIT(CAccountView)
m_strACNum = _T("");
m_strName = _T("");
m_strCard = _T("");
m_strBank = _T("");
m_dtAcc = 0;
m_dtExch = 0;
m_nType = -1;
m_dbACMoney = 0.0;
m_dbExMoney = 0.0;
m_strDescrip = _T("");
//}}AFX_DATA_INIT
}
CAccountView::~CAccountView()
{
}
void CAccountView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAccountView)
DDX_Control(pDX, IDC_LIST_EXCH, m_listExch);
DDX_Control(pDX, IDC_LIST_ACC, m_listAcc);
DDX_Text(pDX, IDC_EDIT_ACCNUM, m_strACNum);
DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
DDX_Text(pDX, IDC_EDIT_CARD, m_strCard);
DDX_CBString(pDX, IDC_COMBO_BANK, m_strBank);
DDX_DateTimeCtrl(pDX, IDC_DT_ACC, m_dtAcc);
DDX_DateTimeCtrl(pDX, IDC_DT_EXCH, m_dtExch);
DDX_Radio(pDX, IDC_RADIO1, m_nType);
DDX_Text(pDX, IDC_EDIT_AC_MONEY, m_dbACMoney);
DDX_Text(pDX, IDC_EDIT_EX_MONEY, m_dbExMoney);
DDX_Text(pDX, IDC_EDIT_DESCRIP, m_strDescrip);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAccountView, CFormView)
//{{AFX_MSG_MAP(CAccountView)
ON_BN_CLICKED(IDC_BTN_ACC_ADD, OnBtnAccAdd)
ON_BN_CLICKED(IDC_BTN_ACC_DEL, OnBtnAccDel)
ON_BN_CLICKED(IDC_BTN_EXCH_ADD, OnBtnExchAdd)
ON_BN_CLICKED(IDC_BTN_EXCH_DEL, OnBtnExchDel)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_ACC, OnItemchangedListAcc)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAccountView diagnostics
#ifdef _DEBUG
void CAccountView::AssertValid() const
{
CFormView::AssertValid();
}
void CAccountView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
void CAccountView::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,80);
m_listAcc.InsertColumn(2,"关联卡号",LVCFMT_CENTER,100);
m_listAcc.InsertColumn(3,"开户银行",LVCFMT_CENTER,100);
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 CAccountView::InsertAcCtrlItem(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 CAccountView::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 CAccountView::InitCtrlData()
{
if(!g_adoDB.IsOpen())
return;
m_listAcc.DeleteAllItems();
CDStrs acFields;
//获取所有的帐户信息表的数据
g_adoDB.ExecuteQuery("select * from account_info_tab",acFields);
for(int i=0;i<acFields.size();i++)//本函数运行完后,当前帐户是最后一行
{
CStrs strs=acFields[i];
InsertAcCtrlItem(strs[0],strs[1],strs[2],strs[3],strs[4],strs[5],strs[6]);
//更新当前帐户名称和帐户余额
m_strCurrAcc=strs[0];
m_dbCurrMoney=atof(strs[5]);
}
m_nCurrIndex=acFields.size()-1;/////////////////////////////当前选中帐户为最后一行
RefreshExchData(m_strCurrAcc);
}
void CAccountView::RefreshExchData(CString currAcc)
{
m_listExch.DeleteAllItems();
CDStrs exFields;
//获取该帐户的所有交易信息
CString sql;
sql.Format("Select * from exchange_info_tab where acc_num='%s'",m_strCurrAcc);
g_adoDB.ExecuteQuery(sql,exFields);
for(int i=0;i<exFields.size();i++)
{
CStrs strs=exFields[i];
//插入交易信息列表框控件
InsertExCtrlItem(strs[0],strs[2].Left(10),strs[3]=="0"?"存款":"取款",strs[4]);
}
}
/////////////////////////////////////////////////////////////////////////////
// CAccountView message handlers
void CAccountView::OnBtnAccAdd()
{
// TODO: Add your control notification handler code here
if(!g_adoDB.IsOpen()){
AfxMessageBox("数据库未打开");
return;
}
if(!UpdateData())
return;
if(m_strBank.IsEmpty()){
AfxMessageBox("请选择开户的银行名称");
return;
}
//插入新的帐户信息
CString strDT=m_dtAcc.Format("%Y-%m-%d");
CString sql;
sql.Format("Insert into account_info_tab(acc_num,"
"name,card_num,bank,opendate,balance,description)"
" values("
"'%s','%s','%s','%s','%s',%.2f,'%s')",
m_strACNum,m_strName,m_strCard,m_strBank,strDT,m_dbACMoney,m_strDescrip);
g_adoDB.Execute(sql);
//向帐户列表框控件中插入信息
InsertAcCtrlItem(m_strACNum,m_strName,m_strCard,m_strBank,
strDT,float2Str(m_dbACMoney),m_strDescrip);
}
void CAccountView::OnBtnAccDel()
{
if(!g_adoDB.IsOpen()){
AfxMessageBox("数据库未打开");
return;
}
int nItem=m_listAcc.GetNextItem(-1,LVNI_SELECTED);
if(nItem==-1){
AfxMessageBox("没有选定要删除的帐户信息");
return;
}
//获取选择的帐户名称
CString strACNum=m_listAcc.GetItemText(nItem,0);
CString sql;
//删除该帐户下的所有交易记录
sql.Format("delete from exchange_info_tab where acc_num='%s'",strACNum);
g_adoDB.Execute(sql);
m_listExch.DeleteAllItems();
//删除选择的帐户信息
sql.Format("delete from account_info_tab where acc_num='%s'",strACNum);
g_adoDB.Execute(sql);
//删除帐户列表框控件中选择的帐户信息
m_listAcc.DeleteItem(nItem);
//删除交易信息列表框控件中的数据
m_listExch.DeleteAllItems();
}
void CAccountView::OnBtnExchAdd()
{
// TODO: Add your control notification handler code here
if(!g_adoDB.IsOpen()){
AfxMessageBox("数据库未打开");
return;
}
if(!UpdateData())
return;
CString strID;
//获取最大的收支信息ID
g_adoDB.ExecuteQueryValue("Select max(ex_id) "
"from exchange_info_tab",strID);
int newID=atoi(strID)+1;
//插入新的交易信息
CString strDT=m_dtExch.Format("%Y-%m-%d");
CString sql;
sql.Format("Insert into exchange_info_tab(ex_id,acc_num,"
"ex_date,ex_type,money)"
" values("
"%d,'%s','%s',%d,%.2f)",
newID,m_strCurrAcc,strDT,m_nType,m_dbExMoney);
g_adoDB.Execute(sql);
InsertExCtrlItem(Int2Str(newID),strDT,m_nType==0?"存款":"取款",
float2Str(m_dbExMoney));
//如果是取款
if(m_nType)//总额减少
m_dbCurrMoney-=m_dbExMoney;
else //否则,存取总额增加
m_dbCurrMoney+=m_dbExMoney;
//更新帐户列表框控件中显示的余额信息
m_listAcc.SetItemText(m_nCurrIndex,5,float2Str(m_dbCurrMoney));
//更新数据库中该帐户的余额信息
sql.Format("update account_info_tab set balance=%.2f "
" where acc_num='%s'",m_dbCurrMoney,m_strCurrAcc);
g_adoDB.Execute(sql);
}
void CAccountView::OnBtnExchDel()
{
if(!g_adoDB.IsOpen()){
AfxMessageBox("数据库未打开");
return;
}
int nItem=m_listExch.GetNextItem(-1,LVNI_SELECTED);
if(nItem==-1){
AfxMessageBox("没有选定要删除的交易信息");
return;
}
//获取选择的交易ID
int id=atoi(m_listExch.GetItemText(nItem,0));
m_dbExMoney=atof(m_listExch.GetItemText(nItem,3));
//获取删除的交易类型
CString typeSel=m_listExch.GetItemText(nItem,2);
CString sql;
//删除选择的交易记录
sql.Format("delete from exchange_info_tab where ex_id=%d",id);
g_adoDB.Execute(sql);
//删除交易列表框控件中选择的交易信息
m_listExch.DeleteItem(nItem);
//恢复余额信息
int type=typeSel=="存款"?0:1;
if(type)//恢复减少的总额
m_dbCurrMoney+=m_dbExMoney;
else//否则,恢复增加的总额
m_dbCurrMoney-=m_dbExMoney;
//更新帐户列表框控件显示的余额信息
m_listAcc.SetItemText(m_nCurrIndex,5,float2Str(m_dbCurrMoney));
//更新数据库中该帐户的余额信息
sql.Format("update account_info_tab set balance=%.2f "
" where acc_num='%s'",m_dbCurrMoney,m_strCurrAcc);
g_adoDB.Execute(sql);
}
void CAccountView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
InitControl();//初始化列表框控件
InitCtrlData();//加载数据到列表框控件中
}
void CAccountView::OnItemchangedListAcc(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -