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

📄 financetangibledlg.cpp

📁 这是一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -