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

📄 mainfrm.cpp

📁 本家庭理财系统是一个简易的家庭理财工具
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "FFMS.h"
#include "GeneralDef.h"
#include "MainFrm.h"
#include "LogDlg.h"
#include "UserDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_MESSAGE(WM_MAXSIZE_MDI,MaxsizeMDIWindow)
	ON_MESSAGE(WM_CLOSE_CHILD_FRAME,CloseChildFrame)	
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	ON_COMMAND(ID_MSG_USER, OnMsgUser)
	ON_COMMAND(ID_MSG_IOTYPE, OnMsgIOType)
	ON_COMMAND(ID_MSG_BANK, OnMsgBank)
	ON_COMMAND(ID_MSG_FAMILY, OnMsgFamily)
	ON_COMMAND(ID_ACC_INFO, OnAccInfo)
	ON_COMMAND(ID_ACC_TRS, OnAccTrs)
	ON_COMMAND(ID_FNC_IO, OnFncIo)
	ON_COMMAND(ID_STA_SEARCH, OnStaSearch)
	ON_COMMAND(ID_FNC_AST, OnFncAst)
	ON_COMMAND(ID_STA_CHART, OnStaChart)
	ON_COMMAND(ID_SYS_COPY, OnSysCopy)
	ON_COMMAND(ID_SYS_RESUME, OnSysResume)
	ON_COMMAND(ID_MSG_ASSET, OnMsgAsset)
	ON_COMMAND(ID_APP_HELP, OnAppHelp)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	m_pMsgFrm=NULL;
	m_pAccFrm=NULL;
	m_pIOFrm=NULL;
	m_pQueFrm=NULL;
	m_pChtFrm=NULL;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	if(CheckLog()==0)
		return -1;
	
	CDC dc, memdc; 
	dc.m_hDC=::GetDC(this-> m_hWndMDIClient); 
	CRect rect; 
	CBitmap bitmap; 
	BITMAP szbitmap; 
	bitmap.LoadBitmap(IDB_BITMAP_BG); 
	bitmap.GetObject(sizeof(BITMAP),&szbitmap); 
	CSize size(szbitmap.bmWidth,szbitmap.bmHeight); 
	memdc.CreateCompatibleDC(&dc); 
	CBitmap *oldbitmap=memdc.SelectObject(&bitmap); 
	GetClientRect(&rect); 
	StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(), 
	memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY); 
	memdc.SelectObject(oldbitmap); 
	memdc.DeleteDC(); 
	dc.DeleteDC();

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
		| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX;
	cs.cx=800;
	cs.cy=600;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::MaxsizeMDIWindow(WPARAM wParam, LPARAM lParam)
{
	lParam=0;
	ASSERT(wParam);
	CMainFrame* pFrame=(CMainFrame*)wParam;
	MDIMaximize(pFrame);
}

void CMainFrame::CloseChildFrame(WPARAM wParam, LPARAM lParam)
{
	lParam=0;
	ASSERT(wParam==FRAME_MSG||wParam==FRAME_ACC||wParam==FRAME_IO||wParam==FRAME_QUE||wParam==FRAME_CHT);
	if(wParam==FRAME_MSG)
		m_pMsgFrm=NULL;
	else if(wParam==FRAME_ACC)
		m_pAccFrm=NULL;
	else if(wParam==FRAME_IO)
		m_pIOFrm=NULL;
	else if(wParam==FRAME_QUE)
		m_pQueFrm=NULL;
	else if(wParam==FRAME_CHT)
		m_pChtFrm=NULL;
}

void CMainFrame::OnAppExit() 
{
	// TODO: Add your command handler code here
	if(IDOK!=MessageBox("确认退出?",NULL,MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2))
		return;
	CMDIFrameWnd::OnClose();
}


int CMainFrame::CheckLog()
{
	CString sql="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Finance;Data Source=(local)";
	CString uid="",upwd="";
	CLogDlg dlg;
	int num=0;
	if(adoDB.Open(sql)==TRUE)
	{
		CDStrs UserField;
		adoDB.ExecuteQuery("select * from MSG_USER",UserField);
		uid=UserField[0][0];
		uid.TrimRight();
		upwd=UserField[0][1];
		upwd.TrimRight();
	}
	else return 0;
	while(num<4)
	{
		if(dlg.DoModal()==0)
			return 0;
		else
		{
			if(strcmp(dlg.m_uid,uid)||strcmp(dlg.m_upwd,upwd))
			{
				num++;
				CString tip;
				tip.Format("无效登录%d次,还有%d次机会!",num,4-num);
				AfxMessageBox(tip);
			}
			else break;
		}
	}
	if(num>3) return 0;
	else return 1;
}

void CMainFrame::OnMsgUser() 
{
	// TODO: Add your command handler code here
	CString sql="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Finance;Data Source=(local)";
	CString uid="",upwd="";
	if(adoDB.Open(sql)==TRUE)
	{
		CDStrs UserField;
		adoDB.ExecuteQuery("select * from MSG_USER",UserField);
		uid=UserField[0][0];
		uid.TrimRight();
		upwd=UserField[0][1];
		upwd.TrimRight();
	}
	else return;
	CUserDlg dlg;
	while(dlg.DoModal()==IDOK)
	{
		if(dlg.m_oldpwd!=upwd)
			MessageBox("原始密码输入错误!");
		else
		{
			CString sql;
			sql.Format("update MSG_USER set user_id='%s',user_pwd='%s' where user_id='%s'",dlg.m_newname,dlg.m_newpwd,uid);
			adoDB.Execute(sql);
			MessageBox("用户信息成功修改!");
			break;
		}
	}
}

void CMainFrame::OnMsgIOType() 
{
	// TODO: Add your command handler code here
	if(m_pMsgFrm)
		MDIActivate(m_pMsgFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pMsgTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("信息管理");
		m_pMsgFrm=(CMsgFrm*)MDIGetActive();
	}
}

void CMainFrame::OnMsgBank() 
{
	// TODO: Add your command handler code here
	if(m_pMsgFrm)
		MDIActivate(m_pMsgFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pMsgTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("信息管理");
		m_pMsgFrm=(CMsgFrm*)MDIGetActive();
	}	
}

void CMainFrame::OnMsgFamily() 
{
	// TODO: Add your command handler code here
	if(m_pMsgFrm)
		MDIActivate(m_pMsgFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pMsgTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("信息管理");
		m_pMsgFrm=(CMsgFrm*)MDIGetActive();
	}
}

void CMainFrame::OnMsgAsset() 
{
	// TODO: Add your command handler code here
	if(m_pMsgFrm)
		MDIActivate(m_pMsgFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pMsgTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("信息管理");
		m_pMsgFrm=(CMsgFrm*)MDIGetActive();
	}
}

void CMainFrame::OnAccInfo() 
{
	// TODO: Add your command handler code here
	if(m_pAccFrm)
		MDIActivate(m_pAccFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pAccTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("账户管理");
		m_pAccFrm=(CAccFrm*)MDIGetActive();
	}
}

void CMainFrame::OnAccTrs() 
{
	// TODO: Add your command handler code here
	if(m_pAccFrm)
		MDIActivate(m_pAccFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pAccTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("账户管理");
		m_pAccFrm=(CAccFrm*)MDIGetActive();
	}
}

void CMainFrame::OnFncIo() 
{
	// TODO: Add your command handler code here
	if(m_pIOFrm)
		MDIActivate(m_pIOFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pIOTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("财务管理");
		m_pIOFrm=(CIOFrm*)MDIGetActive();
	}
}

void CMainFrame::OnFncAst() 
{
	// TODO: Add your command handler code here
	if(m_pIOFrm)
		MDIActivate(m_pIOFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pIOTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("财务管理");
		m_pIOFrm=(CIOFrm*)MDIGetActive();
	}
}

void CMainFrame::OnStaSearch() 
{
	// TODO: Add your command handler code here
	if(m_pQueFrm)
		MDIActivate(m_pQueFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pQueTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("明细查询");
		m_pQueFrm=(CQueFrm*)MDIGetActive();
	}
}

void CMainFrame::OnStaChart() 
{
	// TODO: Add your command handler code here
	if(m_pChtFrm)
		MDIActivate(m_pChtFrm);
	else
	{
		CDocument *pDoc=((CFFMSApp*)AfxGetApp())->m_pChtTemplate->OpenDocumentFile(NULL);
		pDoc->SetTitle("图表分析");
		m_pChtFrm=(CChtFrm*)MDIGetActive();
	}
}

void CMainFrame::OnSysCopy() 
{
	// TODO: Add your command handler code here
	CString sPath,sDate;
	CTime ttime;
	ttime=ttime.GetCurrentTime();
	sDate=ttime.Format("%Y-%m-%d-%H-%M-%S");
	sPath=ShowPath();
	int b=sPath.GetLength();
	if(b<3)
		return;
	else
		sPath=sPath+"\\"+sDate+"BAK.DB";
	CString strSql;
	strSql.Format("BACKUP database finance to disk='%s'",sPath);
	if(!adoDB.IsOpen())
	{
		AfxMessageBox("数据库未连接!");
		return;
	}
	else
	{
		adoDB.Execute(strSql,adCmdText);
		AfxMessageBox("数据成功备份!");
		return;
	}
}

void CMainFrame::OnSysResume() 
{
	// TODO: Add your command handler code here
	CString sPath;
	char szFile[]="数据文件(*.db)|*.db||";
	CFileDialog dlg(true,"DB","",OFN_HIDEREADONLY,szFile,this);
	if(dlg.DoModal()==IDOK)
	{
		sPath=dlg.GetPathName();
		ClearAllChildFrm();
	}
	else return;
	if(adoDB.IsOpen())
		adoDB.Close();
	CString sql="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=(local)";
	adoDB.Open(sql,adModeUnknown);
	CString strSql;
	strSql.Format("RESTORE database finance from disk='%s' with replace",sPath);
	if(adoDB.Execute(strSql,adCmdText))
	{
		AfxMessageBox("数据恢复成功!");
		adoDB.Close();
	}
	sql="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Finance;Data Source=(local)";
	adoDB.Open(sql);
}

CString CMainFrame::ShowPath()
{
	CString res;
	TCHAR szPath[_MAX_PATH];
	BROWSEINFO bi;
	bi.hwndOwner=NULL;
	bi.pidlRoot=NULL;
	bi.lpszTitle=_T("请选择一个文件夹");
	bi.pszDisplayName=szPath;
	bi.ulFlags=BIF_RETURNONLYFSDIRS;
	bi.lpfn=NULL;
	bi.lParam=NULL;
	LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi);
	if(pItemIDList)
	{
		if(SHGetPathFromIDList(pItemIDList,szPath))
			res=szPath;
	}
	else
		res="";
	return res;
}

void CMainFrame::ClearAllChildFrm()
{
	CFFMSApp *pApp = (CFFMSApp*)::AfxGetApp();
	pApp->CloseAllDocuments(TRUE);
	m_pMsgFrm=NULL;
	m_pAccFrm=NULL;
	m_pIOFrm=NULL;
	m_pQueFrm=NULL;
	m_pChtFrm=NULL;
}

void CMainFrame::OnAppHelp() 
{
	// TODO: Add your command handler code here
	ShellExecute(NULL,NULL,_T(".\\FFMS.CHM"),NULL,NULL,SW_SHOWNORMAL);
}


void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	if(IDOK!=MessageBox("确认退出?",NULL,MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2))
		return;
	CMDIFrameWnd::OnClose();
}

⌨️ 快捷键说明

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