📄 financeborrowdlg.cpp
字号:
// FinanceBorrowDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "SMS.h"
#include "FinanceBorrowDlg.h"
// CFinanceBorrowDlg 对话框
IMPLEMENT_DYNAMIC(CFinanceBorrowDlg, CDialog)
CFinanceBorrowDlg::CFinanceBorrowDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFinanceBorrowDlg::IDD, pParent)
, m_iBorrowAmount(0)
, m_pCashSet(&theApp.m_db)
, m_pSet(&theApp.m_db )
{
m_backcolor=m_RGB_BkColor;
m_brush.CreateSolidBrush(m_backcolor);
m_bItemClick=false;
}
CFinanceBorrowDlg::~CFinanceBorrowDlg()
{
}
void CFinanceBorrowDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_BORROW_AMOUNT_STATIC, m_iBorrowAmount);
DDX_Control(pDX, IDC_FINANCE_BORROW_LIST, m_cBorrowListCtrl);
DDX_Control(pDX, IDC_FINANCE_BORROW_DELETE_BT, m_cDeleteBt);
DDX_Control(pDX, IDC_FINANCE_BORROW_UPDATE_BT, m_cUpdateBt);
DDX_Control(pDX, IDC_FINANCE_BORROW_PRINT_BT, m_cPrintBt);
}
BEGIN_MESSAGE_MAP(CFinanceBorrowDlg, CDialog)
ON_BN_CLICKED(IDC_FINANCE_BORROW_ALL_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowAllBt)
ON_BN_CLICKED(IDC_BORROW_KIND_BT, &CFinanceBorrowDlg::OnBnClickedBorrowKindBt)
ON_BN_CLICKED(IDC_FINANCE_BORROW_ADD_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowAddBt)
ON_BN_CLICKED(IDC_FINANCE_BORROW_UPDATE_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowUpdateBt)
ON_BN_CLICKED(IDC_FINANCE_BORROW_DELETE_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowDeleteBt)
ON_BN_CLICKED(IDC_FINANCE_BORROW_SEARCH_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowSearchBt)
ON_WM_QUERYDRAGICON()//打印
ON_BN_CLICKED(IDC_FINANCE_BORROW_PRINT_BT, &CFinanceBorrowDlg::OnBnClickedFinanceBorrowPrintBt)
ON_WM_CTLCOLOR()
ON_NOTIFY(HDN_ITEMCLICK, 0, &CFinanceBorrowDlg::OnHdnItemclickFinanceBorrowList)
ON_WM_CLOSE()
ON_WM_CONTEXTMENU()
ON_WM_TIMER()
ON_COMMAND(ID_BORROW_ALL, &CFinanceBorrowDlg::OnBorrowAll)
ON_COMMAND(ID_BORROW_KIND, &CFinanceBorrowDlg::OnBorrowKind)
ON_COMMAND(ID_BORROW_ADD, &CFinanceBorrowDlg::OnBorrowAdd)
ON_COMMAND(ID_BORROW_UPDATE, &CFinanceBorrowDlg::OnBorrowUpdate)
ON_COMMAND(ID_BORROW_DELETE, &CFinanceBorrowDlg::OnBorrowDelete)
ON_COMMAND(ID_BORROW_SEARCH, &CFinanceBorrowDlg::OnBorrowSearch)
ON_COMMAND(ID_BORROW_PRINT, &CFinanceBorrowDlg::OnBorrowPrint)
ON_UPDATE_COMMAND_UI(ID_BORROW_UPDATE, &CFinanceBorrowDlg::OnUpdateBorrowUpdate )
ON_UPDATE_COMMAND_UI(ID_BORROW_DELETE, &CFinanceBorrowDlg::OnUpdateBorrowDelete )
ON_UPDATE_COMMAND_UI(ID_BORROW_PRINT, &CFinanceBorrowDlg::OnUpdateBorrowPrint )
ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()
// CFinanceBorrowDlg 消息处理程序
void CFinanceBorrowDlg::ViewAll()
{
BeginWaitCursor();
CString s;
int Length;
m_cBorrowListCtrl.DeleteAllItems ();
if(m_pSet.IsOpen ())
m_pSet.Close ();
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Borrow order by bDate");
m_pSet.m_strFilter .Empty ();
int count;
count=m_pSet.GetRecordCount ();
if(count==0)//如果该数据表为空,则不用显示
{
m_pSet.Close ();
EndWaitCursor();
return ;
}
m_pSet.MoveFirst ();
int i=0;
while (!m_pSet.IsEOF ())
{
m_cBorrowListCtrl.InsertItem(i,m_pSet.m_bOtherName ,0);
m_cBorrowListCtrl.SetItemText (i,1,m_pSet.m_bAction );
s.Format (L"%f",m_pSet.m_bAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (i,2,s );
m_cBorrowListCtrl.SetItemText (i,5,FormatDate(m_pSet.m_bDate ) );
if(m_pSet.m_bAction ==L"借入"||m_pSet.m_bAction ==L"借出")
{//当借入借出的时候,不用显示扔欠余额,但是要显示有效日期
m_cBorrowListCtrl.SetItemText (i,6,L"");
m_cBorrowListCtrl.SetItemText (i,3,FormatDate(m_pSet.m_bStartDate ));
m_cBorrowListCtrl.SetItemText (i,4,FormatDate(m_pSet.m_bEndDate ) );
}
else//否则,刚好相反
{
s.Format (L"%f",m_pSet.m_bMoneyLeft);
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (i,6,s);
m_cBorrowListCtrl.SetItemText (i,3,L"");
m_cBorrowListCtrl.SetItemText (i,4,L"");
}
m_cBorrowListCtrl.SetItemText (i,7,m_pSet.m_bRemark );
s.Format (L"%d",m_pSet.m_bId );
m_cBorrowListCtrl.SetItemText (i,8,s);
i++;
m_pSet.MoveNext ();
}
m_pSet.Close ();
//现在在右边显示个数
m_iBorrowAmount=i;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
}
void CFinanceBorrowDlg::OnBnClickedFinanceBorrowAllBt()
{
// TODO: 在此添加控件通知处理程序代码
ViewAll();
}
void CFinanceBorrowDlg::Kind()
{
CString s;
int Length;
int i=0;
CFinanceBorrowKindDlg dlg;
if(dlg.DoModal ()==IDOK)
{
BeginWaitCursor();
m_cBorrowListCtrl.DeleteAllItems ();
if(m_pSet.IsOpen ())
m_pSet.Close ();
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Borrow order by bDate");
m_pSet.m_strFilter .Empty ();
m_pSet.Requery ();
if(m_pSet.IsEOF ())
{
m_iBorrowAmount=i;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
else
{
if(m_pSet.GetRecordCount ()==0)
{
m_iBorrowAmount=i;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
m_pSet.Close ();
EndWaitCursor();
return ;
}
m_pSet.MoveFirst ();
while (!m_pSet.IsEOF ())
{
if(!(dlg.m_iKind==0&&m_pSet.m_bAction ==L"借入"
||dlg.m_iKind ==1&&m_pSet.m_bAction ==L"借出"
||dlg.m_iKind ==2&&m_pSet.m_bAction ==L"还回"
||dlg.m_iKind ==3&&m_pSet.m_bAction ==L"还欠"))
{
m_pSet.MoveNext ();
continue;
}
m_cBorrowListCtrl.InsertItem(i,m_pSet.m_bOtherName ,0);
m_cBorrowListCtrl.SetItemText (i,1,m_pSet.m_bAction );
s.Format (L"%f",m_pSet.m_bAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (i,2,s );
m_cBorrowListCtrl.SetItemText (i,5,FormatDate(m_pSet.m_bDate ) );
if(m_pSet.m_bAction ==L"借入"||m_pSet.m_bAction ==L"借出")
{//当借入借出的时候,不用显示扔欠余额,但是要显示有效日期
m_cBorrowListCtrl.SetItemText (i,6,L"");
m_cBorrowListCtrl.SetItemText (i,3,FormatDate(m_pSet.m_bStartDate ));
m_cBorrowListCtrl.SetItemText (i,4,FormatDate(m_pSet.m_bEndDate ) );
}
else//否则,刚好相反
{
s.Format (L"%f",m_pSet.m_bMoneyLeft);
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (i,6,s);
m_cBorrowListCtrl.SetItemText (i,3,L"");
m_cBorrowListCtrl.SetItemText (i,4,L"");
}
m_cBorrowListCtrl.SetItemText (i,7,m_pSet.m_bRemark );
s.Format (L"%d",m_pSet.m_bId );
m_cBorrowListCtrl.SetItemText (i,8,s);
m_pSet.MoveNext ();
i++;
}
m_pSet.Close ();
if(i==0)
{
m_iBorrowAmount=i;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
//现在在右边显示个数
m_iBorrowAmount=i;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
}
EndWaitCursor();
}
}
void CFinanceBorrowDlg::OnBnClickedBorrowKindBt()
{
// TODO: 在此添加控件通知处理程序代码
Kind();
}
void CFinanceBorrowDlg::Add ()
{
CString s;
int Length;
CFinanceBorrowAddDlg dlg;
if(dlg.DoModal ()==IDOK)
{
if(!theApp.m_db.CanTransact ())
{
//虽然不支持事务处理的数据库很少,但是我强硬地不允许这种情况出现
MessageBox(L"\n系统不支持事务处理,添加不成功!\n",L"错误", MB_ICONSTOP);
return ;
}
theApp.m_db.BeginTrans ();//开始事务处理
TRY
{
//先添加借贷表中的信息
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Borrow order by bDate");
m_pSet.m_strFilter.Empty ();
m_pSet.AddNew ();
m_pSet.m_bOtherName =dlg.m_sOtherName ;
m_pSet.m_bAction =dlg.m_sAction ;
m_pSet.m_bAmount =dlg.m_dAmount ;
if(dlg.m_sAction ==L"借入"||dlg.m_sAction ==L"借出")
{
m_pSet.m_bStartDate =dlg.m_tStartDate ;
m_pSet.m_bEndDate =dlg.m_tEndDate ;
}
m_pSet.m_bDate =dlg.m_tDate ;
m_pSet.m_bMoneyLeft =dlg.m_dMoneyLeft ;
m_pSet.m_bRemark =dlg.m_sRemark ;
m_pSet.Update ();
m_pSet.MoveLast ();
m_pSet.Close ();
//再添加现金里的信息,默认的情况是:从现金中借贷
double MoneyLast;
if(m_pCashSet.IsOpen ())
m_pCashSet.Close ();
m_pCashSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Cash order by cDate ASC");
m_pCashSet.m_strFilter .Empty ();
if(m_pCashSet.GetRecordCount ()==0)
MoneyLast=0;
else
{
m_pCashSet.MoveLast ();
MoneyLast=m_pCashSet.m_cAmount ;
}
if(dlg.m_sAction ==L"借出"||dlg.m_sAction ==L"还出")//都是从现金里要钱
MoneyLast-=dlg.m_dAmount ;
else
MoneyLast+=dlg.m_dAmount ;
m_pCashSet.AddNew ();
m_pCashSet.m_cAmount =MoneyLast;
m_pCashSet.m_cDate =CTime::GetCurrentTime();
m_pCashSet.Update();
m_pCashSet.MoveLast ();
m_pCashSet.Close ();
theApp.m_db.CommitTrans ();//添加成功了
}
CATCH_ALL(e)
{
theApp.m_db.Rollback ();
MessageBox(L"\n事务处理出错,添加失败!\n",L"错误", MB_ICONSTOP);
return;
}
END_CATCH_ALL
//添加成功了,就要在列表中显示出来
m_cBorrowListCtrl.InsertItem(0,dlg.m_sOtherName ,0);
m_cBorrowListCtrl.SetItemText (0,1,dlg.m_sAction );
s.Format (L"%f",dlg.m_dAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (0,2,s );
m_cBorrowListCtrl.SetItemText (0,5,FormatDate(dlg.m_tDate ) );
if(dlg.m_sAction ==L"借入"||dlg.m_sAction ==L"借出")
{
m_cBorrowListCtrl.SetItemText (0,6,L"");
m_cBorrowListCtrl.SetItemText (0,3,FormatDate(dlg.m_tStartDate ));
m_cBorrowListCtrl.SetItemText (0,4,FormatDate(dlg.m_tEndDate ) );
}
else
{
s.Format (L"%f",dlg.m_dMoneyLeft );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cBorrowListCtrl.SetItemText (0,6,s);
m_cBorrowListCtrl.SetItemText (0,3,L"");
m_cBorrowListCtrl.SetItemText (0,4,L"" );
}
m_cBorrowListCtrl.SetItemText (0,7,dlg.m_sRemark );
s.Format (L"%d",m_pSet.m_bId );
m_cBorrowListCtrl.SetItemText (0,8,s);
//然后再在个数中加一,显示给用户
m_iBorrowAmount++;
s.Format (L"%d",m_iBorrowAmount);
SetDlgItemText(IDC_BORROW_AMOUNT_STATIC,s);//显示
}
}
void CFinanceBorrowDlg::OnBnClickedFinanceBorrowAddBt()
{
// TODO: 在此添加控件通知处理程序代码
Add();
}
void CFinanceBorrowDlg::Update()
{
CString s;
int Length;
POSITION pos = m_cBorrowListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
MessageBox(L"你没有选择要修改的借贷\n请在列表中选择要修改的借贷!",L"提示",MB_ICONEXCLAMATION);
return ;//没有选择表项则不用做下面的事情
}
else
{
if(!theApp.m_db.CanTransact ())
{
//虽然不支持事务处理的数据库很少,但是我强硬地不允许这种情况出现
MessageBox(L"\n系统不支持事务处理,修改不成功!\n",L"错误", MB_ICONSTOP);
return ;
}
int nItem = m_cBorrowListCtrl.GetNextSelectedItem(pos);//列表中的项目序号也即数据库中的编号
//下面获取该表项的数据,用于在修改对话框中显示
int Id=_ttol(m_cBorrowListCtrl.GetItemText (nItem,8));
if(m_pSet.IsOpen ())
m_pSet.Close ();
m_pSet.Open ();
m_pSet.m_strFilter .Empty ();
m_pSet.MoveFirst ();
while(!m_pSet.IsEOF ())
{
if(m_pSet.m_bId ==Id)//说明找到了相应的那个字段
{
m_iFinanceBorrow_Id=m_pSet.m_bId ;
m_sFinanceBorrow_OtherName=m_pSet.m_bOtherName ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -