?? finddeprciation.cpp
字號:
// FindDeprciation.cpp : implementation file
//
#include "stdafx.h"
#include "FixedAssets.h"
#include "FindDeprciation.h"
#include "CRACK.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFindDeprciation dialog
CFindDeprciation::CFindDeprciation(CWnd* pParent /*=NULL*/)
: CDialog(CFindDeprciation::IDD, pParent)
{
//{{AFX_DATA_INIT(CFindDeprciation)
m_strAssetID = _T("");
m_CKAssetID = FALSE;
m_CKDPType = FALSE;
m_CKLeftValue = FALSE;
m_CKRatio = FALSE;
m_CKMonth = FALSE;
m_CKName = FALSE;
m_CKOrigValue = FALSE;
m_CKSort = FALSE;
m_CKSum = FALSE;
m_CKType = FALSE;
m_dLeftValue1 = 0.0;
m_dLeftValue2 = 0.0;
m_dLRatio2 = 0.0;
m_dMonth1 = 0.0;
m_dMonth2 = 0.0;
m_strName = _T("");
m_dOrigValue1 = 0.0;
m_dOrigValue2 = 0.0;
m_dSum1 = 0.0;
m_dSum2 = 0.0;
m_strType = _T("");
m_CKDate = FALSE;
m_Date = -1;
m_dLRatio1 = 0.0;
//}}AFX_DATA_INIT
flag=0;
sum=0;
monthDeprc=0;
LeftValue=0;
}
void CFindDeprciation::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFindDeprciation)
DDX_Control(pDX, IDC_FDRP_LIST, m_CtrlList);
DDX_Control(pDX, IDC_FDDP_TYPE, m_CtrlCBType);
DDX_Control(pDX, IDC_FDDP_DPTYPE, m_CtrlCBDPType);
DDX_Control(pDX, IDC_FDDP_SORT, m_CtrlCBSort);
DDX_Control(pDX, IDC_FDDP_NAME, m_CtrlCBName);
DDX_Control(pDX, IDC_FDDP_ASSETID, m_CtrlCBAssetID);
DDX_CBString(pDX, IDC_FDDP_ASSETID, m_strAssetID);
DDX_Check(pDX, IDC_FDDP_CKASSETID, m_CKAssetID);
DDX_Check(pDX, IDC_FDDP_CKDPTYPE, m_CKDPType);
DDX_Check(pDX, IDC_FDDP_CKLEFTVALUE, m_CKLeftValue);
DDX_Check(pDX, IDC_FDDP_CKLRATIO, m_CKRatio);
DDX_Check(pDX, IDC_FDDP_CKMONTH, m_CKMonth);
DDX_Check(pDX, IDC_FDDP_CKNAME, m_CKName);
DDX_Check(pDX, IDC_FDDP_CKORIGVALUE, m_CKOrigValue);
DDX_Check(pDX, IDC_FDDP_CKSORT, m_CKSort);
DDX_Check(pDX, IDC_FDDP_CKSUM, m_CKSum);
DDX_Check(pDX, IDC_FDDP_CKTYPE, m_CKType);
DDX_Text(pDX, IDC_FDDP_LEFTVALUE1, m_dLeftValue1);
DDX_Text(pDX, IDC_FDDP_LEFTVALUE2, m_dLeftValue2);
DDX_Text(pDX, IDC_FDDP_LRATIO2, m_dLRatio2);
DDX_Text(pDX, IDC_FDDP_MONTH1, m_dMonth1);
DDV_MinMaxDouble(pDX, m_dMonth1, 0., 1.e+023);
DDX_Text(pDX, IDC_FDDP_MONTH2, m_dMonth2);
DDV_MinMaxDouble(pDX, m_dMonth2, 0., 1.e+022);
DDX_CBString(pDX, IDC_FDDP_NAME, m_strName);
DDX_Text(pDX, IDC_FDDP_ORIGVALUE1, m_dOrigValue1);
DDV_MinMaxDouble(pDX, m_dOrigValue1, 0., 1.e+020);
DDX_Text(pDX, IDC_FDDP_ORIGVALUE2, m_dOrigValue2);
DDV_MinMaxDouble(pDX, m_dOrigValue2, 0., 1.e+023);
DDX_Text(pDX, IDC_FDDP_SUM1, m_dSum1);
DDX_Text(pDX, IDC_FDDP_SUM2, m_dSum2);
DDX_CBString(pDX, IDC_FDDP_TYPE, m_strType);
DDX_Check(pDX, IDC_FDDP_CKDATE, m_CKDate);
DDX_DateTimeCtrl(pDX, IDC_FDDP_DATE, m_Date);
DDX_Text(pDX, IDC_FDDP_LRATIO1, m_dLRatio1);
DDV_MinMaxDouble(pDX, m_dLRatio1, 0., 1.);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFindDeprciation, CDialog)
//{{AFX_MSG_MAP(CFindDeprciation)
ON_BN_CLICKED(IDC_FDDP_CKDATE, OnFddpCkdate)
ON_BN_CLICKED(IDC_FDDP_CKDPTYPE, OnFddpCkdptype)
ON_BN_CLICKED(IDC_FDDP_CKORIGVALUE, OnFddpCkorigvalue)
ON_BN_CLICKED(IDC_FDDP_CKSUM, OnFddpCksum)
ON_BN_CLICKED(IDC_FDDP_CKNAME, OnFddpCkname)
ON_BN_CLICKED(IDC_FDDP_CKSORT, OnFddpCksort)
ON_BN_CLICKED(IDC_FDDP_CKASSETID, OnFddpCkassetid)
ON_BN_CLICKED(IDC_FDDP_CKTYPE, OnFddpCktype)
ON_BN_CLICKED(IDC_FDDP_CKLRATIO, OnFddpCklratio)
ON_BN_CLICKED(IDC_FDDP_CKLEFTVALUE, OnFddpCkleftvalue)
ON_BN_CLICKED(IDC_FDDP_CKMONTH, OnFddpCkmonth)
ON_EN_CHANGE(IDC_FDDP_ORIGVALUE1, OnChangeFddpOrigvalue1)
ON_EN_CHANGE(IDC_FDDP_ORIGVALUE2, OnChangeFddpOrigvalue2)
ON_EN_CHANGE(IDC_FDDP_SUM1, OnChangeFddpSum1)
ON_EN_CHANGE(IDC_FDDP_SUM2, OnChangeFddpSum2)
ON_EN_CHANGE(IDC_FDDP_LRATIO1, OnChangeFddpLratio1)
ON_EN_CHANGE(IDC_FDDP_LRATIO2, OnChangeFddpLratio2)
ON_EN_CHANGE(IDC_FDDP_LEFTVALUE1, OnChangeFddpLeftvalue1)
ON_EN_CHANGE(IDC_FDDP_LEFTVALUE2, OnChangeFddpLeftvalue2)
ON_EN_CHANGE(IDC_FDDP_MONTH1, OnChangeFddpMonth1)
ON_EN_CHANGE(IDC_FDDP_MONTH2, OnChangeFddpMonth2)
ON_BN_CLICKED(IDC_FDDP_FIND, OnFddpFind)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFindDeprciation message handlers
int CFindDeprciation::DoModal()
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::DoModal();
}
BOOL CFindDeprciation::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
m_pDatabase->Close();
delete m_pDatabase;
m_pDatabase=NULL;
return CDialog::DestroyWindow();
}
BOOL CFindDeprciation::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_CtrlList.SetExtendedStyle(LVS_EX_GRIDLINES);
//連接數據庫
m_pDatabase=new CDaoDatabase;
try{
m_pDatabase->Open("FixedAssets");
m_pRecordset=new CDaoRecordset(m_pDatabase);
}
catch(CDaoException *e)
{
e->ReportError();
delete m_pDatabase;
m_pDatabase=NULL;
e->Delete();
}
if(!m_pDatabase->IsOpen()) return 0;
if(!m_pRecordset) return 0;
if(m_pRecordset->IsOpen()) m_pRecordset->Close();
CString strSelect;
try
{
// 資產類別
strSelect = _T("Select 資產類別ID,資產類別 From 資產類別");
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF())
{
COleVariant var;
var = m_pRecordset->GetFieldValue(0);
m_uaSort.Add(var.lVal);
var = m_pRecordset->GetFieldValue(1);
m_saSort.Add(CCrack::strVARIANT(var));
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
strSelect = _T("Select DISTINCT 資產名稱 From 資產信息");
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF())
{
COleVariant var;
var = m_pRecordset->GetFieldValue(0);
m_CtrlCBName.AddString(CCrack::strVARIANT(var));
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
strSelect = _T("Select DISTINCT 資產編號 From 資產信息");
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF())
{
COleVariant var;
var = m_pRecordset->GetFieldValue(0);
m_CtrlCBAssetID.AddString(CCrack::strVARIANT(var));
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
strSelect = _T("Select DISTINCT 型號 From 資產信息");
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF())
{
COleVariant var;
var = m_pRecordset->GetFieldValue(0);
m_CtrlCBType.AddString(CCrack::strVARIANT(var));
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
catch (CDaoException* e)
{
e->ReportError();
e->Delete();
return 0;
}
int nIndex,i;
for(i=0;i<m_saSort.GetSize();i++) //初始化類別
{
nIndex =m_CtrlCBSort.AddString(m_saSort.GetAt(i));
m_CtrlCBSort.SetItemData(nIndex, m_uaSort.GetAt(i));
}
m_CtrlCBDPType.InsertString(0,"平均年限法"); //初始化折舊方法
m_CtrlCBDPType.InsertString(1,"工作量法");
m_CtrlCBDPType.InsertString(2,"雙倍余額遞減法");
m_CtrlCBDPType.InsertString(3,"年數總和法");
m_CtrlCBDPType.InsertString(4,"不折舊");
strSelect=_T("Select * From 資產信息");
Refresh(strSelect);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFindDeprciation::Refresh(CString strSelect)//刷新
{
m_strTableName = _T("資產信息");
if(!m_pDatabase->IsOpen()) return;
if(!m_pRecordset) return;
if(m_pRecordset->IsOpen()) m_pRecordset->Close();
//清空list控件
m_CtrlList.DeleteAllItems();
while(m_CtrlList.DeleteColumn(0));
CDaoFieldInfo fieldInfo;
int nFields;
CDaoTableDef td(m_pDatabase);
try
{
td.Open(m_strTableName);
nFields = td.GetFieldCount();
int nWidth,index=7;
for (int j=0; j < nFields; j++)
{
td.GetFieldInfo(j,fieldInfo);
nWidth = m_CtrlList.GetStringWidth(fieldInfo.m_strName) + 15;
if(j<=4)
m_CtrlList.InsertColumn(j,fieldInfo.m_strName, LVCFMT_LEFT, nWidth);
else
{
if(j==8||j==9||j==10||j==11||j==12||j==13||j==19)
m_CtrlList.InsertColumn(index++,fieldInfo.m_strName, LVCFMT_LEFT, nWidth);
}
}
nWidth=100;
m_CtrlList.InsertColumn(5,"累計折舊", LVCFMT_LEFT, nWidth);
m_CtrlList.InsertColumn(6,"本月折舊", LVCFMT_LEFT, nWidth);
}
catch (CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
td.Close();
int nItem = 0,i;
try
{
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF())
{
COleVariant var;
var = m_pRecordset->GetFieldValue(14);
if(CCrack::strVARIANT(var)=="清理")
{
m_pRecordset->MoveNext();
continue;
}
if(!CalcuDep(atof(CCrack::strVARIANT(m_pRecordset->GetFieldValue(9))),atof(CCrack::strVARIANT(m_pRecordset->GetFieldValue(11))),CCrack::strVARIANT(m_pRecordset->GetFieldValue(13)),CCrack::strVARIANT(m_pRecordset->GetFieldValue(8)),atoi(CCrack::strVARIANT(m_pRecordset->GetFieldValue(10)))))//參數分別為 殘值率,原值,折舊方式,購買時間,使用年限
return;
if(m_CKSum)//累計折舊
{
if(m_dSum1>m_dSum2)
{
double temp;
temp=m_dSum1;m_dSum1=m_dSum2;m_dSum2=temp;
}
if(sum>m_dSum2||sum<m_dSum1)
{
m_pRecordset->MoveNext();
continue;
}
}
if(m_CKMonth)//本月折舊
{
if(m_dMonth1>m_dMonth2)
{
double temp;
temp=m_dMonth1;m_dMonth1=m_dMonth2;m_dMonth2=temp;
}
if(monthDeprc>m_dMonth2||monthDeprc<m_dMonth1)
{
m_pRecordset->MoveNext();
continue;
}
}
if(m_CKLeftValue)//凈值
{
if(m_dLeftValue1>m_dLeftValue2)
{
double temp;
temp=m_dLeftValue1;m_dLeftValue1=m_dLeftValue2;m_dLeftValue2=temp;
}
if(LeftValue>m_dLeftValue2||LeftValue<m_dLeftValue1)
{
m_pRecordset->MoveNext();
continue;
}
}
var = m_pRecordset->GetFieldValue(0);
m_CtrlList.InsertItem(nItem,CCrack::strVARIANT(var));
int index=7,j;
for (i=0; i < nFields; i++)
{
var = m_pRecordset->GetFieldValue(i);
if(i<=4&&i!=3)
m_CtrlList.SetItemText( nItem,i,CCrack::strVARIANT(var));
if(i==3)
{
for(j=0;j<m_uaSort.GetSize();j++)
{
if(m_uaSort[j]==unsigned(atoi(CCrack::strVARIANT(var))))
break;
}
m_CtrlList.SetItemText( nItem,i,m_saSort[j]);
}
if(i==8||i==9||i==10||i==11||i==12||i==13||i==19)
{
m_CtrlList.SetItemText( nItem,index++,CCrack::strVARIANT(var));
}
}
CString a1,a2,a3;
a1.Format("%f",sum);
a2.Format("%f",monthDeprc);
a3.Format("%f",LeftValue);
m_CtrlList.SetItemText( nItem,5,a1);
m_CtrlList.SetItemText( nItem,6,a2);
m_CtrlList.SetItemText( nItem,11,a3);
m_pRecordset->MoveNext();
nItem++;
}
}
catch (CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
}
bool CFindDeprciation::CalcuDep(double LRatio,double OrigValue,CString DPType,CString time,int MaxYearNum)//參數分別為 殘值率,原值,折舊方式,購買時間,使用年限
{
UpdateData(1);
if(DPType=="不折舊")
{
sum=0;monthDeprc=0;LeftValue=OrigValue;
return 1;
}
//將CString型的購入日期轉變為CTime型的變量
CString year,month,day;
if(time.GetAt(6)=='0')
year.Format("20%c%c",time.GetAt(6),time.GetAt(7));
else
year.Format("19%c%c",time.GetAt(6),time.GetAt(7));
month.Format("%c%c",time.GetAt(0),time.GetAt(1));
day.Format("%c%c",time.GetAt(3),time.GetAt(4));
CTime m_InTime(atoi(year),atoi(month),atoi(day),m_Date.GetHour(),m_Date.GetMinute(),m_Date.GetSecond());
int yearNum,monthNum;
//如果選擇了折舊日期,需要對該日期的合法性進行判斷,如果改日前晚于購買日期將給出提示。
if(m_CKDate)
{
CTimeSpan timespan;
timespan=m_Date-m_InTime;
if(timespan<0)
{
MessageBox("折舊時間必須晚于購買日期\n購買日期為"+time);
return 0;
}
else
{
yearNum=m_Date.GetYear()-m_InTime.GetYear();
monthNum=m_Date.GetMonth()-m_InTime.GetMonth()+12*yearNum;
}
}
else
{
CTime m_CurTime=CTime::GetCurrentTime();
yearNum=m_CurTime.GetYear()-m_InTime.GetYear();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -