亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? salarystatistics.cpp

?? This a integrated human resource manage system ,developed with vc++ and sql2000 Server
?? CPP
字號:
// SalaryStatistics.cpp: implementation of the CSalaryStatistics class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HrSys.h"
#include "SalaryStatistics.h"
#include "ADOConn.h"
#include "TaxRate.h"
#include "Excel9.h" 
#include "Employees.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSalaryStatistics::CSalaryStatistics()
{
	Id=0;
	EmpId=0;
	iMonth=0;
	ItemId=0;
	Total=0;
}

CSalaryStatistics::~CSalaryStatistics()
{

}
//數據庫操作
void CSalaryStatistics::sql_insert()
{	
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	//設置INSERT語句
	CString strEmpId,strMonth,strItemId,strTotal;
	strEmpId.Format("%d", EmpId);
	strMonth.Format("%d", iMonth);
	strItemId.Format("%d", ItemId);
	strTotal.Format("%f", Total);

	_bstr_t vSQL;
	vSQL = "INSERT INTO SalaryStatistics VALUES(" + strEmpId + ","
		+strMonth+","+strItemId+"," +strTotal+ ")";	
	//執行INSERT語句
	m_AdoConn.ExecuteSQL(vSQL);	
	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}

void CSalaryStatistics::sql_update(CString cId)
{
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	//設置UPDATE語句
	CString strEmpId,strMonth,strItemId,strTotal;
	strEmpId.Format("%d", EmpId);
	strMonth.Format("%d", iMonth);
	strItemId.Format("%d", ItemId);
	strTotal.Format("%f", Total);

	_bstr_t vSQL;
	vSQL = "UPDATE SalaryStatistics SET EmpId=" + strEmpId
		+ ",iMonth="+strMonth+",ItemId="+strItemId
		+",Total="+strTotal+" WHERE Id=" + cId;
	//執行UPDATE語句
	m_AdoConn.ExecuteSQL(vSQL);	
	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}

void CSalaryStatistics::sql_delete(CString cMonth)
{
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	//設置DELETE語句
	_bstr_t vSQL;
	vSQL = "DELETE FROM SalaryStatistics WHERE iMonth=" + cMonth;
	//執行DELETE語句
	m_AdoConn.ExecuteSQL(vSQL);	
	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}

//根據工資項目編號讀取所有字段值
void CSalaryStatistics::GetData(CString cId)
{
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	//設置SELECT語句
	_bstr_t vSQL;
	vSQL = "SELECT * FROM SalaryStatistics WHERE Id=" + cId;
	//執行SELETE語句
	_RecordsetPtr m_pRecordset;
	m_pRecordset = m_AdoConn.GetRecordSet(vSQL);

	//返回各列的值
	if (m_pRecordset->adoEOF)
		CSalaryStatistics();
	else
	{
		Id=atol(cId);
		EmpId=atol((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("EmpId"));
		iMonth=atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("iMonth"));
		ItemId=atol((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ItemId"));
		Total=atol((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Total"));
	}
	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}

//判斷此月份工資表是否已經存在
bool CSalaryStatistics::HaveRecord(CString cMonth)
{	
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	//設置SELECT語句
	_bstr_t vSQL;
	vSQL = "SELECT * FROM SalaryStatistics WHERE iMonth=" + cMonth;
	
	//執行SELECT語句
	_RecordsetPtr m_pRecordset;
	m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
	if (m_pRecordset->adoEOF)
		return false;
	else
		return true;

	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}

//根據公式計算返回值
int CSalaryStatistics::GetItemValue(CString cFormula, int EmpId)
{
	if(cFormula == "")
		return 0;
	if(EmpId <= 0)
		return 0;
	// 讀取指定員工的信息
	CEmployees emp;
	CString cEmpId;
	cEmpId.Format("%d", EmpId);
	emp.GetData(cEmpId);
	// 基本工資
	CString cSalary;
	cSalary.Format("%d", emp.Salary);
	// 替換公式中的基本工資
	cFormula.Replace("基本工資", cSalary);
	// 執行公式返回結果
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	_bstr_t vSQL;
	vSQL = "SELECT " + cFormula + " AS result"; 
	_RecordsetPtr m_rs;
	m_rs = m_AdoConn.GetRecordSet(vSQL);
	int result;
	if(m_rs->adoEOF)
		result = 0;
	else
		result = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("result"));
	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
	return result;
}

//創建指定月份的工資表
void CSalaryStatistics::CreateSalaryReport(CString cMonth)
{	
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();

	int BSalary;			// 基本工資
	int isOper;		
	CString sFormula;
	// 稅前工資總額、應納稅工資額、納稅后工資額和實發工資
	int BTotal;				// 稅前工資總額
	int TTotal;				// 應納稅工資額
	int ATotal;				// 納稅后工資額
	int RealSalary;			// 實發工資  
	int BTax;				// 工資納稅基數
	// 定義變量:稅前加總和,稅前減總和,稅后加總和,稅后減總和
	int BTASum, BTDSum, ATASum, ATDSum;
	BTASum = 0;
	BTDSum = 0;
	ATASum = 0;
	ATDSum = 0;
	// 讀取工資納稅基數
	CTaxRate tax;
	tax.GetData("1");
	BTax = tax.LowerLimit;
	// 提取在職員工信息,表Employees中段State等于1的員工
	_bstr_t vSQL;
	vSQL = "SELECT EmpId,Salary FROM Employees WHERE State=1"; 
	_RecordsetPtr m_pRecordset;
	m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
	while (m_pRecordset->adoEOF == 0)
	{
		// 執行循環計算前將變量置為0
		BTASum = 0;
		BTDSum = 0;
		ATASum = 0;
		ATDSum = 0;
		// 1)提取員工基本工資(工資項目中系統數據值),插入數據庫
		EmpId = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("EmpId"));
		iMonth = atoi(cMonth);
		Total = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Salary"));
		BSalary = Total;
		// 取得基本工資項對應的編號,即ItemId
		vSQL = "SELECT ItemId FROM SalaryItem WHERE ItemType=0";
		_RecordsetPtr m_prsItem;
		m_prsItem = m_AdoConn.GetRecordSet(vSQL);
		if(!m_prsItem->adoEOF)
			ItemId = atoi((LPCTSTR)(_bstr_t)m_prsItem->GetCollect("ItemId"));
		// 插入統計表
		sql_insert();

		// 2)提取工資項目信息中工資項目類型為固定值、且顯示計算的項目
		vSQL = "SELECT ItemId, ItemSum, Operation FROM SalaryItem "
			"WHERE ItemType=1 AND isVisible=1";
		_RecordsetPtr m_rs;
		m_rs = m_AdoConn.GetRecordSet(vSQL);
		while(m_rs->adoEOF == 0)
		{
			ItemId = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("ItemId"));
			Total = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("ItemSum"));
			isOper = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("Operation"));
		
			// 插入統計表
			sql_insert();
			// 計算各公共變量數值
			if(isOper == 0)       //稅前加
				BTASum = BTASum + Total;
			else if(isOper == 1)  //稅前減
				BTDSum = BTDSum + Total;
			else if(isOper == 2)  //稅后加
				ATASum = ATASum + Total;
			else if(isOper == 3)  //稅后減
				ATDSum = ATDSum + Total;
			m_rs->MoveNext();
		}

		// 3)提取工資項目信息中工資項目類型為固定值和計算值的、且顯示計算的項目
		vSQL = "SELECT ItemId,ItemSum,Operation,Formula FROM SalaryItem "
			"WHERE ItemType=2 AND isVisible=1";
		m_rs = m_AdoConn.GetRecordSet(vSQL);
		while(m_rs->adoEOF == 0)
		{
			ItemId = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("ItemId"));
			sFormula = (LPCTSTR)(_bstr_t)m_rs->GetCollect("Formula");
			isOper = atoi((LPCTSTR)(_bstr_t)m_rs->GetCollect("Operation"));
			Total = GetItemValue(sFormula, EmpId);

			// 插入統計表
			sql_insert();
			// 計算各公共變量數值
			if(isOper == 0)       //稅前加
				BTASum = BTASum + Total;
			else if(isOper == 1)  //稅前減
				BTDSum = BTDSum + Total;
			else if(isOper == 2)  //稅后加
				ATASum = ATASum + Total;
			else if(isOper == 3)  //稅后減
				ATDSum = ATDSum + Total;
			m_rs->MoveNext();
		}

		/*	根據公關變量的值計算:
			稅前工資總額 = 基本工資 + BTASum - BTDSum;
			應納稅工資額 = 稅前工資總額 - 工資納稅基數;
			納稅后工資額 = 應納稅工資額*納稅系數 - 速算扣除數;
			納稅金額 = 稅前工資總額 - 納稅后工資額
			實發工資 = 納稅后工資額 + ATASum - ATDSum + BTax
			將稅前工資總額、應納稅工資額、納稅后工資額和實發工資記錄插入統計表中,
			其中ItemId分別設置為-1、-2、-3、-4  */
		
	    BTotal = BSalary + BTASum - BTDSum;
	    ItemId = -1;
		Total = BTotal;
		sql_insert();
  
		TTotal = BTotal - BTax;
		ItemId = -2;
		Total = TTotal;
		sql_insert();

		//計算納稅后金額
		CString cTotal;
		cTotal.Format("%d", TTotal);
		ATotal = tax.CalculateSum(cTotal);
		ItemId = -3;
		Total = ATotal;
		sql_insert();
		
		RealSalary = ATotal + ATASum - ATDSum + BTax;
		ItemId = -4;
		Total = RealSalary;
		sql_insert();

		m_pRecordset->MoveNext();
	}
	// 刪除臨時表
	vSQL = "SELECT * FROM dbo.sysobjects WHERE id= "
			"object_id(N'[dbo].[TmpTable]') and "
			"OBJECTPROPERTY(id, N'IsUserTable') = 1";
	_RecordsetPtr m_rs;
	m_rs = m_AdoConn.GetRecordSet(vSQL);
	if(!m_rs->adoEOF)
	{
		vSQL = "DROP TABLE TmpTable"; 
		m_AdoConn.ExecuteSQL(vSQL);	
	}
	// 生成臨時表TmpTable
	vSQL = "SELECT EmpId AS 員工編號, EmpName AS 姓名,"
		"dbo.GetStsSum(EmpId,-1," + cMonth + ") AS 工資總額,"
		"dbo.GetStsSum(EmpId,-2," + cMonth + ") AS 應納稅金額,"
		"dbo.GetStsSum(EmpId,-3," + cMonth + ") AS 納稅后金額,"
		"(dbo.GetStsSum(EmpId,-2," + cMonth + 
		") - dbo.GetStsSum(EmpId,-3," + cMonth + ")) AS 納稅金額,"
		"dbo.GetStsSum(EmpId,-4," + cMonth + ") AS 實發工資 INTO TmpTable FROM"
		" Employees GROUP BY EmpId, EmpName";
	m_AdoConn.ExecuteSQL(vSQL);	

	//斷開與數據庫的連接
	m_AdoConn.ExitConnect();
}
//提取數據庫中工資統計表的此月份記錄
void CSalaryStatistics::ReportToExcel(CString cMonth)
{	
	//連接數據庫
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();	

	// 提取數據庫中工資統計表的此月份記錄
	//定義操作Excel必要的對象
	COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    _Application objApp;
	Workbooks objBooks;
	_Workbook objBook;
	Worksheets objSheets;
	_Worksheet objSheet;
	Range objRange;	
	//創建Excel對象
	objApp.CreateDispatch("Excel.Application");
	objBooks=objApp.GetWorkbooks();	//返回工作簿對象
	// 打開指定Excel文件
	CString path;
	// 獲取當前應用程序的完整文件名,包含完整路徑
	GetModuleFileName(NULL, path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	// 取得最后一個\,去掉文件名,從而獲取當前應用程序的工作路徑
	int pos = path.ReverseFind('\\');
	path = path.Left(pos+1);
	// 在當前應用程序的工作路徑下打開Report.xls文件
	objBook.AttachDispatch(objBooks.Add(_variant_t(path + "Report.xls")));
	objSheets=objBook.GetSheets();
	// 定義第一個Sheet為對象
	objSheet=objSheets.GetItem((_variant_t)short(1));
	objRange.AttachDispatch(objSheet.GetCells(),true); 
	
	// 讀取臨時表中的記錄
	_RecordsetPtr m_rs;
	_bstr_t vSQL;
	vSQL = "SELECT * FROM TmpTable ORDER BY 員工編號";
	m_rs = m_AdoConn.GetRecordSet(vSQL);
	// 生成標題欄
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(1)),_variant_t("姓名")); 
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(2)),_variant_t("工資總額")); 
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(3)),_variant_t("應納稅金額")); 
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(4)),_variant_t("納稅后金額")); 
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(5)),_variant_t("納稅金額")); 
	objRange.SetItem(_variant_t((long)(1)),_variant_t((long)(6)),_variant_t("實發工資")); 

	// 記錄總數
	int iRowCount = 0;
	while(m_rs->adoEOF == 0)
	{
		// 把列值放入Excel指定單元格
		CString str;
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("姓名");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(1)),_variant_t(str)); 
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("工資總額");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(2)),_variant_t(str)); 
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("應納稅金額");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(3)),_variant_t(str)); 
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("納稅后金額");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(4)),_variant_t(str)); 
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("納稅金額");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(5)),_variant_t(str)); 
		str = (LPCTSTR)(_bstr_t)m_rs->GetCollect("實發工資");
		objRange.SetItem(_variant_t((long)(iRowCount+2)),_variant_t((long)(6)),_variant_t(str)); 
		iRowCount++;
		m_rs->MoveNext();
	}
	// 設置Excel為可見
	objApp.SetVisible(true);
	// 釋放句柄
	objRange.ReleaseDispatch();
	objSheet.ReleaseDispatch();
	objSheets.ReleaseDispatch();
	objBook.ReleaseDispatch();
	objBooks.ReleaseDispatch();
	objApp.ReleaseDispatch();	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣视频一区| 成人久久久精品乱码一区二区三区| 成人av免费网站| 国产精品美女久久福利网站| 一本一道久久a久久精品| 日精品一区二区| 国产亚洲欧美中文| 欧美日韩你懂得| 国产一区在线不卡| 亚洲欧美二区三区| 精品卡一卡二卡三卡四在线| 不卡视频在线观看| 日韩成人午夜精品| 一区二区在线观看免费视频播放| 欧美精品一区二区三区蜜桃 | 天天影视涩香欲综合网| 久久久三级国产网站| 欧美在线你懂得| 国产色一区二区| 欧美精品在线一区二区三区| 青青青伊人色综合久久| 国产精品你懂的在线| 欧美日韩成人在线| 99久久综合国产精品| 亚洲一二三区在线观看| 国产欧美日韩在线看| 91精品欧美一区二区三区综合在| 日韩不卡免费视频| 午夜精品久久久久久久久| 国产色产综合色产在线视频| 欧美二区三区91| 欧美性受极品xxxx喷水| www.亚洲色图| 国产在线精品一区二区不卡了 | 久久亚洲一级片| 国产呦精品一区二区三区网站| 成人av电影在线播放| 老司机精品视频在线| 国产欧美一区二区精品性色超碰| 99精品欧美一区二区三区综合在线| 亚洲一级二级三级| 91福利视频网站| 成人app在线| 日韩欧美国产系列| 亚洲国产日韩综合久久精品| 欧美亚洲丝袜传媒另类| 久久久午夜精品理论片中文字幕| 色综合网色综合| 亚洲一区二区视频| 国产乱码精品1区2区3区| 国产精品亲子乱子伦xxxx裸| 国产精品99久久久久久久女警| 欧美中文字幕不卡| 亚洲亚洲人成综合网络| 在线播放视频一区| 一本色道久久综合亚洲精品按摩 | 日本在线播放一区二区三区| 亚洲一区二区av在线| 国产精品美女久久久久久久久久久 | 制服.丝袜.亚洲.另类.中文 | 亚洲第一狼人社区| 伊人夜夜躁av伊人久久| 首页综合国产亚洲丝袜| 国产精品亚洲视频| 精品电影一区二区三区| 日韩午夜在线播放| 夜夜夜精品看看| 91豆麻精品91久久久久久| 亚洲综合另类小说| 精品久久久久香蕉网| 亚洲精品一线二线三线无人区| 欧美丰满少妇xxxxx高潮对白| 欧美丝袜丝交足nylons图片| 99免费精品在线| 日韩一区二区三区电影在线观看| 国内久久婷婷综合| 久久久欧美精品sm网站| 91麻豆精品国产91久久久使用方法| 久久综合精品国产一区二区三区| 亚洲久草在线视频| 成人免费毛片高清视频| 亚洲大片一区二区三区| 日韩精品一区二区三区swag | 精品一区二区综合| 91黄色免费网站| 国产精品高潮久久久久无| 国产一区二区三区四区五区美女 | 日韩欧美国产成人一区二区| 一区二区三区日韩欧美| 免费观看在线色综合| 欧美私人免费视频| 亚洲高清免费视频| 在线观看欧美精品| 日韩精品一二三四| 国产精品欧美一区二区三区| 国产精品小仙女| 亚洲人成影院在线观看| 欧美乱妇一区二区三区不卡视频 | 狠狠色狠狠色综合| 亚洲午夜激情网页| 一区二区三区不卡在线观看| 欧美精品一区视频| 美腿丝袜亚洲色图| 国产精品电影院| 欧美亚洲精品一区| 国产高清精品在线| 日韩国产一二三区| 国产精品久久久久毛片软件| 欧美久久久久免费| 91在线免费看| 看电视剧不卡顿的网站| 一区二区三区中文字幕电影| 久久久av毛片精品| 日韩一区二区在线免费观看| 色婷婷综合久久久久中文一区二区| 蜜臀久久久久久久| 亚洲大片免费看| 亚洲国产成人精品视频| 亚洲手机成人高清视频| 欧美不卡一区二区三区| 欧美日韩免费观看一区三区| 99久久精品免费看国产免费软件| 激情文学综合网| 精品制服美女丁香| 国产做a爰片久久毛片| 蜜臀久久久久久久| 日本最新不卡在线| 美国三级日本三级久久99| 久久成人久久爱| 国产精品一区二区不卡| 麻豆精品新av中文字幕| 亚洲制服丝袜在线| 日本亚洲三级在线| 国产精品99久久久久| av电影一区二区| 欧美老女人第四色| 91蜜桃免费观看视频| 亚洲欧美日韩成人高清在线一区| 久久精品一二三| 亚洲欧美另类久久久精品2019| 亚洲人快播电影网| 美女视频免费一区| 波多野结衣在线aⅴ中文字幕不卡| 色婷婷av一区二区三区gif | 亚洲h在线观看| 国产一区二区免费在线| 欧美在线免费视屏| 久久久精品免费网站| 三级不卡在线观看| 成人毛片视频在线观看| 日韩免费视频一区二区| 一区二区三区电影在线播| 激情国产一区二区| 欧美一区三区四区| 性做久久久久久| 欧美日韩亚洲高清一区二区| 最近日韩中文字幕| 成人网在线免费视频| 久久精品欧美日韩| 国产裸体歌舞团一区二区| 精品少妇一区二区| 久久99精品一区二区三区| 91麻豆精品国产91久久久久久 | 亚洲一区二区成人在线观看| 色综合色综合色综合| 亚洲一区二区四区蜜桃| 91福利视频网站| 亚洲高清在线视频| 精品视频在线免费| 日本中文字幕一区| 久久精品亚洲一区二区三区浴池 | 色婷婷久久一区二区三区麻豆| 久久人人爽人人爽| 国产成人无遮挡在线视频| 欧美r级电影在线观看| 91传媒视频在线播放| 99视频国产精品| 成人av影视在线观看| 国产成人亚洲精品狼色在线| 日本伊人精品一区二区三区观看方式| 欧美大片在线观看一区二区| 5858s免费视频成人| 宅男噜噜噜66一区二区66| 欧美浪妇xxxx高跟鞋交| 欧美精品久久一区| 日韩一卡二卡三卡| 欧美成人性战久久| 中文在线一区二区| 亚洲免费资源在线播放| 亚洲1区2区3区视频| 另类综合日韩欧美亚洲| 国产91富婆露脸刺激对白| 91看片淫黄大片一级在线观看| 99re视频精品| 日韩一级黄色大片| 亚洲国产精品精华液ab| 亚洲综合一二区| 国产美女精品人人做人人爽| 91视频在线看| 精品少妇一区二区三区免费观看|