📄 commonfunc.cpp
字号:
#include "stdafx.h"
#include "CommonFunc.h"
#include "PunishTypeSet.h"
#include "ReaderInfoSet.h"
#include "ReaderTypeSet.h"
#include "BookTypeSet.h"
#include "BookSet.h"
#include "BorrowInfoSet.h"
#include "UserSet.h"
int StrToInt(CString str)
{
int begin, pos = str.Find('.');
int end;
int sign, r = 0;
if (str.GetAt(0) == '-')
{
sign = -1;
begin = 1;
}
else if(str.GetAt(0) == '+')
{
sign = 1;
begin = 1;
}
else if (isdigit(str.GetAt(0)))
{
sign = 1;
begin = 0;
}
else
return 0;
if (pos == -1)
end = str.GetLength();
else
end = pos;
for (int i=begin; i < end; ++i)
r = r * 10 + str.GetAt(i) - '0';
return sign * r;
}
double StrToDouble(CString str)
{
double res = 0.0;
int i,begin, pos = str.Find('.');
int end = str.GetLength();
int sign, r = 0;
if (str.GetAt(0) == '-')
{
sign = -1;
begin = 1;
}
else if(str.GetAt(0) == '+')
{
sign = 1;
begin = 1;
}
else if (isdigit(str.GetAt(0)))
{
sign = 1;
begin = 0;
}
else
return 0.0;
if (pos == -1)
{
for (i=begin; i < end; ++i)
r = r * 10 + str.GetAt(i) - '0';
}
else
{
for (i=begin; i < pos; ++i)
r = r * 10 + int(str.GetAt(i) - '0');
for (i = end-1; i > pos; --i)
res = res / 10 + int(str.GetAt(i) - '0');
res /= 10;
}
res += r;
return sign * res;
}
void StrToDay(const CString& str, int& nYear, int& nMonth, int& nDay)
{
int i, pos = str.Find('-');
nYear = nMonth = nDay = 0;
for (i=0; i<pos; ++i)
{
nYear = nYear * 10 + (str[i] - '0');
}
CString str2 = str.Mid(pos + 1);
pos = str2.Find('-');
for (i=0; i<pos; ++i)
{
nMonth = nMonth * 10 + (str2[i] - '0');
}
str2 = str2.Mid(pos + 1);
for (i=0; i<str2.GetLength(); ++i)
{
nDay = nDay * 10 + (str2[i] - '0');
}
}
/*根据借阅者ID查询借阅者类型
param@ strReaderID[in]:借阅者ID
param@ strReaderType[out]:读者类型
return@ BOOL TRUE:查询成功, FALSE:查询失败
*/
BOOL QueryReaderType(const CString &strReaderID, CString& strReaderType)
{
strReaderType = _T("");
CString strSQL;
strSQL.Format(_T("SELECT * FROM ReaderInfo WHERE ReaderID = '%s'"), strReaderID);
CReaderInfoSet rdRS;
if (rdRS.IsOpen())rdRS.Close();
if (rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (rdRS.GetRecordCount() != 0)
{
strReaderType = rdRS.m_Type;
}
rdRS.Close();
return TRUE;
}
return FALSE;
}
/*根据借阅者ID查询罚款信息
param@ strReaderID[in]:借阅者ID
param@ dPunish[out]:罚款信息
return@ BOOL TRUE:查询成功, FALSE:查询失败
*/
BOOL QueryPunishInfo(const CString &strReaderID, double& dPunish)
{
dPunish = 0.0;
CString strSQL;
strSQL.Format(_T("SELECT * FROM ReaderInfo WHERE ReaderID = '%s'"), strReaderID);
CReaderInfoSet rdRS;
if (rdRS.IsOpen())rdRS.Close();
if (rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (rdRS.GetRecordCount() != 0)
{
dPunish = rdRS.m_Punish;
}
rdRS.Close();
return TRUE;
}
return FALSE;
}
/*根据借阅者ID更新罚款信息
param@ strReaderID[in]:借阅者ID
param@ dIncrement[in]:罚款变化量
return@ BOOL TRUE:更新成功, FALSE:更新失败
*/
BOOL UpdatePunishInfo(const CString &strRaderID, double dIncrement)
{
CString strSQL;
strSQL.Format(_T("SELECT * FROM ReaderInfo WHERE ReaderID = '%s'"), strRaderID);
CReaderInfoSet rdRS;
if (rdRS.IsOpen())rdRS.Close();
if (rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (rdRS.GetRecordCount() != 0)
{
rdRS.Edit();
rdRS.m_Punish += dIncrement;
if (rdRS.m_Punish <= 0.0)
rdRS.m_Punish = 0.0;
rdRS.Update();
}
rdRS.Close();
return TRUE;
}
return FALSE;
}
/*根据罚款类型名查询罚款设置
param@ strType[in]:罚款类型字符串
param@ punish[out]:罚款设置
return@ BOOL TRUE:查询成功, FALSE:查询失败
*/
BOOL QueryPunishSetting(CString strType, double& punish)
{
punish = 0.0;
CString strSQL;
strSQL.Format(_T("SELECT * FROM PunishType WHERE Type = '%s'"), strType);
CPunishTypeSet ptRS;
if (ptRS.IsOpen())ptRS.Close();
if (ptRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (ptRS.GetRecordCount() != 0)
punish = ptRS.dNumber_;
ptRS.Close();
return TRUE;
}
return FALSE;
}
/*根据读者类型查询罚款最大限额
param@ strReaderType[in]:借阅者类型字符串
param@ dLimit[out]:罚款最大限额
return@ BOOL TRUE:查询成功, FALSE:查询失败
*/
BOOL QueryPunishLimit(CString strReaderType, double& dLimit)
{
CString strSQL;
strSQL.Format(_T("SELECT * FROM ReaderType WHERE Type = '%s'"), strReaderType);
CReaderTypeSet rdtRS;
if (rdtRS.IsOpen())rdtRS.Close();
if (rdtRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (rdtRS.GetRecordCount() != 0)
{
dLimit = rdtRS.dPunishLimit_;
}
rdtRS.Close();
return TRUE;
}
return FALSE;
}
/*
param@ pRS:指向数据源的指针
param@ strRSName:数据表名
param@ strKey:字段名
param@ strVal:字段值
return@ BOOL TRUE:删除成功, FALSE:删除失败
*/
BOOL DeleteRecord(CRecordset* pRS, const CString& strRSName,
const CString& strKey, const CString& strVal)
{
CString strSQL;
strSQL.Format(_T("SELECT * FROM %s WHERE %s = '%s'"), strRSName, strKey, strVal);
if (pRS->IsOpen())pRS->Close();
if (pRS->Open(AFX_DB_USE_DEFAULT_TYPE, strSQL))
{
if (pRS->GetRecordCount() != 0)
{
pRS->Delete(); //! 删除记录后不能更新,只有Edit和AddNew模式才能使用更新
}
pRS->Close();
return TRUE;
}
return FALSE;
}
CString Encrypt(const CString& strSrc)
{
int sLen = strSrc.GetLength();
int dLen = 2 * sLen;
char *pDest = new char[dLen + 1];
pDest[0] = '\0';
int i = 0, j = 0;
for (;i < sLen && j<dLen; ++i, j+=2)
{
pDest[j] = char(int(strSrc[i]) % 256 + 5);
pDest[j+1] = strSrc[i] + 5;
}
pDest[j] = '\0';
CString strDest;
strDest.Format(_T("%s"), pDest);
delete pDest;
return strDest;
}
CString Decrypt(const CString& strSrc)
{
int sLen = strSrc.GetLength();
int dLen = sLen / 2;
char *pDest = new char[dLen + 1];
int i = 0, j = 0;
for (;i < sLen && j < dLen; ++j, i+=2)
{
pDest[j] = char(strSrc[i+1] - 5);
}
pDest[j] = '\0';
CString strDest;
strDest.Format(_T("%s"), pDest);
delete pDest;
return strDest;
}
BOOL DeleteData(CDatabase *pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
// 首先删除借阅信息表中的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.BorrowInfo");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除图书信息表中的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.BookInfo");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除读者信息表中的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.ReaderInfo");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除图书类型表的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.BookType");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除读者类型表中的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.ReaderType");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除罚款类型表中的数据
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.PunishType");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
// 删除用户信息表中的所有用户
strSQL = _T("DELETE FROM BookLibraryDM.SYSDBA.UserInfo");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
return TRUE;
}
BOOL InsertUser(CDatabase* pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
//[1]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.UserInfo \
Values('NameSpace','6666666666666666',true)");
try
{
pDB->ExecuteSQL(strSQL);// 插入万能用户
}
catch (CDBException* e)
{// 出现异常
e->ReportError(); // 报告错误
e->Delete();
pDB->Close();
return FALSE;
}
//[2]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.UserInfo \
Values('Administartor','ffiirrnnss6677',true)");
try
{
pDB->ExecuteSQL(strSQL);// 插入管理员Administartor
}
catch (CDBException* e)
{// 出现异常
e->ReportError(); // 报告错误
e->Delete();
pDB->Close();
return FALSE;
}
//[3]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.UserInfo \
Values('Guest','66778899::;;<<==',false)");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
return TRUE;
}
BOOL InsertBookType(CDatabase *pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
//[1]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.BookType \
Values('新书 ',7,'统一在综合借阅室进行借阅')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[2]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.BookType \
Values('旧书',28,'可在老馆二楼和东校区图书馆进行借阅')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[3]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.BookType \
Values('阅览室图书',0,'只能在阅览室进行阅读')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
return TRUE;
}
BOOL InsertReaderType(CDatabase *pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
//[1]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.ReaderType Values('本科生',6,1.00)");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[2]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.ReaderType Values('研究生',10,5.00)");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[3]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.ReaderType Values('教授',15,10.00)");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[4]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.ReaderType Values('其他会员',3,0.50)");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
return TRUE;
}
BOOL InsertPunishType(CDatabase *pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
//[1]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.PunishType \
Values('逾期罚款',0.1,'逾期罚款根据逾期天数和罚款系数计算罚款金额')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[2]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.PunishType \
Values('损坏赔偿',0.01,'损坏赔偿根据损坏比例计算罚款金额')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
return TRUE;
}
BOOL InsertBook(CDatabase *pDB)
{
if (!pDB->IsOpen())return FALSE;
CString strSQL;
//[1]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.BookInfo \
Values('TP312C1157','Visual C++信息系统设计','新书',\
'黄明','机械工业出版社',25.00,'2005-03-19',\
'2008-09-09', 10, 0,'Visual C++信息系统设计与开发实例')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
e->Delete();
pDB->Close();
return FALSE;
}
//[2]
strSQL = _T("Insert Into BookLibraryDM.SYSDBA.BookInfo \
Values('TP312C1054','Java 编程思想','新书', \
'Bruce Eckel','机械工业出版社',95.00,'2005-05-3', \
'2008-09-09', 20, 0,'Java经典教程,详细地讲述了Java语言的技术细节')");
try
{
pDB->ExecuteSQL(strSQL);
}
catch (CDBException* e)
{
e->ReportError();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -