📄 managedlg.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 + -