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

📄 addauthor.cpp

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

#include "stdafx.h"
#include "LManage.h"
#include "ADDAuthor.h"
#include ".\addauthor.h"


// CADDAuthor 对话框

IMPLEMENT_DYNAMIC(CADDAuthor, CDialog)
CADDAuthor::CADDAuthor(CWnd* pParent /*=NULL*/)
	: CDialog(CADDAuthor::IDD, pParent)
	, m_Name(_T(""))
	, m_Age(0)
	, m_Remark(_T(""))
{
}

CADDAuthor::~CADDAuthor()
{
}

void CADDAuthor::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_COMBO_INDEX, m_kIndex);
	DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
	DDX_Text(pDX, IDC_EDIT_AGE, m_Age);
	DDV_MinMaxInt(pDX, m_Age, 0, 200);
	DDX_Control(pDX, IDC_COMBO_SEX, m_Sex);
	DDX_Text(pDX, IDC_EDIT_OTHER, m_Remark);
}


BEGIN_MESSAGE_MAP(CADDAuthor, CDialog)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_BN_CLICKED(IDC_AMEND, OnBnClickedAmend)
	ON_BN_CLICKED(IDC_DEL, OnBnClickedDel)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
	ON_CBN_SELCHANGE(IDC_COMBO_INDEX, OnCbnSelchangeComboIndex)
END_MESSAGE_MAP()


// CADDAuthor 消息处理程序

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

	// TODO:  在此添加额外的初始化
	m_Sex.AddString( "未知" );
	m_Sex.AddString( "男" );
	m_Sex.AddString( "女" );
	m_Sex.SetCurSel(0);

	// 读数据库
	LoadAllIndex();
	CString temp;
	m_kIndex.GetLBText( m_kIndex.GetCurSel(), temp );
	GetData( atol(temp) );

	return TRUE;  // return TRUE unless you set the focus to a control
}
// 读取所有的字段索引
void CADDAuthor::LoadAllIndex()
{
	_RecordsetPtr pRecord;
	_variant_t value;
	// 清空list
	while( m_kIndex.GetCount() > 0)
		m_kIndex.DeleteString(0);

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

		// 打开记录集,静态光标(静态记录集),乐观锁定方式
		pRecord->Open("SELECT ID 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 temp;
				temp.Format( "%d", value.lVal );
				m_kIndex.AddString( temp );
			}
			pRecord->MoveNext();
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
	m_kIndex.SetCurSel(0);
}
// 根据索引值填充数据
void CADDAuthor::GetData( int id )
{
	CString sql;
	sql.Format( "SELECT * FROM Author WHERE ID = %d", id );

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

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

		CString name, remark, sex;
		int age;
		if( !pRecord->adoEOF )
		{
			value = pRecord->GetCollect( "Name" );
			if( value.vt != VT_NULL )
				name = value.bstrVal;
			else
				name = "";

			value = pRecord->GetCollect( "Age" );
			if( value.vt != VT_NULL )
				age = value.lVal;
			else
				age = 0;

			value = pRecord->GetCollect( "Sex" );
			if( value.vt != VT_NULL )
				sex = value.bstrVal;
			else
				sex = "未知";

			value = pRecord->GetCollect( "Remark" );
			if( value.vt != VT_NULL )
				remark = value.bstrVal;
			else
				remark = "";

			// 确定显示值
			this->m_Age = age;
			this->m_Name = name;
			this->m_Remark = remark;
			if( sex == "男" )
				m_Sex.SetCurSel(1);
			else if( sex == "女" )
				m_Sex.SetCurSel(2);
			else 
				m_Sex.SetCurSel(0);
		}
		pRecord->Close();
		pRecord = NULL;
	}
	catch( _com_error * e )
	{
		MessageBox( e->ErrorMessage() );
	}
	UpdateData(false);
}
// 执行SQL语句
bool CADDAuthor::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 CADDAuthor::OnCbnSelchangeComboIndex()
{
	if( UpdateData() )
	{
		CString temp;
		m_kIndex.GetLBText( m_kIndex.GetCurSel(), temp );

		GetData( atol(temp) );
	}
}
// 添加作者
void CADDAuthor::OnBnClickedOk()
{
	if( UpdateData() == false )
		return;
	CString sql =  "";
	CString index, temp;

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

	m_Sex.GetLBText( m_Sex.GetCurSel(), sex );

	// 组织SQL语句
	temp.Format("INSERT INTO Author (Name,Age,Sex,Remark) " );
	sql = temp;
	temp.Format("VALUES ('%s','%d','%s','%s')",name, m_Age, sex, remark );
	sql += temp;

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

	// 重新读入链表数据
	LoadAllIndex();

	// 设置当前索引
	int k = m_kIndex.GetCount()-1;
	m_kIndex.GetLBText( k, index );

	// 通过数据库更新显示,以确定修改是否成功
	GetData( atol( index ) );

	m_kIndex.SetCurSel( k );
	UpdateData();
}
// 修改
void CADDAuthor::OnBnClickedAmend()
{
	if( UpdateData() == false )
		return;
	CString sql =  "";
	CString index, temp;

	// 得到当前索引
	int k = m_kIndex.GetCurSel();
	m_kIndex.GetLBText( k, index );

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

	m_Sex.GetLBText( m_Sex.GetCurSel(), sex );

	// 组织SQL语句
	temp.Format("UPDATE Author SET Name = '%s', Age = '%d', Sex = '%s', Remark = '%s'",
		name, m_Age, sex,  remark );
	sql += temp;
	temp.Format("WHERE ID = %s", index );
	sql += temp;

	// 执行SQL语句
	if( this->ExecuteSQL( sql ) == false )
		MessageBox( "表记录修改失败" );
	// 通过数据库更新显示,以确定修改是否成功
	GetData( atol( index ) );
}
// 删除
void CADDAuthor::OnBnClickedDel()
{
	if( UpdateData() == false )
		return;
	CString sql =  "";
	CString index;

	// 得到当前索引
	int k = m_kIndex.GetCurSel();
	m_kIndex.GetLBText( k, index );

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

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

	// 重新读入链表数据
	LoadAllIndex();

	// 通过数据库更新显示修改,记录移动到下一条
	if( k >= m_kIndex.GetCount() )
		k = m_kIndex.GetCount()-1;
	m_kIndex.GetLBText( k, index );
	GetData( atol( index ) );

	m_kIndex.SetCurSel( k );
	UpdateData();
}
// 退出
void CADDAuthor::OnBnClickedCancel()
{
	OnCancel();
}

⌨️ 快捷键说明

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