financeincomedlg.cpp
来自「这是一个学生信息管理系统」· C++ 代码 · 共 857 行 · 第 1/2 页
CPP
857 行
// FinanceIncomeDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "SMS.h"
#include "FinanceIncomeDlg.h"
// CFinanceIncomeDlg 对话框
IMPLEMENT_DYNAMIC(CFinanceIncomeDlg, CDialog)
CFinanceIncomeDlg::CFinanceIncomeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFinanceIncomeDlg::IDD, pParent)
, m_iIncomeAmount(0)
, m_pSet(&theApp.m_db )
, m_pCashSet(&theApp.m_db)
{
//显示窗口颜色
m_backcolor=m_RGB_BkColor;
m_brush.CreateSolidBrush(m_backcolor);
m_bItemClick=false;
}
CFinanceIncomeDlg::~CFinanceIncomeDlg()
{
}
void CFinanceIncomeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_INCOME_AMOUNT_STATIC, m_iIncomeAmount);
DDX_Control(pDX, IDC_FINANCE_INCOME_LIST, m_cIncomeListCtrl);
DDX_Control(pDX, IDC_FINANCE_INCOME_DELETE_BT, m_cDeleteBt);
DDX_Control(pDX, IDC_FINANCE_INCOME_UPDATE_BT, m_cUpdateBt);
DDX_Control(pDX, IDC_FINANCE_INCOME_PRINT_BT, m_cPrintBt);
}
BEGIN_MESSAGE_MAP(CFinanceIncomeDlg, CDialog)
ON_BN_CLICKED(IDC_FINANCE_INCOME_ALL_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomeAllBt)
ON_BN_CLICKED(IDC_INCOME_KIND_BT, &CFinanceIncomeDlg::OnBnClickedIncomeKindBt)
ON_BN_CLICKED(IDC_FINANCE_INCOME_ADD_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomeAddBt)
ON_BN_CLICKED(IDC_FINANCE_INCOME_UPDATE_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomeUpdateBt)
ON_BN_CLICKED(IDC_FINANCE_INCOME_DELETE_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomeDeleteBt)
ON_BN_CLICKED(IDC_FINANCE_INCOME_SEARCH_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomeSearchBt)
ON_WM_QUERYDRAGICON()//打印
ON_BN_CLICKED(IDC_FINANCE_INCOME_PRINT_BT, &CFinanceIncomeDlg::OnBnClickedFinanceIncomePrintBt)
ON_WM_CTLCOLOR()
ON_NOTIFY(HDN_ITEMCLICK, 0, &CFinanceIncomeDlg::OnHdnItemclickFinanceIncomeList)
ON_WM_CLOSE()
ON_WM_CONTEXTMENU()
ON_WM_TIMER()
ON_COMMAND(ID_INCOME_ALL, &CFinanceIncomeDlg::OnIncomeAll)
ON_COMMAND(ID_INCOME_KIND, &CFinanceIncomeDlg::OnIncomeKind)
ON_COMMAND(ID_INCOME_ADD, &CFinanceIncomeDlg::OnIncomeAdd)
ON_COMMAND(ID_INCOME_UPDATE, &CFinanceIncomeDlg::OnIncomeUpdate)
ON_COMMAND(ID_INCOME_DELETE, &CFinanceIncomeDlg::OnIncomeDelete)
ON_COMMAND(ID_INCOME_SEARCH, &CFinanceIncomeDlg::OnIncomeSearch)
ON_COMMAND(ID_INCOME_PRINT, &CFinanceIncomeDlg::OnIncomePrint)
ON_UPDATE_COMMAND_UI(ID_INCOME_UPDATE, &CFinanceIncomeDlg::OnUpdateIncomeUpdate )
ON_UPDATE_COMMAND_UI(ID_INCOME_DELETE, &CFinanceIncomeDlg::OnUpdateIncomeDelete )
ON_UPDATE_COMMAND_UI(ID_INCOME_PRINT, &CFinanceIncomeDlg::OnUpdateIncomePrint )
ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()
// CFinanceIncomeDlg 消息处理程序
void CFinanceIncomeDlg::ViewAll()
{
BeginWaitCursor();
CString s;
int Length;
m_cIncomeListCtrl.DeleteAllItems ();
if(m_pSet.IsOpen ())
m_pSet.Close ();
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Income order by iDate");
m_pSet.m_strFilter .Empty ();
int count;
count=m_pSet.GetRecordCount ();
if(count==0)//如果该数据表为空,则不用显示
{
EndWaitCursor();
m_pSet.Close ();
return ;
}
m_pSet.MoveFirst ();
int i=0;
while (!m_pSet.IsEOF ())
{
m_cIncomeListCtrl.InsertItem(i,(CString)m_pSet.m_iSource ,0);
s.Format (L"%f",m_pSet.m_iAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cIncomeListCtrl.SetItemText (i,1,s );
m_cIncomeListCtrl.SetItemText (i,2,FormatDate(m_pSet.m_iDate ));
m_cIncomeListCtrl.SetItemText (i,3,(CString)m_pSet.m_iFlow );
m_cIncomeListCtrl.SetItemText (i,4,(CString)m_pSet.m_iRemark );
s.Format (L"%d",m_pSet.m_iId );
m_cIncomeListCtrl.SetItemText (i,5,s);
i++;
m_pSet.MoveNext ();
}
m_pSet.Close ();
//现在在右边显示个数
m_iIncomeAmount=i;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
EndWaitCursor();
}
void CFinanceIncomeDlg::OnBnClickedFinanceIncomeAllBt()
{
// TODO: 在此添加控件通知处理程序代码
ViewAll();
}
void CFinanceIncomeDlg::Kind()
{
CString s;
int Length;
int i=0;
CFinanceIncomeKindDlg dlg;
if(dlg.DoModal ()==IDOK)
{
BeginWaitCursor();
m_cIncomeListCtrl.DeleteAllItems ();
if(m_pSet.IsOpen ())
m_pSet.Close ();
CString str;
str="Select * from Income where iSource='";
str+=dlg.m_sKind ;
str+="' order by iDate";
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
m_pSet.m_strFilter .Empty ();
m_pSet.Requery ();
if(m_pSet.IsEOF ())
{
m_iIncomeAmount=i;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
else
{
if(m_pSet.GetRecordCount ()==0)
{
m_iIncomeAmount=i;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
EndWaitCursor();
return ;
}
m_pSet.MoveFirst ();
while (!m_pSet.IsEOF ())
{
m_cIncomeListCtrl.InsertItem(i,m_pSet.m_iSource ,0);
s.Format (L"%f",m_pSet.m_iAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cIncomeListCtrl.SetItemText (i,1,s );
m_cIncomeListCtrl.SetItemText (i,2,FormatDate(m_pSet.m_iDate ));
m_cIncomeListCtrl.SetItemText (i,3,m_pSet.m_iFlow );
m_cIncomeListCtrl.SetItemText (i,4,m_pSet.m_iRemark );
s.Format (L"%d",m_pSet.m_iId );
m_cIncomeListCtrl.SetItemText (i,5,s);
m_pSet.MoveNext ();
i++;
}
m_pSet.Close ();
if(i==0)
{
m_iIncomeAmount=i;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
m_pSet.Close ();
return ;
}
//现在在右边显示个数
m_iIncomeAmount=i;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
}
EndWaitCursor();
}
}
void CFinanceIncomeDlg::OnBnClickedIncomeKindBt()
{
// TODO: 在此添加控件通知处理程序代码
Kind();
}
void CFinanceIncomeDlg::Add()
{
CString s;
int Length;
CFinanceIncomeAddDlg 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 Income order by iDate");
m_pSet.m_strFilter.Empty ();
m_pSet.AddNew ();
m_pSet.m_iSource=dlg.m_sSource ;
m_pSet.m_iAmount=dlg.m_dAmount ;
m_pSet.m_iDate =dlg.m_tDate ;
m_pSet.m_iFlow =dlg.m_sFlow ;
m_pSet.m_iRemark =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 ;
}
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_cIncomeListCtrl.InsertItem(0,dlg.m_sSource ,0);
s.Format (L"%f",dlg.m_dAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cIncomeListCtrl.SetItemText (0,1,s );
m_cIncomeListCtrl.SetItemText (0,2,FormatDate(dlg.m_tDate ));
m_cIncomeListCtrl.SetItemText (0,3,dlg.m_sFlow );
m_cIncomeListCtrl.SetItemText (0,4,dlg.m_sRemark );
s.Format (L"%d",m_pSet.m_iId );
m_cIncomeListCtrl.SetItemText (0,5,s);
//然后再在个数中加一,显示给用户
m_iIncomeAmount++;
s.Format (L"%d",m_iIncomeAmount);
SetDlgItemText(IDC_INCOME_AMOUNT_STATIC,s);//显示
}
}
void CFinanceIncomeDlg::OnBnClickedFinanceIncomeAddBt()
{
// TODO: 在此添加控件通知处理程序代码
if(MessageBox(L"\n为了让您的财务清楚,建议进入收入向导进行登记,否则进入默认处理。\n按确定进入收入向导,按取消进入默认处理。\n",L"新增收入",MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2)==IDCANCEL)
Add();
else
{
//直接转移到收入向导
CIncomeWizardDlg dlg;
dlg.DoModal ();
}
}
void CFinanceIncomeDlg::Update ()
{
CString s;
int Length;
POSITION pos = m_cIncomeListCtrl.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_cIncomeListCtrl.GetNextSelectedItem(pos);//列表中的项目序号也即数据库中的编号
//下面获取该表项的数据,用于在修改对话框中显示
int Id=_ttol(m_cIncomeListCtrl.GetItemText (nItem,5));
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_iId ==Id)//说明找到了相应的那个字段
{
m_iFinanceIncome_Id=m_pSet.m_iId ;
m_sFinanceIncome_Source=m_pSet.m_iSource ;
m_dFinanceIncome_Amount=m_pSet.m_iAmount ;
m_tFinanceIncome_Date=m_pSet.m_iDate ;
m_sFinanceIncome_Flow=m_pSet.m_iFlow ;
m_sFinanceIncome_Remark=m_pSet.m_iRemark ;
break;
}
m_pSet.MoveNext ();
}
m_pSet.Close ();//记得要关闭!
//下面弹出修改对话框,初始化数据由上面部分提供
CFinanceIncomeUpdateDlg dlg;
if(dlg.DoModal ()!=IDOK)
{
return ;//万一用户没有输入正确信息,则退出,不给修改
}
theApp.m_db.BeginTrans ();//开始事务处理
TRY
{
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Income order by iDate");
m_pSet.m_strFilter.Empty ();
m_pSet.MoveFirst ();//刚开始移动到第一个位置
while(!m_pSet.IsEOF ())
{
if(m_pSet.m_iId ==m_iFinanceIncome_Id)
{
m_pSet.Edit ();
m_pSet.m_iSource=dlg.m_sSource ;
m_pSet.m_iAmount=dlg.m_dAmount ;
m_pSet.m_iDate =dlg.m_tDate ;
m_pSet.m_iFlow =dlg.m_sFlow ;
m_pSet.m_iRemark =dlg.m_sRemark ;
m_pSet.Update ();
m_pSet.Requery ();
m_pSet.MoveNext ();
break;
}
m_pSet.MoveNext ();
}
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 ;
}
MoneyLast+=dlg.m_dAmount-m_dFinanceIncome_Amount ;
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_cIncomeListCtrl.DeleteItem (nItem);
//再添加新的
m_cIncomeListCtrl.InsertItem(nItem,dlg.m_sSource ,0);
s.Format (L"%f",dlg.m_dAmount );
Length=s.GetLength ();
s.Delete (Length-4,4);
m_cIncomeListCtrl.SetItemText (nItem,1,s );
m_cIncomeListCtrl.SetItemText (nItem,2,FormatDate(dlg.m_tDate ));
m_cIncomeListCtrl.SetItemText (nItem,3,dlg.m_sFlow );
m_cIncomeListCtrl.SetItemText (nItem,4,dlg.m_sRemark );
s.Format (L"%d",m_pSet.m_iId );
m_cIncomeListCtrl.SetItemText (nItem,5,s);
}
}
void CFinanceIncomeDlg::OnBnClickedFinanceIncomeUpdateBt()
{
// TODO: 在此添加控件通知处理程序代码
Update();
}
void CFinanceIncomeDlg::Delete ()
{
POSITION pos = m_cIncomeListCtrl.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_cIncomeListCtrl.GetNextSelectedItem(pos);
CString str;
str="Select * from Income order by iDate";
m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
//获取该单词
int m_iId;
m_iId=_ttol(m_cIncomeListCtrl.GetItemText (nItem,5));
m_pSet.m_strFilter.Empty ();
m_pSet.MoveFirst ();//刚开始移动到第一个位置
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?