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

📄 incomewizarddlg.cpp

📁 这是一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// IncomeWizardDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "SMS.h"
#include "IncomeWizardDlg.h"


// CIncomeWizardDlg 对话框

IMPLEMENT_DYNAMIC(CIncomeWizardDlg, CDialog)

CIncomeWizardDlg::CIncomeWizardDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CIncomeWizardDlg::IDD, pParent)
	, m_pIncomeSet(&theApp.m_db )
	, m_pBankSet(&theApp.m_db )
	, m_pOutcomeSet(&theApp.m_db )
	, m_pTangibleSet(&theApp.m_db )
	, m_pInvestSet(&theApp.m_db )
	, m_pBorrowSet(&theApp.m_db )
	, m_pCashSet(&theApp.m_db )
{
	pPageLink=NULL;
	m_pFlow=new tagFlow;
	m_pCount=new tagCount;
	nPageCount=0;
	nCurrentPage=0;
	m_backcolor=m_RGB_BkColor;
	m_brush.CreateSolidBrush(m_backcolor);
	m_pIncome_Step1        =new CIncomeWizardIncomeDlg ;
	m_pBankCount_Step2     =new CIncomeWizardBankCountDlg ;
	m_pBank_Step3          =new CIncomeWizardBankDlg ;
	m_pBank1_Step4         =new CIncomeWizardBankDlg ;
	m_pBank2_Step5         =new CIncomeWizardBankDlg ;
	m_pBank3_Step6         =new CIncomeWizardBankDlg ;
	m_pBank4_Step7         =new CIncomeWizardBankDlg ;
    m_pOutcome_Step8       =new CIncomeWizardOutcomeDlg ;
	m_pTangibleCount_Step9 =new CIncomeWizardTangibleCountDlg ;
	m_pTangible_Step10     =new CIncomeWizardTangibleDlg ;
	m_pTangible1_Step11    =new CIncomeWizardTangibleDlg ;
	m_pTangible2_Step12    =new CIncomeWizardTangibleDlg ;
	m_pTangible3_Step13    =new CIncomeWizardTangibleDlg ;
	m_pTangible4_Step14    =new CIncomeWizardTangibleDlg ;
	m_pInvestCount_Step15  =new CIncomeWizardInvestCountDlg ;
	m_pInvest_Step16       =new CIncomeWizardInvestDlg ;
	m_pInvest1_Step17      =new CIncomeWizardInvestDlg ;
	m_pInvest2_Step18      =new CIncomeWizardInvestDlg ;
	m_pInvest3_Step19      =new CIncomeWizardInvestDlg ;
	m_pInvest4_Step20      =new CIncomeWizardInvestDlg ;
	m_pBorrowCount_Step21  =new CIncomeWizardBorrowCountDlg ;
	m_pBorrow_Step22       =new CIncomeWizardBorrowDlg ;
	m_pBorrow1_Step23      =new CIncomeWizardBorrowDlg ;
	m_pBorrow2_Step24      =new CIncomeWizardBorrowDlg ;
	m_pBorrow3_Step25      =new CIncomeWizardBorrowDlg ;
	m_pBorrow4_Step26      =new CIncomeWizardBorrowDlg ;
	m_pFinish_Step27       =new CIncomeWizardFinishDlg ;
	m_pBank_Step3->m_bOutcome =false;
	m_pBank1_Step4->m_bOutcome =false;
	m_pBank2_Step5->m_bOutcome =false;
	m_pBank3_Step6->m_bOutcome =false;
	m_pBank4_Step7->m_bOutcome =false;
	m_bWzOutcome=false;
}

CIncomeWizardDlg::~CIncomeWizardDlg()
{

}

void CIncomeWizardDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CIncomeWizardDlg, CDialog)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_FINISH, &CIncomeWizardDlg::OnBnClickedFinish)
	ON_BN_CLICKED(IDC_PREV, &CIncomeWizardDlg::OnBnClickedPrev)
	ON_BN_CLICKED(IDC_NEXT, &CIncomeWizardDlg::OnBnClickedNext)
	ON_BN_CLICKED(IDC_CANCEL, &CIncomeWizardDlg::OnBnClickedCancel)
	ON_WM_CTLCOLOR()
