⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonfunc.cpp

📁 LibraryManageDM.rar 数据库设计图书馆管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -