📄 wagesearch.cpp
字号:
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 + -