END_MESSAGE_MAP()


// CIncomeWizardDlg 消息处理程序
void CIncomeWizardDlg::SetWizButton(UINT uFlag) 
{
	if(uFlag==0)//第一步
	{
		GetDlgItem(IDC_CANCEL)->EnableWindow(TRUE);
		GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
		GetDlgItem(IDC_NEXT)->EnableWindow(TRUE);
		GetDlgItem(IDC_FINISH)->EnableWindow (FALSE);
		return ;
	}
    if(uFlag>=(nPageCount-1))//最后一步
	{
		GetDlgItem(IDC_CANCEL)->EnableWindow(TRUE);
		GetDlgItem(IDC_PREV)->EnableWindow(TRUE);
		GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
		GetDlgItem(IDC_FINISH)->EnableWindow (TRUE);
		return ;
	}
	//中间步骤
	GetDlgItem(IDC_CANCEL)->EnableWindow(TRUE);
	GetDlgItem(IDC_PREV)->EnableWindow(TRUE);
	GetDlgItem(IDC_NEXT)->EnableWindow(TRUE);
	GetDlgItem(IDC_FINISH)->EnableWindow (FALSE);
}
void CIncomeWizardDlg::ShowPage (UINT nPos)
{
	struct PAGELINK* pTemp=pPageLink;
	while(pTemp)
	{
		if (pTemp->nNum==nPos)//中间部分
		{
			pTemp->pDialog->ShowWindow(SW_SHOW);
		}
		else
			pTemp->pDialog->ShowWindow(SW_HIDE);
		pTemp=pTemp->Next;
	}
	if (nPos>=nPageCount)  //最后一页
	{
		nCurrentPage=nPageCount;
		SetWizButton(nPageCount);
		return;
	}
	if (nPos<=1) //第一页
	{
		nCurrentPage=1;
		SetWizButton(0);
		return;
	}
    //中间部分的结果就是:所有的都必须显示,故
	for(int i=1; i<(int)nPageCount-1; i++)
		SetWizButton(i);
}

void CIncomeWizardDlg::AddPage(CDialog* pDialog, UINT nID)
{
	struct PAGELINK* pTemp = pPageLink;
	//插入新生成的节点
	struct PAGELINK* pNewPage = new PAGELINK;
	pNewPage->pDialog = pDialog;
	pNewPage->pDialog->Create(nID,this);
	
	// Is window created
	ASSERT(::IsWindow(pNewPage->pDialog->m_hWnd));
    //检查每页的样式
	DWORD dwStyle = pNewPage->pDialog->GetStyle();
	ASSERT((dwStyle & WS_CHILD) != 0); //子窗口
	ASSERT((dwStyle & WS_BORDER) == 0);//无边框
	pNewPage->pDialog->ShowWindow(SW_HIDE);//显示
	pNewPage->pDialog->MoveWindow(rectPage);
	pNewPage->Next=NULL;
	pNewPage->nNum=++nPageCount; //计数器自增
	if (pTemp)
	{
		while (pTemp->Next) pTemp=pTemp->Next; //移动到链未
		pTemp->Next=pNewPage;

	}
	else
		pPageLink=pNewPage; //若是第一个
}
BOOL CIncomeWizardDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	SetWindowText(L"收入登记向导");
	CRect Rect1;
	GetWindowRect(&Rect1); //获取窗口大小
	int nCaption = ::GetSystemMetrics(SM_CYCAPTION);
	int nXEdge = ::GetSystemMetrics(SM_CXEDGE);
	int nYEdge = ::GetSystemMetrics(SM_CYEDGE);
	CRect Rect2;
	GetDlgItem(IDC_POS)->GetWindowRect(&Rect2); //获取显示位置
	Rect1.top=Rect1.top+nCaption+nYEdge; //相对坐标
	Rect1.left=Rect1.left+2*nXEdge;
	//计算位置
	rectPage.top=Rect2.top-Rect1.top;
	rectPage.left=Rect2.left-Rect1.left;
	rectPage.bottom=Rect2.bottom-Rect1.top;
	rectPage.right=Rect2.right-Rect1.left;

	//初始化要添加的页
	AddPage(m_pIncome_Step1,IDD_INCOME_WIZARD_INCOME_DLG);
	AddPage(m_pBankCount_Step2,IDD_INCOME_WIZARD_BANK_COUNT_DLG);
	AddPage(m_pBank_Step3,IDD_INCOME_WIZARD_BANK_DLG);
	AddPage(m_pBank1_Step4,IDD_INCOME_WIZARD_BANK_DLG);
	AddPage(m_pBank2_Step5,IDD_INCOME_WIZARD_BANK_DLG);
	AddPage(m_pBank3_Step6,IDD_INCOME_WIZARD_BANK_DLG);
    AddPage(m_pBank4_Step7,IDD_INCOME_WIZARD_BANK_DLG);
    AddPage(m_pOutcome_Step8,IDD_INCOME_WIZARD_OUTCOME_DLG);
    AddPage(m_pTangibleCount_Step9, IDD_INCOME_WIZARD_TANGIBLE_COUNT_DIALOG);
    AddPage(m_pTangible_Step10, IDD_INCOME_WIZARD_TANGIBLE_DLG);
    AddPage(m_pTangible1_Step11, IDD_INCOME_WIZARD_TANGIBLE_DLG);
    AddPage(m_pTangible2_Step12, IDD_INCOME_WIZARD_TANGIBLE_DLG);
    AddPage(m_pTangible3_Step13, IDD_INCOME_WIZARD_TANGIBLE_DLG);
    AddPage(m_pTangible4_Step14, IDD_INCOME_WIZARD_TANGIBLE_DLG);
	AddPage(m_pInvestCount_Step15,IDD_INCOME_WIZARD_INVEST_COUNT_DIALOG);
	AddPage(m_pInvest_Step16,IDD_INCOME_WIZARD_INVEST_DLG);
	AddPage(m_pInvest1_Step17,IDD_INCOME_WIZARD_INVEST_DLG);
	AddPage(m_pInvest2_Step18,IDD_INCOME_WIZARD_INVEST_DLG);
	AddPage(m_pInvest3_Step19,IDD_INCOME_WIZARD_INVEST_DLG);
	AddPage(m_pInvest4_Step20,IDD_INCOME_WIZARD_INVEST_DLG);
	AddPage(m_pBorrowCount_Step21,IDD_INCOME_WIZARD_BORROW_COUNT_DLG);
	AddPage(m_pBorrow_Step22,IDD_INCOME_WIZARD_BORROW_DLG);
	AddPage(m_pBorrow1_Step23,IDD_INCOME_WIZARD_BORROW_DLG);
	AddPage(m_pBorrow2_Step24,IDD_INCOME_WIZARD_BORROW_DLG);
	AddPage(m_pBorrow3_Step25,IDD_INCOME_WIZARD_BORROW_DLG);
	AddPage(m_pBorrow4_Step26,IDD_INCOME_WIZARD_BORROW_DLG);
    AddPage(m_pFinish_Step27,IDD_INCOME_WIZARD_FINISH_DLG);
	//显示第一页
	ShowPage(1);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CIncomeWizardDlg::OnDestroy()
{
	CDialog::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
	//依次消除每页
	struct PAGELINK* pTemp = pPageLink;
	while(pTemp)
	{
		struct PAGELINK* pNextTemp = pTemp->Next;
		pTemp->pDialog->DestroyWindow();
		delete pTemp->pDialog;
		delete pTemp;
		pTemp = pNextTemp;
	}
}

void CIncomeWizardDlg::OnBnClickedFinish()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!theApp.m_db.CanTransact ())
	{
		//虽然不支持事务处理的数据库很少,但是我强硬地不允许这种情况出现
		MessageBox(L"\n系统不支持事务处理,向导不成功!\n",L"错误", MB_ICONSTOP);
		return ;                                    
	}
	theApp.m_db.BeginTrans ();//开始事务处理
	TRY
	{
	    SaveIncome(m_pIncome_Step1);
		SaveAllBank();
		SaveAllOutcome();
		SaveAllTangible();
		SaveAllInvest();
		SaveAllBorrow();
		SaveAllCash();
        theApp.m_db.CommitTrans ();//添加成功了
	}
	CATCH_ALL(e)
	{
		theApp.m_db.Rollback ();
		MessageBox(L"\n事务处理出错,向导失败!\n",L"错误", MB_ICONSTOP);
		return;
	}
    END_CATCH_ALL
	CDialog::OnOK();
}

void CIncomeWizardDlg::OnBnClickedPrev()
{
	// TODO: 在此添加控件通知处理程序代码
	LinkStack.Pop ();
	int nStep;
	if(LinkStack.IsEmpty ())
		nStep=1;
	else
	    nStep=LinkStack.Pop ();
	UpdateStep(nStep);
    UpdateWindow();
	m_pFinish_Step27->m_cFinish_List .DeleteAllItems ();
}

void CIncomeWizardDlg::OnBnClickedNext()
{
	// TODO: 在此添加控件通知处理程序代码
	switch(nCurrentPage)
	{
	case 1:
		IncomeNext();
		break;
	case 2:
		BankCountNext();
		break;
	case 3:
		BankNext();
		break;
	case 4:
		Bank1Next();
		break;
	case 5:
		Bank2Next();
		break;
	case 6:
		Bank3Next();
		break;
	case 7:
		Bank4Next();
		break;
	case 8:
		OutcomeNext();
		break;
	case 9:
		TangibleCountNext();
		break;
	case 10:
		TangibleNext();
		break;
	case 11:
		Tangible1Next();
		break;
	case 12:
		Tangible2Next();
		break;
	case 13:
		Tangible3Next();
		break;
	case 14:
		Tangible4Next();
		break;
	case 15:
		InvestCountNext();
		break;
	case 16:
		InvestNext();
		break;
	case 17:
		Invest1Next();
		break;
	case 18:
		Invest2Next();
		break;
	case 19:
		Invest3Next();
		break;
	case 20:
		Invest4Next();
		break;
	case 21:
		BorrowCountNext();
		break;
	case 22:
		BorrowNext();
		break;
	case 23:
		Borrow1Next();
		break;
	case 24:
		Borrow2Next();
		break;
	case 25:
		Borrow3Next();
		break;
	case 26:
		Borrow4Next();
		break;
	default:break;
	}
	if(nCurrentPage==nPageCount)
	{
		ListIncome();
		GetDlgItem(IDC_FINISH)->EnableWindow (TRUE);
	}
	UpdateWindow();
	//下面是关键代码,用于处理各个子对话框之间的关系,特别是个数与非个数的关系
}

void CIncomeWizardDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
    CDialog::OnCancel ();
}

void CIncomeWizardDlg::SetCaption (UINT nPos)
{
	CString StrCaption;
	CString m_sCaption[27]=
	{
		L"收入登记向导:第一步",
		L"收入登记向导:银行存款个数",
		L"收入登记向导:银行存款1",
		L"收入登记向导:银行存款2",
		L"收入登记向导:银行存款3",
		L"收入登记向导:银行存款4",
		L"收入登记向导:银行存款5",
		L"收入登记向导:支出",
		L"收入登记向导:购买物品个数",
        L"收入登记向导:购买物品1",
        L"收入登记向导:购买物品2",
		L"收入登记向导:购买物品3",
		L"收入登记向导:购买物品4",
		L"收入登记向导:购买物品5",
        L"收入登记向导:投资个数",
		L"收入登记向导:投资1",
		L"收入登记向导:投资2",
		L"收入登记向导:投资3",
		L"收入登记向导:投资4",
		L"收入登记向导:投资5",
		L"收入登记向导:借贷个数",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -