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

📄 salarydlg.cpp

📁 一个企业人事管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SalaryDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Salary.h"
#include "SalaryDlg.h"
#include "LoginDlg.h"
#include "FormulaDlg.h"
#include "PreviewDlg.h"

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

extern _ConnectionPtr pTheConn;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSalaryDlg dialog

CSalaryDlg::CSalaryDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSalaryDlg::IDD, pParent)
{
	CTime t=CTime::GetCurrentTime();
	//{{AFX_DATA_INIT(CSalaryDlg)
	m_strDepartID = _T("");
	m_strDepartName = _T("");
	m_strPersonID = _T("");
	m_strPersonName = _T("");
	m_fBasicSalary = 0.0f;
	m_strYearMonth = t.Format("%Y-%m");
	m_bFixed = FALSE;
	m_strItemName = _T("");
	m_fMoney = 0.0f;
	m_strDesription = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSalaryDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSalaryDlg)
	DDX_Text(pDX, IDC_EDT_DEPARTID, m_strDepartID);
	DDV_MaxChars(pDX, m_strDepartID, 3);
	DDX_Control(pDX, IDC_DATAGRID1, m_cDG1);
	DDX_Text(pDX, IDC_EDT_DEPARTNAME, m_strDepartName);
	DDX_Text(pDX, IDC_EDT_PERSONID, m_strPersonID);
	DDX_Text(pDX, IDC_EDT_PERSONNAME, m_strPersonName);
	DDX_Text(pDX, IDC_EDT_BASICSALARY, m_fBasicSalary);
	DDX_Text(pDX, IDC_EDT_YEARMONTH, m_strYearMonth);
	DDX_Control(pDX, IDC_DATAGRID2, m_cDG2);
	DDX_Control(pDX, IDC_DATAGRID3, m_cDG3);
	DDX_Control(pDX, IDC_DATAGRID4, m_cDG4);
	DDX_Control(pDX, IDC_DATAGRID5, m_cDG5);
	DDX_Check(pDX, IDC_CHK_FIXED, m_bFixed);
	DDX_CBString(pDX, IDC_CMB_ITEMNAME, m_strItemName);
	DDX_Text(pDX, IDC_EDT_MONEY, m_fMoney);
	DDX_Text(pDX, IDC_EDT_DESCRIPTION, m_strDesription);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSalaryDlg, CDialog)
	//{{AFX_MSG_MAP(CSalaryDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(IDM_SYSTEM_CONNECT, OnSystemConnect)
	ON_COMMAND(IDM_SYSTEM_DISCONNECT, OnSystemDisconnect)
	ON_EN_CHANGE(IDC_EDT_DEPARTID, OnChangeEdtDepartid)
	ON_WM_DESTROY()
	ON_EN_CHANGE(IDC_EDT_PERSONID, OnChangeEdtPersonid)
	ON_BN_CLICKED(IDC_BTN_CHANGESALARY, OnBtnChangesalary)
	ON_BN_CLICKED(IDC_BTN_ADD_PERSON, OnBtnAddPerson)
	ON_BN_CLICKED(IDC_BTN_ADD_LIST, OnBtnAddList)
	ON_COMMAND(IDM_CONFIG_FORMULA, OnConfigFormula)
	ON_COMMAND(IDM_SYSTEM_EXIT, OnSystemExit)
	ON_COMMAND(IDM_CALCULATE_STAT, OnCalculateStat)
	ON_WM_MENUSELECT()
	ON_COMMAND(IDM_MENU_DELETERECORD, OnDeleteRecord)
	ON_COMMAND(IDM_PREVIEW_VIEW, OnPreviewView)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_INDICATOR_MESSAGE,        // status line indicator
	ID_INDICATOR_LOGIN
};

/////////////////////////////////////////////////////////////////////////////
// CSalaryDlg message handlers

BOOL CSalaryDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	// 设置项目缺省选择为奖金
	((CButton*)GetDlgItem(IDC_RADIO_BONUS))->SetCheck(TRUE);
	// 创建状态条
	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
	}
	CRect rect;
	GetClientRect(&rect);
	// 设定状态条
	m_wndStatusBar.SetPaneInfo(0,ID_INDICATOR_MESSAGE, 
							   SBPS_NORMAL,rect.Width()/2);
	m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_LOGIN,SBPS_STRETCH,0);
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,
    ID_INDICATOR_LOGIN);
	// 加载加速键
	m_hAccTable=::LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR));
	// 创建DataGrid需要用的Recordset对象
	m_pDG1rs.CreateInstance(__uuidof(Recordset)); // DataGrid1相关
	m_pDG2rs.CreateInstance(__uuidof(Recordset)); // DataGrid2相关
	m_pDG3rs.CreateInstance(__uuidof(Recordset)); // DataGrid3相关
	m_pDG4rs.CreateInstance(__uuidof(Recordset)); // DataGrid4相关
	m_pDG5rs.CreateInstance(__uuidof(Recordset)); // DataGrid5相关
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSalaryDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSalaryDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSalaryDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CSalaryDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// 释放DataGrid需要用的Recordset对象
	m_pDG1rs.Release(); // DataGrid1相关
	m_pDG2rs.Release(); // DataGrid2相关
	m_pDG3rs.Release(); // DataGrid3相关
	m_pDG4rs.Release(); // DataGrid4相关
	m_pDG5rs.Release(); // DataGrid5相关
}

void CSalaryDlg::OnSystemConnect() // 显示用户登录窗口
{
	CLoginDlg LoginDlg;
	if(LoginDlg.DoModal()==IDOK) // 认证通过
		m_wndStatusBar.SetPaneText(1, "已连接到数据库: " + LoginDlg.m_strDSN);
}

void CSalaryDlg::OnSystemDisconnect() // 断开连接
{
	// 关闭Connetion对象
	if(pTheConn->GetState()==adStateOpen)
		pTheConn->Close();
	m_wndStatusBar.SetPaneText(1, "尚未登录数据库,请按F2登录");
}

void CSalaryDlg::OnChangeEdtDepartid() 
{
	if(pTheConn->GetState()==adStateClosed) return; // 数据库未打开则返回
	UpdateData(); // 更新数据

	CString str;
	_variant_t Value;
	_RecordsetPtr pRS; // Recordset对象
	pRS.CreateInstance(__uuidof(Recordset)); // 创建
	// 更新DataGrid1数据
	str="select ID,NAME from PERSON where DEPARTMENT like '"
		+ m_strDepartID + "' and STATE='T'";
	if(m_pDG1rs->GetState()==adStateOpen) m_pDG1rs->Close(); // 关闭Recordset
	// 打开Recordset
	m_pDG1rs->Open(str.AllocSysString(),
		pTheConn.GetInterfacePtr(),
		adOpenStatic,adLockReadOnly,adCmdText);
	// 设置DataGrid1
	m_cDG1.SetRefDataSource((LPUNKNOWN)m_pDG1rs);
	// 更新部门名称
	str="select NAME from DEPARTMENT where ID='" + m_strDepartID + "'";
	pRS->Open(str.AllocSysString(),
			pTheConn.GetInterfacePtr(),
			adOpenStatic,adLockReadOnly,adCmdText);
	if(pRS->RecordCount==1) // 判断记录是否存在
	{
		Value=pRS->GetCollect("NAME"); // 得到部门名称
		if(Value.vt!=VT_NULL) m_strDepartName=(char*)_bstr_t(Value);
	}
	else
		m_strDepartName.Empty(); // 清除部门名称

	UpdateData(FALSE); // 更新界面数据
	pRS.Release(); // 释放
}

BEGIN_EVENTSINK_MAP(CSalaryDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CSalaryDlg)
	ON_EVENT(CSalaryDlg, IDC_DATAGRID1, -601 /* DblClick */, OnDblClickDatagrid1, VTS_NONE)
	ON_EVENT(CSalaryDlg, IDC_DATAGRID2, -605 /* MouseDown */, OnMouseDownDatagrid2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CSalaryDlg, IDC_DATAGRID3, -605 /* MouseDown */, OnMouseDownDatagrid3, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CSalaryDlg, IDC_DATAGRID4, -605 /* MouseDown */, OnMouseDownDatagrid4, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CSalaryDlg, IDC_DATAGRID5, -605 /* MouseDown */, OnMouseDownDatagrid5, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CSalaryDlg::OnDblClickDatagrid1() 
{
	UpdateData(); // 更新数据
	_variant_t Value;
	if(m_pDG1rs->GetState()==adStateOpen) // 判断列表是否打开
	{
		Value=m_pDG1rs->GetCollect("ID"); // 得到员工号
		m_strPersonID=(char*)_bstr_t(Value);
	}
	UpdateData(FALSE); // 更新界面数据
	OnChangeEdtPersonid(); // 改变员工信息
}

void CSalaryDlg::OnChangeEdtPersonid() 
{
	// 数据库未连接则返回
	if(pTheConn->GetState()==adStateClosed) return;

	UpdateData(); // 更新数据
	CString str;
	_variant_t Value;
	_RecordsetPtr pRS; // Recordset对象
	str="select NAME from PERSON where ID='"
		+ m_strPersonID + "' and STATE='T'";
	pRS.CreateInstance(__uuidof(Recordset)); // 创建
	// 打开Recordset
	pRS->Open(str.AllocSysString(),
		pTheConn.GetInterfacePtr(),
		adOpenStatic,adLockReadOnly,adCmdText);
	if(pRS->RecordCount==1) // 判断记录是否存在
	{
	// 更新员工姓名
		Value=pRS->GetCollect("NAME"); // 得到员工姓名
		if(Value.vt!=VT_NULL) m_strPersonName=(char*)_bstr_t(Value);
	// 更新基本工资
		pRS->Close(); // 关闭
		str="PERSON='" + m_strPersonID + "'";
		pRS->Filter=str.AllocSysString();
		// 打开Recordset
		pRS->Open("SALARY_SET",
			pTheConn.GetInterfacePtr(),
			adOpenKeyset,adLockOptimistic,adCmdTable);
		if(pRS->RecordCount==1) // 判断记录是否存在
		{
			Value=pRS->GetCollect("SALARY"); // 得到工资
			if(Value.vt!=VT_NULL) m_fBasicSalary=Value.fltVal;
		}
		else // 添加记录
		{
			m_fBasicSalary=0; // 缺省工资
			pRS->AddNew();
			pRS->Fields->GetItem("PERSON")->PutValue(m_strPersonID.AllocSysString());
			pRS->Fields->GetItem("SALARY")->PutValue(_variant_t(m_fBasicSalary));
			pRS->Update();
		}
	// 开放“更改基本工资”按钮
		GetDlgItem(IDC_BTN_CHANGESALARY)->EnableWindow(TRUE);
	// 更新“固定福利津贴”列表
		UpdateDG(m_pDG2rs, m_cDG2, 2);
	// 更新“月度奖金”列表
		UpdateDG(m_pDG3rs, m_cDG3, 3);
	// 更新“月度福利津贴”列表
		UpdateDG(m_pDG4rs, m_cDG4, 4);
	// 更新“月度扣发”列表
		UpdateDG(m_pDG5rs, m_cDG5, 5);
	}
	else
	{
		m_strPersonName.Empty(); // 清除员工姓名
		m_fBasicSalary=0; // 清除工资
		// 禁止“更改基本工资”按钮
		GetDlgItem(IDC_BTN_CHANGESALARY)->EnableWindow(FALSE);
		// 清除各DataGrid
		if(m_pDG2rs->GetState()==adStateOpen) m_pDG2rs->Close();
		if(m_pDG3rs->GetState()==adStateOpen) m_pDG3rs->Close();
		if(m_pDG4rs->GetState()==adStateOpen) m_pDG4rs->Close();
		if(m_pDG5rs->GetState()==adStateOpen) m_pDG5rs->Close();
		m_cDG2.Refresh();
		m_cDG3.Refresh();
		m_cDG4.Refresh();
		m_cDG5.Refresh();
	}

	UpdateData(FALSE); // 更新界面数据
	pRS.Release(); // 释放
}

void CSalaryDlg::OnBtnChangesalary() 
{
	// 数据库未连接则返回
	if(pTheConn->GetState()==adStateClosed) return;

	CString str;
	_variant_t Value;
	_RecordsetPtr pRS; // Recordset对象
	pRS.CreateInstance(__uuidof(Recordset)); // 创建
	UpdateData(); // 更新数据
	// 打开Recordset
	str="PERSON='" + m_strPersonID + "'";
	pRS->Filter=str.AllocSysString(); // 设置过滤条件
	pRS->Open("SALARY_SET",
		pTheConn.GetInterfacePtr(),
		adOpenKeyset,adLockOptimistic,adCmdTable);
	if(pRS->RecordCount==1) // 判断记录是否存在
	{
		// 更新工资
		pRS->Fields->GetItem("SALARY")->PutValue(_variant_t(m_fBasicSalary));

⌨️ 快捷键说明

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