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

📄 wagesearch.cpp

📁 这是采用mfc编写的工资管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			return FALSE;

		m_list.DeleteAllItems();
		m_CuRow=0;
		_bstr_t field[]={"年份","月份","员工ID","姓名","所属部门","职位","奖金","计时工资",
			"计件工资","职务补贴","其它福利","应发工资","考勤工资","违章罚款","所得税","实发工资"};
		_variant_t str;

		while(!m_recordset->adoEOF)
		{
			str=m_recordset->GetCollect(field[0]);
			if(str.vt!=VT_NULL)
				m_list.InsertItem(m_CuRow,(_bstr_t)str);
			for(int i=1;i<16;i++)
			{
				str=m_recordset->GetCollect(field[i]);
				if(str.vt!=VT_NULL)
					m_list.SetItem(m_CuRow,i,1,(_bstr_t)str,NULL,0,0,0);
				else
					m_list.SetItem(m_CuRow,i,1,"0",NULL,0,0,0);
			}
			m_recordset->MoveNext();
			m_CuRow++;
		}
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
	}

	return TRUE;
}

 void WageSearch::OnShow() 
{
	UpdateData();
	Gongzi dlg;
	
	//在新对话框中显示详细信息
	dlg.m_year=m_list.GetItemText(CurrentSelect,0);
	dlg.m_monthString=m_list.GetItemText(CurrentSelect,1);
	dlg.m_ID=m_list.GetItemText(CurrentSelect,2);
	dlg.m_name=m_list.GetItemText(CurrentSelect,3);
	dlg.m_departString=m_list.GetItemText(CurrentSelect,4);
	dlg.m_position=m_list.GetItemText(CurrentSelect,5);
	dlg.m_reward=m_list.GetItemText(CurrentSelect,6);
	dlg.m_timeWage=m_list.GetItemText(CurrentSelect,7);
	dlg.m_pieceWage=m_list.GetItemText(CurrentSelect,8);
	dlg.m_buTie=m_list.GetItemText(CurrentSelect,9);
	dlg.m_fuLi=m_list.GetItemText(CurrentSelect,10);
	dlg.m_yingFa=m_list.GetItemText(CurrentSelect,11);
	dlg.m_kaoQin=m_list.GetItemText(CurrentSelect,12);
	dlg.m_faKuan=m_list.GetItemText(CurrentSelect,13);
	dlg.m_tax=m_list.GetItemText(CurrentSelect,14);
	dlg.m_shiFa=m_list.GetItemText(CurrentSelect,15);

	dlg.DoModal();
}

void WageSearch::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
		// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	//获得鼠标点击的行号
	CurrentSelect=pNMListView->iItem;
	if (CurrentSelect==-1)
	{
		GetDlgItem(IDC_Show)->EnableWindow(FALSE);
	}
	else GetDlgItem(IDC_Show)->EnableWindow(TRUE);
	*pResult = 0;	
}

void WageSearch::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void WageSearch::OnDelete() 
{
	try{
		//按主键查询删除记录
		CString m_sql;
		m_sql.Format("Delete From Wage Where 员工ID='%s' And 年份='%s' And 月份='%s'",
			m_list.GetItemText(CurrentSelect,2),m_list.GetItemText(CurrentSelect,0),
			m_list.GetItemText(CurrentSelect,1));
		m_ado.ExecuteSQL(m_sql);
		
		ShowData("Select * From Wage");
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
	}
}

void WageSearch::OnAdd() 
{
	Gongzi dlg(TRUE);
	if(IDOK==dlg.DoModal())
	{
		try
		{
		//添加一条新纪录
		m_recordset=m_ado.GetRecordSet("Select * From Wage");
		m_recordset->MoveLast();
		m_recordset->AddNew();
		m_recordset->PutCollect("年份",(_variant_t)dlg.m_year);
		m_recordset->PutCollect("月份",(_variant_t)dlg.m_monthString);
		m_recordset->PutCollect("员工ID",(_variant_t)dlg.m_ID);
		m_recordset->PutCollect("姓名",(_variant_t)dlg.m_name);
		m_recordset->PutCollect("所属部门",(_variant_t)dlg.m_departString);
		m_recordset->PutCollect("职位",(_variant_t)dlg.m_position);
		m_recordset->PutCollect("职务补贴",(_variant_t)dlg.m_buTie);
		m_recordset->PutCollect("违章罚款",(_variant_t)dlg.m_faKuan);
		m_recordset->PutCollect("其它福利",(_variant_t)dlg.m_fuLi);
		m_recordset->PutCollect("所得税",(_variant_t)dlg.m_tax);
		m_recordset->PutCollect("计时工资",(_variant_t)dlg.m_timeWage);
		m_recordset->PutCollect("计件工资",(_variant_t)dlg.m_pieceWage);
		m_recordset->PutCollect("应发工资",(_variant_t)dlg.m_yingFa);
		m_recordset->PutCollect("考勤工资",(_variant_t)dlg.m_kaoQin);
		m_recordset->PutCollect("实发工资",(_variant_t)dlg.m_shiFa);
		m_recordset->PutCollect("奖金",(_variant_t)dlg.m_reward);

		m_recordset->Update();
		
		//更新显示所有记录
		ShowData("Select * From Wage");
		}
		catch(_com_error e)
		{
			AfxMessageBox(e.Description());
		}
	}
}

/***************************
函数类型:自定义函数
函数功能:更新Wage表数据
***************************/
void WageSearch::UpdateDataBase()
{
	//根据KaoQin表中所有记录,计算对应的考勤工资,并将结果写入Wage表
	//首先查找所有的员工ID和记录月份
	CString sql="Select 员工ID,记录月份 From KaoQin";
	m_recordset=m_ado.GetRecordSet(sql);

	_RecordsetPtr pRecordset;
	CString nID ,nMonth,strName,strDepartment,strPosition;
	
	int sumKaoQin=0;//计算考勤总工资
	int tLater,tEarly,tOverTime,tAbsent,tEvection,tLeave,tVacation;//记录考勤相关时间
	int mLater,mEarly,mOverTime,mAbsent,mEvection,mLeave,mVacation;//记录相关参数单位时间工资

	try{
		while(!m_recordset->adoEOF)
		{
			
			//查找每一个员工ID对应记录月份的所有记录
			nID=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("员工ID");
			nMonth=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("记录月份");
			sql.Format("Select sum(迟到时间) As Later,sum(早退时间) As Early,sum(加班时间) As OverTime,"
				"sum(旷工) As Absent,sum(出差时间) As Evection,sum(请假时间) As Leave,sum(休假时间) "
				"As Vacation From KaoQin Where 员工ID='%s' And 记录月份='%s'",nID,nMonth);
			pRecordset=m_ado.GetRecordSet(sql);
			
			//通过数据库中某一记录的属性名获得该元组的整型值,即可_variant_t类型的结果转化为整型
#define GET_INT_RECORD(variable,field) {if(pRecordset->adoEOF) variable=0;\
	else{_variant_t str=pRecordset->GetCollect(field);\
			if(str.vt==VT_NULL) \
				variable=0;\
			else\
				variable=str.lVal;\
			}}

			//获取所有相关总时间
			GET_INT_RECORD(tLater,"Later");
			GET_INT_RECORD(tEarly,"Early");
			GET_INT_RECORD(tOverTime,"OverTime");
			GET_INT_RECORD(tAbsent,"Absent");
			GET_INT_RECORD(tEvection,"Evection");
			GET_INT_RECORD(tLeave,"Leave");
			GET_INT_RECORD(tVacation,"Vacation");
			
			//获取员工ID对应的姓名,部门和职位
			sql.Format("Select 员工姓名,部门名称,职位 From BasicInfomation Where 员工ID='%s'",nID);
			pRecordset=m_ado.GetRecordSet(sql);
			strName=(LPCTSTR)_bstr_t(pRecordset->GetCollect("员工姓名"));
			strDepartment=(LPCTSTR)(_bstr_t)pRecordset->GetCollect("部门名称");
			strPosition=(LPCTSTR)(_bstr_t)pRecordset->GetCollect("职位");
			
			//获取每个选项的单位时间的工资
			sql.Format("Select 迟到工资,早退工资,加班工资,请假工资,休假工资,旷工工资,出差工资 From "
				"DepartmentSet Where 部门名称='%s' And 职位='%s'",strDepartment,strPosition);
			pRecordset=m_ado.GetRecordSet(sql);
			
			//获取个参数值
			GET_INT_RECORD(mLater,"迟到工资");
			GET_INT_RECORD(mEarly,"早退工资");
			GET_INT_RECORD(mOverTime,"加班工资");
			GET_INT_RECORD(mAbsent,"旷工工资");
			GET_INT_RECORD(mEvection,"出差工资");
			GET_INT_RECORD(mLeave,"请假工资");
			GET_INT_RECORD(mVacation,"休假工资");
			
			//计算考勤工资
			sumKaoQin=-mLater*tLater-mEarly*tEarly+mOverTime*tOverTime-mAbsent*tAbsent
				-mEvection*tEvection-mLeave*tLeave-mVacation*tVacation;
			
			//将计算的结果写入Wage表中
			sql.Format("Select * From Wage Where 员工ID='%s' And 年份='%s' And 月份='%s'",
				nID,nMonth.Left(4),nMonth.Right(2));
			pRecordset=m_ado.GetRecordSet(sql);
			if(pRecordset->adoEOF)
			{
				pRecordset->AddNew();
				pRecordset->PutCollect("员工ID",_variant_t(nID));
				pRecordset->PutCollect("年份",_variant_t(nMonth.Left(4)));
				pRecordset->PutCollect("月份",_variant_t(nMonth.Right(2)));
				
				pRecordset->PutCollect("姓名",_variant_t(strName));
				pRecordset->PutCollect("所属部门",_variant_t(strDepartment));
				pRecordset->PutCollect("职位",_variant_t(strPosition));
			}
			pRecordset->PutCollect("考勤工资",(_variant_t)(long)(sumKaoQin));

			m_recordset->MoveNext();
		}
		
		//计算实发工资
		m_recordset=m_ado.GetRecordSet("Select * From DepartmentSet,Wage Where "
			"DepartmentSet.部门名称=Wage.所属部门 And DepartmentSet.职位=Wage.职位");
		
		int mDiXin,mYangLaoJin,mGongJiJin,mTime,mPiece,mReward,mBuTie,mWeal,mFaKuan,mTax;
		while(!m_recordset->adoEOF)
		{
			//从数据库读入数据
			CString nID=(LPCTSTR)_bstr_t(m_recordset->GetCollect("员工ID"));

			//通过数据库中某一记录的属性名获得该元组的整型值,即可_variant_t类型的结果转化为整型
#define GET_INT_RECORD2(variable,field) {_variant_t str=m_recordset->GetCollect(field);\
			if(str.vt==VT_NULL) \
				variable=0;\
			else\
				variable=str.lVal;\
			}

			GET_INT_RECORD2( mDiXin,"底薪");
			GET_INT_RECORD2( mYangLaoJin, "养老金");
			GET_INT_RECORD2( mGongJiJin, "公积金");
			
			GET_INT_RECORD2( mTime, "计时工资");
			GET_INT_RECORD2( mPiece, "计件工资");
			
			GET_INT_RECORD2( mReward, "奖金");
			GET_INT_RECORD2( mBuTie, "职务补贴");
			GET_INT_RECORD2( mWeal, "其它福利");
			GET_INT_RECORD2( mFaKuan, "违章罚款");
			GET_INT_RECORD2( mTax, "所得税");
			
			//计算应发工资和实发工资并写入Wage表
			int nYingFa=mDiXin+mYangLaoJin+mGongJiJin;
			int nShiFa=nYingFa+mTime+mPiece+mReward+mBuTie+mWeal-mFaKuan-mTax+sumKaoQin;
			
			m_recordset->PutCollect("应发工资",(_variant_t)(long)nYingFa);
			m_recordset->PutCollect("实发工资",(_variant_t)(long)nShiFa);

			m_recordset->MoveNext();
		}
//	m_recordset->Update();

	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
	}
}

void WageSearch::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	if(bShow)
	{
		UpdateDataBase();
		ShowData("Select * From Wage");	
	}
}

⌨️ 快捷键说明

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