📄 financetangibledlg.cpp
字号:
MoneyLast=m_pCashSet.m_cAmount ;
}
//假设从已经买了的东西的钱收回来
MoneyLast+=m_dFinanceTangible_Sum;
MoneyLast-=dlg.m_dSum ;//减去消费总额
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_cTangibleListCtrl.DeleteItem (nItem);
//再添加新的
m_cTangibleListCtrl.InsertItem(nItem,dlg.m_sName ,0);
m_cTangibleListCtrl.SetItemText (nItem,1,dlg.m_sKind );
s.Format (L"%d",m_pSet.m_tQuantity );
m_cTangibleListCtrl.SetItemText (nItem,2,s);
s.Format (L"%f",dlg.m_dPrice );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (nItem,3,s );
m_cTangibleListCtrl.SetItemText (nItem,4,FormatDate(dlg.m_tDate ));
s.Format (L"%f",dlg.m_dSum );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (nItem,5,s );
m_cTangibleListCtrl.SetItemText (nItem,6,dlg.m_sRemark );
s.Format (L"%d",m_iFinanceTangible_Id);
m_cTangibleListCtrl.SetItemText (nItem,7,s);
}
}
void CFinanceTangibleDlg::OnBnClickedFinanceTangibleUpdateBt()
{
// TODO: 在此添加控件通知处理程序代码
Update();
}
void CFinanceTangibleDlg::Delete ()
{
POSITION pos = m_cTangibleListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
MessageBox(L"\n你没有选中任何一个财产,不可以删除!\n",L"提示",MB_ICONEXCLAMATION);
}
else
{
if(MessageBox(L"\n此操作将永久删除该项,确定吗?\n",L"删除提醒",MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2)==IDCANCEL)
return ;
while (pos)
{
int nItem = m_cTangibleListCtrl.GetNextSelectedItem(pos);
CString str;
str="Select * from Tangible order by tDate";
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
//获取该单词
int m_iId;
m_iId=_ttol(m_cTangibleListCtrl.GetItemText (nItem,7));
m_pSet.m_strFilter.Empty ();
m_pSet.MoveFirst ();//刚开始移动到第一个位置
while(!m_pSet.IsEOF ())
{
if(m_iId ==m_pSet.m_tId )
{
m_pSet.Delete ();
break;
}
m_pSet.MoveNext ();
}
if(!m_pSet.IsDeleted ())
{
MessageBox(L"\n删除失败!\n",L"错误", MB_ICONSTOP);
return ;
}
m_pSet.MoveNext ();
//数据库删除成功后就删除列表了
m_cTangibleListCtrl.DeleteItem (nItem);
m_pSet.Close ();
//现在在右边显示个数
m_iTangibleAmount--;
CString s;
s.Format (L"%d",m_iTangibleAmount);
SetDlgItemText(IDC_TANGIBLE_AMOUNT_STATIC,s);//显示
}
}
}
void CFinanceTangibleDlg::OnBnClickedFinanceTangibleDeleteBt()
{
// TODO: 在此添加控件通知处理程序代码
Delete();
}
void CFinanceTangibleDlg::Transfer ()
{
CString s;
int Length;
int Quantity;
double Sum;
bool TransferAll=true;//标志是否所有转让,true为所有转让,false为部分转让
POSITION pos = m_cTangibleListCtrl.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_cTangibleListCtrl.GetNextSelectedItem(pos);//列表中的项目序号也即数据库中的编号
//下面获取该表项的数据,用于在转让对话框中显示
int Id=_ttol(m_cTangibleListCtrl.GetItemText (nItem,7));
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_tId ==Id)//说明找到了相应的那个字段
{
m_iFinanceTangible_Id=m_pSet.m_tId ;
m_sFinanceTangible_Name=m_pSet.m_tName ;
m_sFinanceTangible_Kind=m_pSet.m_tKind ;
m_iFinanceTangible_Quantity=m_pSet.m_tQuantity ;
m_dFinanceTangible_Price=m_pSet.m_tPrice ;
m_tFinanceTangible_Date=m_pSet.m_tDate ;
m_dFinanceTangible_Sum=m_pSet.m_tSum ;
m_sFinanceTangible_Remark=m_pSet.m_tRemark ;
break;
}
m_pSet.MoveNext ();
}
m_pSet.Close ();//记得要关闭!
//下面弹出转让对话框,初始化数据由上面部分提供
CFinanceTangibleTransferDlg dlg;
if(dlg.DoModal ()!=IDOK)
{
return ;//万一用户没有输入正确信息,则退出,不给转让
}
theApp.m_db.BeginTrans ();//开始事务处理
TRY
{
//先处理转让表及财物表
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Tangible order by tDate");
m_pSet.m_strFilter.Empty ();
m_pSet.MoveFirst ();//刚开始移动到第一个位置
while(!m_pSet.IsEOF ())
{
if(m_pSet.m_tId ==m_iFinanceTangible_Id)
{
//在财产表中只有当财产数量还剩有的时候才要修改,否则,直接删除!
if(m_pSet.m_tQuantity ==dlg.m_iQuantity )//直接删除!
{
TransferAll=true;
m_pSet.Delete ();
m_pSet.MoveNext ();
break;
}
else
{
TransferAll=false;
m_pSet.Edit ();//只需要修改财产的数量和总价值就行了!
Quantity=m_iFinanceTangible_Quantity-dlg.m_iQuantity ;//登记为剩下的财产数量
m_pSet.m_tQuantity =Quantity;
Sum=Quantity*m_dFinanceTangible_Price;//总价值也要改变!
m_pSet.m_tSum =Sum;
m_pSet.Update ();
m_pSet.Requery ();
m_pSet.MoveNext ();
break;
}
}
m_pSet.MoveNext ();
}
m_pSet.Close ();
//现在,在财产表中修改了,就轮到在转让表中添加了!
if(m_pTransferSet.IsOpen() )
m_pTransferSet.Close ();
m_pTransferSet.Open ();
m_pTransferSet.m_strFilter .Empty ();
m_pTransferSet.AddNew ();
m_pTransferSet.m_tName =dlg.m_sName ;
m_pTransferSet.m_tType =m_sFinanceTangible_Kind;//直接调用那些数据!
m_pTransferSet.m_tBuyerName =dlg.m_sBuyerName ;
m_pTransferSet.m_tQuantity =dlg.m_iQuantity ;
m_pTransferSet.m_tPrice =dlg.m_dPrice ;
m_pTransferSet.m_tSum=dlg.m_dSum ;
m_pTransferSet.m_tDate =dlg.m_tDate ;
m_pTransferSet.m_tRemark =dlg.m_sRemark ;
m_pTransferSet.Update ();
m_pTransferSet.MoveLast ();
m_pTransferSet.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 ;
}
//假设从已经买了的东西的钱收回来
MoneyLast+=dlg.m_dSum ;//加上转让收益
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
//转让成功了,就要在列表中同步显示
//如果所有转让,则直接删除列表中的所有项目
if(TransferAll)
{
m_cTangibleListCtrl.DeleteItem (nItem);
return ;
}
else//否则,还必须把剩下的信息列在相应的行
{
//先删除
m_cTangibleListCtrl.DeleteItem (nItem);
//后添加
m_cTangibleListCtrl.InsertItem(nItem,m_sFinanceTangible_Name ,0);
m_cTangibleListCtrl.SetItemText (nItem,1,m_sFinanceTangible_Kind );
s.Format (L"%d",Quantity );
m_cTangibleListCtrl.SetItemText (nItem,2,s);
s.Format (L"%f",m_dFinanceTangible_Price );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (nItem,3,s );
m_cTangibleListCtrl.SetItemText (nItem,4,FormatDate(m_tFinanceTangible_Date ));
s.Format (L"%f",Sum );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (nItem,5,s );
m_cTangibleListCtrl.SetItemText (nItem,6,m_sFinanceTangible_Remark);
s.Format (L"%d",m_iFinanceTangible_Id);
m_cTangibleListCtrl.SetItemText (nItem,7,s);
}
}
}
void CFinanceTangibleDlg::OnBnClickedFinanceTangibleTransferBt()
{
// TODO: 在此添加控件通知处理程序代码
Transfer();
}
void CFinanceTangibleDlg::Search ()
{
int i=0;
int Length;
CString s;
CString SearchTime;
CString Date;
CString str;
CFinanceTangibleSearchDlg dlg;
if(dlg.DoModal ()==IDOK)
{
BeginWaitCursor();
m_cTangibleListCtrl.DeleteAllItems ();
switch(dlg.m_iItem )
{
case 0:
case 1:
case 3:
if(m_pSet.IsOpen ())
m_pSet.Close ();
str="Select * from Tangible where ";
switch(dlg.m_iItem )
{
case 0:
str+="tName";
break;
case 1:
str+="tPrice";
break;
case 3:
str+="tSum";
break;
}
str+=" like '%";
str+=dlg.m_sKeyWord ;
str+="%' order by tDate";
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
m_pSet.m_strFilter .Empty ();
m_pSet.Requery ();
if(m_pSet.IsEOF ())
{
m_iTangibleAmount=i;
s.Format (L"%d",m_iTangibleAmount);
SetDlgItemText(IDC_TANGIBLE_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
else
{
if(m_pSet.GetRecordCount ()==0)
{
m_iTangibleAmount=i;
s.Format (L"%d",m_iTangibleAmount);
SetDlgItemText(IDC_TANGIBLE_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
m_pSet.MoveFirst ();
while (!m_pSet.IsEOF ())
{
m_cTangibleListCtrl.InsertItem(i,m_pSet.m_tName ,0);
m_cTangibleListCtrl.SetItemText (i,1,m_pSet.m_tKind );
s.Format (L"%d",m_pSet.m_tQuantity );
m_cTangibleListCtrl.SetItemText (i,2,s);
s.Format (L"%f",m_pSet.m_tPrice );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (i,3,s );
m_cTangibleListCtrl.SetItemText (i,4,FormatDate(m_pSet.m_tDate ));
s.Format (L"%f",m_pSet.m_tSum );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cTangibleListCtrl.SetItemText (i,5,s );
m_cTangibleListCtrl.SetItemText (i,6,m_pSet.m_tRemark );
s.Format (L"%d",m_pSet.m_tId );
m_cTangibleListCtrl.SetItemText (i,7,s);
i++;
m_pSet.MoveNext ();
}
}
m_pSet.Close ();
break;
case 2:
SearchTime=DateToString(dlg.m_tSearchDate );
if(m_pSet.IsOpen ())
m_pSet.Close ();
m_pSet.Open ();
m_pSet.m_strFilter .Empty ();
m_pSet.Requery ();
if(m_pSet.GetRecordCount ()==0)
{
m_iTangibleAmount=i;
s.Format (L"%d",m_iTangibleAmount);
SetDlgItemText(IDC_TANGIBLE_AMOUNT_STATIC,s);//显示
m_pSet.Close ();
EndWaitCursor();
return ;
}
m_pSet.MoveFirst ();
while (!m_pSet.IsEOF ())
{
//在这里来判断可以轻松地跳过CTime与CString的差别
Date=DateToString(m_pSet.m_tDate );
if(Date==SearchTime)
{
m_cTangibleListCtrl.InsertItem(i,m_pSet.m_tName ,0);
m_cTangibleListCtrl.SetItemText (i,1,m_pSet.m_tKind );
s.Format (L"%d",m_pSet.m_tQuantity );
m_cTangibleListCtrl.SetItemText (i,2,s);
s.Format (L"%f",m_pSet.m_tPrice );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -