📄 teacher.cpp
字号:
// Teacher.cpp: implementation of the CTeacher class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GPMIS.h"
#include "Teacher.h"
#include "Global.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern CGPMISApp theApp;
CTeacher::CTeacher() : m_strName("")
{
}
CTeacher::CTeacher(const CString& strName, const CString& strSex, int nTitleID,
const CString& strPhone, const CString& strEMail, const CString& strExperience)
: m_strName(strName), m_strSex(strSex), m_nTitleID(nTitleID), m_strPhone(strPhone),
m_strEMail(strEMail), m_strExperience(strExperience)
{
}
CTeacher::~CTeacher()
{
}
CTeacher::CTeacher(const CTeacher& rhs)
{
*this = rhs;
}
CTeacher& CTeacher::operator = (const CTeacher& rhs)
{
m_strName = rhs.m_strName;
m_strSex = rhs.m_strSex;
m_nTitleID = rhs.m_nTitleID;
m_strPhone = rhs.m_strPhone;
m_strEMail = rhs.m_strEMail;
m_strExperience = rhs.m_strExperience;
return *this;
}
/// create/update a record
BOOL CTeacher::Create(BOOL bUpdate)
{
CString strSQL;
CString strTableName;
_RecordsetPtr pSet;
FieldsPtr pFields;
FieldPtr pField;
_variant_t vConn,vRowsAffected;
CString strTmep;
vConn = (IDispatch*)theApp.GetConnect();
pSet.CreateInstance(__uuidof(Recordset));
strTableName.Format("Teacher");
time_t ltime;
time( <ime );
switch(theApp.GetDBType())
{
case MSACCESS_DB:
default:
if( bUpdate )
strSQL.Format("select * from %s where name='%s'",
strTableName, m_strName);
else
strSQL.Format("select * from %s", strTableName);
break;
case SQLSERVER_DB:
if( bUpdate )
strSQL.Format("select * from %s where name='%s'",
strTableName, m_strName);
else
strSQL.Format("select * from %s", strTableName);
break;
}
try
{
pSet->Open((_variant_t)strSQL,vConn,adOpenStatic,adLockOptimistic,adCmdUnknown);
if( !bUpdate ) //Create
{
pSet->AddNew();
}
pFields = pSet->Fields;
pField = pFields->Item["Name"];
strTmep.Format("%s",GetName());
pField->Value = (_bstr_t)strTmep;
pFields = pSet->Fields;
pField = pFields->Item["Sex"];
strTmep.Format("%s",GetSex());
pField->Value = (_bstr_t)strTmep;
pFields = pSet->Fields;
pField = pFields->Item["TitleID"];
strTmep.Format("%d",GetTitleID());
pField->Value = (_bstr_t)strTmep;
pFields = pSet->Fields;
pField = pFields->Item["Phone"];
strTmep.Format("%s",GetPhone());
pField->Value = (_bstr_t)strTmep;
pFields = pSet->Fields;
pField = pFields->Item["EMail"];
strTmep.Format("%s",GetEMail());
pField->Value = (_bstr_t)strTmep;
pFields = pSet->Fields;
pField = pFields->Item["Experience"];
strTmep.Format("%s",GetExperience());
pField->Value = (_bstr_t)strTmep;
if( m_strPassword.GetLength() > 16 )
{
pFields = pSet->Fields;
pField = pFields->Item["Password"];
strTmep.Format("%s",m_strPassword);
pField->Value = (_bstr_t)strTmep;
}
pSet->Update();
pSet->Close();
}
catch( _com_error& ce )
{
_bstr_t bstrDescription( ce.Description() );
_bstr_t bstrSource( ce.Source() );
TRACE( "HRESULT = 0x%08lx\n", ce.Error() );
TRACE( "HRESULT description : %s\n", ce.ErrorMessage() );
TRACE( "Description : %s\n", (LPCTSTR)bstrDescription );
TRACE( "Source : %s\n", (LPCTSTR)bstrSource );
return FALSE;
}
if( !bUpdate ) //Create
{
CString strWhere;
}
return TRUE;
}
// static method
CTeacher CTeacher::CreateInst(CString strWhere)
{
char strSql[256];
CString strTableName;
_RecordsetPtr pTeacherSet;
FieldsPtr pFields;
FieldPtr pField;
_variant_t vConn,vRowsAffected;
_variant_t vtName, vtTitle;
_variant_t vtPhone, vtSex;
_variant_t vtEMail, vtExperience;
CTeacher teacher;
vConn = (IDispatch*)theApp.GetConnect();
pTeacherSet.CreateInstance(__uuidof(Recordset));
try
{
strTableName.Format("Teacher");
switch(theApp.GetDBType())
{
case SQLSERVER_DB:
sprintf(strSql,"select * from %s where %s", strTableName, strWhere);
break;
case MSACCESS_DB:
default:
sprintf(strSql,"select * from %s where %s", strTableName, strWhere);
break;
}
pTeacherSet->Open( strSql, vConn, adOpenStatic, adLockOptimistic, adCmdUnknown );
CString strName;
CString strSex;
int nTitleID;
CString strPhone;
CString strEMail;
CString strExperience;
if ( VARIANT_FALSE == pTeacherSet->ADOEOF )
{
vtName = pTeacherSet->GetCollect( _variant_t("Name") );
if( vtName.vt != VT_NULL )
{
vtName.ChangeType( VT_BSTR );
strName = vtName.bstrVal;
strName.TrimRight();
}
else
strName = "";
vtTitle = pTeacherSet->GetCollect( _variant_t("titleid") );
vtTitle.ChangeType( VT_BSTR );
nTitleID = vtTitle.iVal;
vtSex = pTeacherSet->GetCollect( _variant_t("Sex") );
if( vtSex.vt != VT_NULL )
{
vtSex.ChangeType( VT_BSTR );
strSex = vtSex.bstrVal;
strSex.TrimRight();
}
else
strSex = "";
vtPhone = pTeacherSet->GetCollect( _variant_t("Phone") );
if( vtPhone.vt != VT_NULL )
{
vtPhone.ChangeType( VT_BSTR );
strPhone = vtPhone.bstrVal;
strPhone.TrimRight();
}
else
strPhone = "";
vtEMail = pTeacherSet->GetCollect( _variant_t("EMail") );
if( vtEMail.vt != VT_NULL )
{
vtEMail.ChangeType( VT_BSTR );
strEMail = vtEMail.bstrVal;
strEMail.TrimRight();
}
else
strEMail = "";
vtExperience = pTeacherSet->GetCollect( _variant_t("Experience") );
if( vtExperience.vt != VT_NULL )
{
vtExperience.ChangeType( VT_BSTR );
strExperience = vtExperience.bstrVal;
strExperience.TrimRight();
}
else
strExperience = "";
teacher = CTeacher(strName, strSex, nTitleID, strPhone, strEMail, strExperience);
}
else
{
teacher = CTeacher();
}
pTeacherSet->Close();
}
catch( _com_error& ce )
{
_bstr_t bstrDescription( ce.Description() );
_bstr_t bstrSource( ce.Source() );
TRACE( "Description : %s\n", (LPCTSTR)bstrDescription );
TRACE( "Source : %s\n", (LPCTSTR)bstrSource );
return CTeacher();
}
return teacher;
}
BOOL CTeacher::Create(CTeacher& teacher)
{
return teacher.Create();
}
BOOL CTeacher::Update(CTeacher& teacher)
{
return teacher.Create(TRUE);
}
BOOL CTeacher::Delete(CTeacher& teacher)
{
CString strSQL;
_variant_t vRowsAffected;
CString strTableName;
strTableName.Format("Teacher");
switch(theApp.GetDBType())
{
case MSACCESS_DB:
default:
strSQL.Format("delete * from %s where Name='%s'",
strTableName, teacher.GetName());
break;
case SQLSERVER_DB:
strSQL.Format("delete * from %s where Name='%s'",
strTableName, teacher.GetName());
break;
}
try
{
theApp.GetConnect()->Execute( (_bstr_t)strSQL, &vRowsAffected, adCmdText );
}
catch( _com_error& ce )
{
_bstr_t bstrDescription( ce.Description() );
_bstr_t bstrSource( ce.Source() );
TRACE( "HRESULT = 0x%08lx\n", ce.Error() );
TRACE( "HRESULT description : %s\n", ce.ErrorMessage() );
TRACE( "Description : %s\n", (LPCTSTR)bstrDescription );
TRACE( "Source : %s\n", (LPCTSTR)bstrSource );
return FALSE;
}
return TRUE;
}
BOOL CTeacher::Validate(const CString& strLoginName, CString strPassword)
{
BYTE *pData;
CBlowfish* pBlowfish = theApp.GetBlowfish();
pData = new BYTE[17];
memset(pData, 0, 16*sizeof(BYTE));
memcpy(pData,strPassword,strPassword.GetLength());
pBlowfish->Encrypt(pData, 16);
CString s;
strPassword = "";
for(int i = 0; i< 16; i++)
{
s.Format("%03d",pData[i]);
strPassword += s;
}
delete pData;
CString strWhere;
strWhere.Format(" name='%s' and password='%s'",strLoginName,strPassword);
CTeacher teacher = CreateInst(strWhere);
if( teacher.GetName() == "" )
return FALSE;
return TRUE;
}
void CTeacher::SetPassword(CString& sPassword)
{
BYTE *pData;
CBlowfish* pBlowfish = theApp.GetBlowfish();
pData = new BYTE[17];
memset(pData, 0, 16*sizeof(BYTE));
memcpy(pData,sPassword,sPassword.GetLength());
pBlowfish->Encrypt(pData, 16);
CString s;
m_strPassword = "";
for(int i = 0; i< 16; i++)
{
s.Format("%03d",pData[i]);
m_strPassword += s;
}
delete pData;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -