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

📄 managedlg.cpp

📁 图书管理系统
💻 CPP
字号:
// ManageDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "LManage.h"
#include "ManageDlg.h"
#include ".\managedlg.h"
#include "ADDAuthor.h"
#include "AddBookConcern.h"
#include "ADDTypeDlg.h"

// CManageDlg 对话框

IMPLEMENT_DYNAMIC(CManageDlg, CDialog)
CManageDlg::CManageDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CManageDlg::IDD, pParent)
	, m_BookName(_T(""))
	, m_BookNum(0)
{
}

CManageDlg::~CManageDlg()
{
}

void CManageDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_BOOK, m_BookList);
	DDX_Control(pDX, IDC_COMBO_AUTHOR, m_kAuthor);
	DDX_Control(pDX, IDC_COMBO_CONCERN, m_kBookConcern);
	DDX_Control(pDX, IDC_COMBO_TYPE, m_kType);
	DDX_Text(pDX, IDC_EDIT_BOOKNAME, m_BookName);
	DDX_Text(pDX, IDC_EDIT_BOOKNUM, m_BookNum);
	DDV_MinMaxLong(pDX, m_BookNum, 0, 10000000);
}


BEGIN_MESSAGE_MAP(CManageDlg, CDialog)
	ON_BN_CLICKED(IDC_BTADDAUTHOR, OnBnClickedBtaddauthor)
	ON_BN_CLICKED(IDC_BTADDCONCERN, OnBnClickedBtaddconcern)
	ON_BN_CLICKED(IDC_BTADDTYPE, OnBnClickedBtaddtype)
	ON_NOTIFY(NM_CLICK, IDC_LIST_BOOK, OnNMClickListBook)
	ON_BN_CLICKED(IDC_BTADD, OnBnClickedBtadd)
	ON_BN_CLICKED(IDC_BTCHANGE, OnBnClickedBtchange)
	ON_BN_CLICKED(IDC_BTDEL, OnBnClickedBtdel)
END_MESSAGE_MAP()


// CManageDlg 消息处理程序

BOOL CManageDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	m_BookList.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );
	m_BookList.InsertColumn(0,"编号",LVCFMT_CENTER,40);
	m_BookList.InsertColumn(1,"书名",LVCFMT_LEFT,110);
	m_BookList.InsertColumn(2,"作者",LVCFMT_LEFT,75);

	// 读入初始化数据
	LoadAuthor();
	LoadBookConcern();
	LoadType();

	LoadBook();
	if( m_BookList.GetItemCount() > 0 )
	{
		m_BookList.SetItemState( 0,LVIS_SELECTED,LVIS_SELECTED );
		ShowSltBookInfo();
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

// 读入作者
void CManageDlg::LoadAuthor()
{
	_RecordsetPtr pRecord;
	_variant_t value;
	// 清空list
	while( m_kAuthor.GetCount() > 0)
		m_kAuthor.DeleteString(0);

	try
	{
		// 生成Recordset实例
		pRecord.CreateInstance("ADODB.Recordset");

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open("SELECT ID , Name FROM Author",   // 查询所有语句
			_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

		while( !pRecord->adoEOF )
		{
			value = pRecord->GetCollect( "ID" );
			if( value.vt != VT_NULL )
			{
				CString name;
				int id;
				// 得到ID
				id = value.lVal;

				// 得到名字
				value = pRecord->GetCollect( "Name" );
				if( value.vt != VT_NULL )
					name = value.bstrVal;
				else
					name = "";

				m_kAuthor.AddMyString( id, name );
			}
			pRecord->MoveNext();
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
	m_kAuthor.SetCurSel(0);
}

// 读入出版社
void CManageDlg::LoadBookConcern()
{
	_RecordsetPtr pRecord;
	_variant_t value;
	// 清空list
	while( m_kBookConcern.GetCount() > 0)
		m_kBookConcern.DeleteString(0);

	try
	{
		// 生成Recordset实例
		pRecord.CreateInstance("ADODB.Recordset");

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open("SELECT ID , Name FROM BookConcern",   // 查询所有语句
			_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

		while( !pRecord->adoEOF )
		{
			value = pRecord->GetCollect( "ID" );
			if( value.vt != VT_NULL )
			{
				CString name;
				int id;
				// 得到ID
				id = value.lVal;

				// 得到名字
				value = pRecord->GetCollect( "Name" );
				if( value.vt != VT_NULL )
					name = value.bstrVal;
				else
					name = "";

				m_kBookConcern.AddMyString( id, name );
			}
			pRecord->MoveNext();
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
	m_kBookConcern.SetCurSel(0);
}

// 读入类型
void CManageDlg::LoadType()
{
	_RecordsetPtr pRecord;
	_variant_t value;
	// 清空list
	while( m_kType.GetCount() > 0)
		m_kType.DeleteString(0);

	try
	{
		// 生成Recordset实例
		pRecord.CreateInstance("ADODB.Recordset");

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open("SELECT ID , Name FROM Type",   // 查询所有语句
			_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

		while( !pRecord->adoEOF )
		{
			value = pRecord->GetCollect( "ID" );
			if( value.vt != VT_NULL )
			{
				CString name;
				int id;
				// 得到ID
				id = value.lVal;

				// 得到名字
				value = pRecord->GetCollect( "Name" );
				if( value.vt != VT_NULL )
					name = value.bstrVal;
				else
					name = "";

				m_kType.AddMyString( id, name );
			}
			pRecord->MoveNext();
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
	m_kType.SetCurSel(0);
}

// 添加作者
void CManageDlg::OnBnClickedBtaddauthor()
{
	// TODO: 在此添加控件通知处理程序代码
	CADDAuthor dlg;
	dlg.DoModal();
	LoadAuthor();
}
// 添加出版社
void CManageDlg::OnBnClickedBtaddconcern()
{
	CAddBookConcern dlg;
	dlg.DoModal();
	LoadBookConcern();
}
// 添加类型
void CManageDlg::OnBnClickedBtaddtype()
{
	CADDTypeDlg dlg;
	dlg.DoModal();
	LoadType();
}

// 读入所有书名,作者
void CManageDlg::LoadBook()
{
	_RecordsetPtr pRecord;
	_variant_t value;
	// 清空list
	m_BookList.DeleteAllItems();

	try
	{
		// 生成Recordset实例
		pRecord.CreateInstance("ADODB.Recordset");
		CString sql;
		sql = "SELECT b.ID , b.Name , a.Name ";
		sql += "FROM Book b, Author a ";
		sql += "WHERE b.Author = a.ID";

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open(sql.GetBuffer(),   // 查询所有语句
			_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

		int i = 0;
		while( !pRecord->adoEOF )
		{
			int k;
			CString name, author,temp;
			value = pRecord->GetCollect( "ID" );
			if( value.vt != VT_NULL )
			{
				k = value.lVal;

				// 作者
				value = pRecord->GetCollect("b.Name");
				if( value.vt != VT_NULL )
					name = value.bstrVal;
				else
					name = "";

				// 书名
				value = pRecord->GetCollect("a.Name");
				if( value.vt != VT_NULL )
					author = value.bstrVal;
				else
					author = "";

				// 加入链表
				temp.Format( "%d",k);
				m_BookList.InsertItem(i,temp,0);
				m_BookList.SetItemText(i,1,name);
				m_BookList.SetItemText(i,2,author);

				i++;
			}

			pRecord->MoveNext();
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
}

void CManageDlg::OnNMClickListBook(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;

	ShowSltBookInfo();
}
// 显示当前选中的书的信息
void CManageDlg::ShowSltBookInfo()
{
	if(m_BookList.GetSelectedCount() <= 0)
	{
		return;
	}

	int k = 0;
	int countnum=m_BookList.GetItemCount();
	for(int i =0;i<countnum;i++)
	{
		if(m_BookList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//选中状态。。
		{
			k = i;
		}
	}
	CString id;
	id = m_BookList.GetItemText(k,0);

	LoadOneBookData( atol( id ) ); 
}
// 读入一本书的所有属性,并更改显示
// id : 书的索引号
bool CManageDlg::LoadOneBookData( int id )
{
	_RecordsetPtr pRecord;
	_variant_t value;

	try
	{
		// 生成Recordset实例
		pRecord.CreateInstance("ADODB.Recordset");
		CString sql;
		sql.Format("SELECT * FROM Book WHERE ID = %d", id );

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open(sql.GetBuffer(),   // 查询所有语句
			_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

		if( !pRecord->adoEOF )
		{
			// 书名
			value = pRecord->GetCollect("Name");
			if( value.vt != VT_NULL )
				m_BookName = value.bstrVal;
			else
				m_BookName = "";

			// 数目
			value = pRecord->GetCollect("Num");
			if( value.vt != VT_NULL )
				m_BookNum = value.lVal;
			else
				m_BookNum = 0;

			// 作者
			value = pRecord->GetCollect("Author");
			if( value.vt != VT_NULL )
				m_kAuthor.SetMyCurSel( (int)value.lVal );
			else
				m_kAuthor.SetMyCurSel( 0 );

			// 出版社
			value = pRecord->GetCollect("BookConcern");
			if( value.vt != VT_NULL )
				m_kBookConcern.SetMyCurSel( (int)value.lVal );
			else
				m_kBookConcern.SetMyCurSel( 0 );

			// 类型
			value = pRecord->GetCollect("Type");
			if( value.vt != VT_NULL )
				m_kType.SetMyCurSel( (int)value.lVal );
			else
				m_kType.SetMyCurSel( 0 );
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
		return false;
	}
	UpdateData(false);
	return true;
}
// 执行SQL语句
bool CManageDlg::ExecuteSQL( CString sql )
{
	try
	{
		_variant_t RecordsAffected;
		theApp.m_pConnection->Execute( sql.GetBuffer(), &RecordsAffected,adCmdText);
	}
	catch( _com_error *e)
	{
		MessageBox(e->ErrorMessage());
		return false;
	}
	return true;
}
// 添加
void CManageDlg::OnBnClickedBtadd()
{
	if( UpdateData() == false )
		return;
	CString sql =  "";
	CString index, temp;

	// 规范化字符串
	CString name, remark,sex;
	name = m_BookName;
	name.Replace("'", "''");

	// 组织SQL语句
	temp.Format("INSERT INTO Book (Name,Author,BookConcern,Num, Type ) " );
	sql = temp;
	temp.Format("VALUES ('%s','%d','%d','%d','%d')",name, m_kAuthor.GetCurMyID(), 
		m_kBookConcern.GetCurMyID(), m_BookNum, m_kType.GetCurMyID() );
	sql += temp;

	// 执行SQL语句
	if( this->ExecuteSQL( sql ) == false )
		MessageBox( "记录添加失败" );

	// 重新读入链表数据
	LoadBook();
	m_BookList.SetItemState( m_BookList.GetItemCount()-1,LVIS_SELECTED,LVIS_SELECTED );
	ShowSltBookInfo();
}
// 修改
void CManageDlg::OnBnClickedBtchange()
{
	if( UpdateData() == false )
		return;
	// 得到当前选中的书的ID
	if(m_BookList.GetSelectedCount() <= 0)
	{
		return;
	}

	int k = 0;
	int countnum=m_BookList.GetItemCount();
	for(int i =0;i<countnum;i++)
	{
		if(m_BookList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//选中状态。。
		{
			k = i;
		}
	}
	CString id;
	id = m_BookList.GetItemText(k,0);

	// 组织SQL语句
	CString sql =  "";
	CString index, temp;

	// 规范化字符串
	CString name, remark,sex;
	name = m_BookName;
	name.Replace("'", "''");

	// 组织SQL语句
	temp.Format("UPDATE Book SET Name = '%s',", name );
	sql = temp;
	temp.Format("Author = '%d',", m_kAuthor.GetCurMyID() );
	sql += temp;
	temp.Format("BookConcern = '%d',", m_kBookConcern.GetCurMyID() );
	sql += temp;
	temp.Format("Num = '%d',", m_BookNum );
	sql += temp;
	temp.Format("Type = '%d' ", m_kType.GetCurMyID() );
	sql += temp;
	temp.Format("WHERE ID = %s", id );
	sql += temp;

	// 执行SQL语句
	if( this->ExecuteSQL( sql ) == false )
		MessageBox( "记录修改失败" );

	// 重新读入链表数据
	LoadBook();
	m_BookList.SetItemState( m_BookList.GetItemCount()-1,LVIS_SELECTED,LVIS_SELECTED );
	ShowSltBookInfo();
}
// 删除
void CManageDlg::OnBnClickedBtdel()
{
	if( UpdateData() == false )
		return;
	// 得到当前选中的书的ID
	if(m_BookList.GetSelectedCount() <= 0)
	{
		return;
	}

	int k = 0;
	int countnum=m_BookList.GetItemCount();
	for(int i =0;i<countnum;i++)
	{
		if(m_BookList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//选中状态。。
		{
			k = i;
		}
	}
	CString id;
	id = m_BookList.GetItemText(k,0);

	CString sql;
	// 组织SQL语句
	sql.Format("DELETE FROM Book WHERE (ID = %s)",id );

	// 执行SQL语句
	if( this->ExecuteSQL( sql ) == false )
		MessageBox( "删除记录失败" );

	// 重新读入链表数据
	LoadBook();
	if( k >= m_BookList.GetItemCount() )
		k = m_BookList.GetItemCount()-1;
	m_BookList.SetItemState( k,LVIS_SELECTED,LVIS_SELECTED );
	ShowSltBookInfo();
}

⌨️ 快捷键说明

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