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

📄 librarymanage.cpp

📁 LibraryManageDM.rar 数据库设计图书馆管理系统
💻 CPP
字号:
// LibraryManage.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "LibraryManage.h"
#include "MainFrm.h"

#include "LibraryManageDoc.h"
#include "LibraryManageView.h"
#include "MainFrm.h"
#include "UserSet.h"
#include "LoginDlg.h"
#include "CommonFunc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CLibraryManageApp

BEGIN_MESSAGE_MAP(CLibraryManageApp, CWinApp)
	//{{AFX_MSG_MAP(CLibraryManageApp)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
	// 基于文件的标准文档命令
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	// 标准打印设置命令
	ON_COMMAND(ID_FILE_PRINT_SETUP, OnFilePrintSetup)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// CLibraryManageApp 构造

CLibraryManageApp::CLibraryManageApp()
{
	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
	m_strExist = _T("1");
	m_strNotExist = _T("0");
	m_strSQL = _T("");
	m_strConnection = _T("DSN=BookLibraryDM;UID=SYSDBA;PWD=SYSDBA");
	m_strFirstName = _T("NameSpace");
	m_strFirstPassword = _T("6666666666666666");

	CFile file;
	CFileFind filefind;
	char readcontent[3] = "\0";
	m_strFileName = _T("setting.ini");
	m_bFirstExcute = TRUE;
	if (filefind.FindFile(m_strFileName))
	{
		// 配置文件存在就打开读
		if(file.Open(m_strFileName, CFile::modeRead))
		{
			file.Read(readcontent, 2);
			readcontent[2] = '\0';
			if (readcontent[0] == '1')
				m_bFirstExcute = FALSE;
			else
				m_bFirstExcute = TRUE;
			if (readcontent[1] == '1')
				m_bCreated = TRUE;
			else
				m_bCreated = FALSE;			
			file.Close();			
		}
	}
	else
	{
		// 没有找到配置文件就创建	
		if(file.Open(m_strFileName, CFile::modeCreate))
			file.Close();// 创建成功关闭
		m_bFirstExcute = TRUE;
		m_bCreated = FALSE;
	}	
}


// 唯一的一个 CLibraryManageApp 对象

CLibraryManageApp theApp;


// CLibraryManageApp 初始化

BOOL CLibraryManageApp::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	// SetDialogBkColor(RGB(0, 150, 100), RGB(255, 255, 255));

	// 初始化 OLE 库
	if (!AfxOleInit())
	{
		AfxMessageBox(IDP_OLE_INIT_FAILED);
		return FALSE;
	}
	AfxEnableControlContainer();
	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	strSystemName.LoadString(IDS_SYSTEMNAME);
	SetRegistryKey(strSystemName);
	// 没有文档支持,不需要
	// LoadStdProfileSettings(4);  // 加载标准 INI 文件选项(包括 MRU)
	
	if (m_bFirstExcute)// 如果第一次执行程序就创建表
	{
		if (m_bCreated)
			DropTables(7);  // 如果表已经创建则先删除所有的表		
		if (!CreateTables())// 调用建表函数创建信息表
		{
			AfxMessageBox("数据库信息表创建失败!");
			return FALSE;
		}
		CreateIndexs();// 调用建索引函数创建索引
		CUserSet UsRs;// 向系统管理人员信息表中插入初始的万能用户
		if(UsRs.Open(0x0, _T("SELECT * FROM UserInfo")))
		{
			if (0 == UsRs.GetRecordCount())
			{
				UsRs.AddNew();
				UsRs.strUserName_ = m_strFirstName;
				UsRs.strPassword_ = m_strFirstPassword;
				UsRs.bAdmin_ = TRUE;
				if (UsRs.CanUpdate())
					UsRs.Update();
				UsRs.Requery();
			}
			UsRs.Close();
		}
	}	
	
	CLoginDlg dlg;
	if (IDOK != dlg.DoModal())
		return FALSE;

	// 注册应用程序的文档模板。文档模板
	// 将用作文档、框架窗口和视图之间的连接
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CLibraryManageDoc),
		RUNTIME_CLASS(CMainFrame),       // 主 SDI 框架窗口
		RUNTIME_CLASS(CLibraryManageView));
	if (!pDocTemplate)
		return FALSE;
	AddDocTemplate(pDocTemplate);


	// 启用“DDE 执行”
	EnableShellOpen();
	RegisterShellFileTypes(TRUE);

	// 分析标准外壳命令、DDE、打开文件操作的命令行
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);
	// 调度在命令行中指定的命令。如果
	// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	//唯一的一个窗口已初始化,因此显示它并对其进行更新
	HICON hIcon;
	hIcon = LoadIcon(IDI_DOCICON);
	m_pMainWnd->SetIcon(hIcon, FALSE);
	m_pMainWnd->SetWindowText(strSystemName);
    m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	// 仅当具有后缀时才调用 DragAcceptFiles
	// 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生
	// 启用拖/放
	// 没有文档支持,不需要
	// m_pMainWnd->DragAcceptFiles();
	return TRUE;
}
//创建表
BOOL CLibraryManageApp::CreateTables()
{
	if (m_db.IsOpen())m_db.Close();
	
	m_bCreated = FALSE;
	m_bFirstExcute = TRUE;
	m_strConnection = _T("DSN=BookLibraryDM;UID=SYSDBA;PWD=SYSDBA");
	if (m_db.OpenEx(m_strConnection, CDatabase::noOdbcDialog))
	{//数据库打开成功
		//系统用户信息表
		m_strSQL = _T("CREATE TABLE UserInfo AT BookLibraryDM(\
			UserName CHAR(20) NOT NULL,\
			Password VARCHAR NOT NULL,\
			IsAdmin  BOOL NOT NULL,\
			PRIMARY KEY (UserName))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);//执行SQL语句
		}
		catch(CDBException *pe)
		{
			pe->ReportError();//出现异常,报告错误信息
			pe->Delete();
			m_db.Close();     //关闭数据库
			return FALSE;
		}
		// 图书类型表
		m_strSQL = _T("CREATE TABLE BookType AT BookLibraryDM(\
			Type	CHAR(10) NOT NULL,\
			Days	SMALLINT NOT NULL,\
			Remarks VARCHAR,\
			PRIMARY KEY (Type))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(1);
			m_db.Close();
			return FALSE;
		}

 		// 读者类型表
 		m_strSQL = _T("CREATE TABLE ReaderType AT BookLibraryDM(\
			Type	CHAR(10) NOT NULL,\
 			Copies	SMALLINT NOT NULL,\
 			PunishLimit Money NOT NULL,\
 			PRIMARY KEY (Type))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(2);			
			m_db.Close();
			return FALSE;
		}
 		
		// 罚款类型表
		m_strSQL = _T("CREATE TABLE PunishType AT BookLibraryDM(\
 			Type	CHAR(10) NOT NULL,\
			Rate	DOUBLE NOT NULL,\
 			Remarks VARCHAR,\
 			PRIMARY KEY (Type))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(3);
			m_db.Close();
			return FALSE;
		}
		// 图书信息表
		m_strSQL = _T("CREATE TABLE BookInfo AT BookLibraryDM(\
			BookID CHAR(20) NOT NULL,\
			BookName VARCHAR NOT NULL,\
 			Type	  CHAR(10) NOT NULL,\
 			Author    CHAR(20) NOT NULL,\
			Press	  VARCHAR NOT NULL,\
			Price     Money NOT NULL,\
			PressDate DATE NOT NULL,\
			InDate    DATE NOT NULL,\
			NumberIn  SMALLINT NOT NULL,\
			NumberOut SMALLINT NOT NULL,\
			Description VARCHAR,\
			FOREIGN KEY(Type) REFERENCES BookLibraryDM.SYSDBA.BookType(Type),\
			PRIMARY KEY (BookID))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(4);
			m_db.Close();
			return FALSE;
		}
		//读者信息表
		m_strSQL = _T("CREATE TABLE ReaderInfo AT BookLibraryDM(\
			ReaderID CHAR(20) NOT NULL,\
			ReaderName CHAR(10) NOT NULL,\
			Sex CHAR(2) NOT NULL,\
			Type CHAR(10) NOT NULL,\
			Dept CHAR(10),\
			PhoneNO CHAR(20),\
			TelNO CHAR(20),\
			Email VARCHAR,\
			RegDate DATE NOT NULL,\
			Address VARCHAR,\
			Punish MONEY,\
			Description VARCHAR NOT NULL,\
			FOREIGN KEY(Type) REFERENCES BookLibraryDM.SYSDBA.ReaderType(Type),\
			PRIMARY KEY (ReaderID))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(5);
			m_db.Close();
			return FALSE;
		}
		
		// 借阅信息表
		m_strSQL = _T("CREATE TABLE BorrowInfo AT BookLibraryDM(\
			RecordID INT NOT NULL,\
			ReaderID CHAR(20) NOT NULL,\
			BookID CHAR(20) NOT NULL,\
			BorrowDay DATE NOT NULL,\
			ReturnDay DATE,\
			IsReturned BOOL,\
			IsRenewed BOOL,\
			Operator CHAR(20) NOT NULL,\
			DeadLine DATE NOT NULL,\
			FOREIGN KEY(ReaderID) REFERENCES BookLibraryDM.SYSDBA.ReaderInfo(ReaderID),\
			FOREIGN KEY(BookID) REFERENCES BookLibraryDM.SYSDBA.BookInfo(BookID),\
			FOREIGN KEY(Operator) REFERENCES BookLibraryDM.SYSDBA.UserInfo(UserName),\
			PRIMARY KEY(RecordID))");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			DropTables(6);
			m_db.Close();
			return FALSE;
		}
		m_bCreated = TRUE;
		m_bFirstExcute = FALSE;
	}
	return TRUE;
}
// 创建索引
BOOL CLibraryManageApp::CreateIndexs()
{
	if (m_db.IsOpen())m_db.Close();
	
	m_strConnection = _T("DSN=BookLibraryDM;UID=SYSDBA;PWD=SYSDBA");
	if (m_db.OpenEx(m_strConnection, CDatabase::noOdbcDialog))
	{//数据库打开成功
		m_strSQL = _T("CREATE INDEX BTINX ON BookLibraryDM.SYSDBA.BookType(Type)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);//执行SQL语句
		}
		catch(CDBException *pe)
		{
			pe->ReportError();//出现异常,报告错误信息
			pe->Delete();
			m_db.Close();     //关闭数据库
			return FALSE;
		}
		m_strSQL = _T("CREATE INDEX RTINX   ON BookLibraryDM.SYSDBA.ReaderType(Type)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}
 		m_strSQL = _T("CREATE INDEX BIDINX  ON BookLibraryDM.SYSDBA.BookInfo(BookID)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
	
			m_db.Close();
			return FALSE;
		}
 		m_strSQL = _T("CREATE INDEX PTINX   ON BookLibraryDM.SYSDBA.PunishType(Type)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}
		m_strSQL = _T("CREATE INDEX RIDINX  ON BookLibraryDM.SYSDBA.ReaderInfo(ReaderID)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}
		m_strSQL = _T("CREATE INDEX USNAINX ON BookLibraryDM.SYSDBA.UserInfo(UserName, Password)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}		
		m_strSQL = _T("CREATE INDEX BRINX1  ON BookLibraryDM.SYSDBA.BorrowInfo(RecordID)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}
		m_strSQL = _T("CREATE INDEX BRINX2  ON BookLibraryDM.SYSDBA.BorrowInfo(ReaderID,BookID)");
		try 
		{
			m_db.ExecuteSQL(m_strSQL);
		}
		catch(CDBException *pe)
		{
			pe->ReportError();
			pe->Delete();
			m_db.Close();
			return FALSE;
		}
	}
	return TRUE;
}

void CLibraryManageApp::DropATable(CString strTableName)
{
	if (!m_db.IsOpen())
	{// 如果数据库没有打开,就打开数据库
		m_strConnection = _T("DSN=BookLibraryDM;UID=SYSDBA;PWD=SYSDBA");
		if (!m_db.OpenEx(m_strConnection, CDatabase::noOdbcDialog))
			return ;
	}
	m_strSQL.Format(_T("DROP TABLE BookLibraryDM.SYSDBA.%s"), strTableName);
	try 
	{
		m_db.ExecuteSQL(m_strSQL); // 执行删除表的SQL语句
	}
	catch(CDBException *pe)
	{
		pe->ReportError();
		pe->Delete();
	}
}

BOOL CLibraryManageApp::DropTables(int nCount)
{
	switch (nCount)
	{
	case 7:
		DropATable(_T("BorrowInfo"));// 删除借阅信息表
	case 6:
		DropATable(_T("ReaderInfo"));// 删除读者信息表
	case 5:
		DropATable(_T("BookInfo"));  // 删除图书信息表
	case 4:
		DropATable(_T("PunishType"));// 删除罚款类型表
	case 3:
		DropATable(_T("ReaderType"));// 删除读者类型表
	case 2:
		DropATable(_T("BookType"));  // 删除图书类型表
	case 1:
		DropATable(_T("UserInfo"));  // 删除系统用户表
		break;
	}
	return TRUE;
}

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

protected:
	//{{AFX_VIRTUAL(CAboutDlg)
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	//}}AFX_VIRTUAL
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
// 实现
protected:
	DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// 用于运行对话框的应用程序命令
void CLibraryManageApp::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}


// CLibraryManageApp 消息处理程序
int CLibraryManageApp::ExitInstance() 
{
	// TODO: Add your specialized code here and/or call the base class
	CString strContent;
	if (m_bFirstExcute)
	{
		strContent = m_strNotExist;
		DeleteFile(m_strFileName);
	}
	else
		strContent = m_strExist;
	if (m_bCreated)
		strContent += m_strExist;
	else
		strContent += m_strNotExist;
	CFile file;
	if(file.Open(m_strFileName, CFile::modeWrite|CFile::modeCreate))
	{
		// 向文件中写入配置数据供程序下次启动使用
		file.Write(strContent, strContent.GetLength());
		file.Close();
	}
	return CWinApp::ExitInstance();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -