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

📄 usersetdialog.cpp

📁 VC+SQL SERVER 2000环境下开发的商品销售管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// UserSetDialog.cpp : 实现文件
//

#include "stdafx.h"
#include "SaleManager.h"
#include "UserSetDialog.h"
#include ".\usersetdialog.h"


// CUserSetDialog 对话框

IMPLEMENT_DYNAMIC(CUserSetDialog, CDialog)
CUserSetDialog::CUserSetDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CUserSetDialog::IDD, pParent)
	, m_Canuse(0), m_Index(0), m_ErrorMessage(FALSE)
{
}

CUserSetDialog::~CUserSetDialog()
{
}

void CUserSetDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text (pDX, IDC_EDIT_ACCOUNT, m_Account);
	DDX_Text (pDX, IDC_EDIT_NAME, m_Name);
	DDX_Text (pDX, IDC_EDIT_PASSF, m_PassWord);
	DDX_Text (pDX, IDC_EDIT_PASSA, m_PassWordAgain);
	DDX_Control (pDX,IDC_USER_LIST, m_UserList);
	DDX_Control (pDX, IDC_COMBO_POW, m_Pow); 
	DDX_Control(pDX, IDC_RADIO_CAN, m_RCanUse);
}


BEGIN_MESSAGE_MAP(CUserSetDialog, CDialog)
	ON_BN_CLICKED(IDC_ADD_USER, OnBnClickedAddUser)
	ON_BN_CLICKED(IDC_RADIO_CAN, OnBnClickedRadioCan)
	ON_BN_CLICKED(IDC_RADIO_NO, OnBnClickedRadioNo)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_BN_CLICKED(IDC_BUTTON_CHANGE, OnBnClickedButtonChange)
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnBnClickedButtonCancel)
	ON_NOTIFY(LVN_HOTTRACK, IDC_USER_LIST, OnLvnHotTrackUserList)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()


// CUserSetDialog 消息处理程序

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

    OnConnection();
    
	m_UserList.InsertColumn (0, _T("帐号"), LVCFMT_LEFT, 80,-1);
	m_UserList.InsertColumn (1, _T("姓名"), LVCFMT_LEFT, 80,-1);
	m_UserList.InsertColumn (2, _T("级别"), LVCFMT_LEFT, 80,-1);
	m_UserList.InsertColumn (3, _T("可用"), LVCFMT_LEFT, 46,-1);

	m_UserList.SetExtendedStyle (LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

	InitList();
	InitComboBox();
    CtrlButtonCannotUse();
	AddNewUserCanNotUse();

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CUserSetDialog::OnConnection()
{
    HRESULT hr;

	try
	{
		hr = m_pConnection.CreateInstance(__uuidof(Connection));
        
		if(FAILED(hr))
		{
			AfxMessageBox(_T("创建连接实例失败!"));
			return;
		}
		m_pConnection->ConnectionString = "File Name=SaleManagerdata.udl";
		m_pConnection->ConnectionTimeout = 20;
		hr = m_pConnection->Open ("","","",adConnectUnspecified);

		if(FAILED(hr))
		{
			AfxMessageBox("打开失败");
			return;
		}
	}
	catch(_com_error &e)
	{
		AfxMessageBox(e.ErrorMessage());
	}
}

void CUserSetDialog::AddNewUserCanNotUse()
{
	HRESULT          hrPM;
	_RecordsetPtr    m_pRecordsetPM;
	try
	{
		hrPM = m_pRecordsetPM.CreateInstance (__uuidof(Recordset));
		if(FAILED(hrPM))
		{
			AfxMessageBox (_T("创建实例失败!"));
			return;
		}
		CString strSQL;
		strSQL.Format ("select * from PowerManagerTable where PowerName = '%s'", m_PowerName);
		hrPM = m_pRecordsetPM->Open (_bstr_t(strSQL),
									m_pConnection.GetInterfacePtr(),
									adOpenDynamic,
									adLockOptimistic,
									adCmdText);

		if(SUCCEEDED(hrPM))
		{
			_variant_t var;
			CString    strValue;
			
			if(!m_pRecordsetPM->adoEOF)
			{
				var = m_pRecordsetPM->GetCollect ("ManagerPowNum");
				strValue = (LPCSTR)_bstr_t(var);
				var = m_pRecordsetPM->GetCollect ("PowerName");
				CString PowerName = (LPCSTR)_bstr_t(var);
                if(strValue == "" && PowerName != _T("系统管理员"))
				{
					CButton *pButton = (CButton*)GetDlgItem(IDC_ADD_USER);
					pButton->EnableWindow (FALSE);
				}
			}

			m_pRecordsetPM->Close ();
			m_pRecordsetPM = NULL;
		}
	}//try
	catch(_com_error &e)
	{
		AfxMessageBox (e.ErrorMessage());
		return;
	}
}

void CUserSetDialog::InitList()
{
	_RecordsetPtr  m_pRecordsetP; //PowTable
	_RecordsetPtr  m_pRecordsetL; // LoginTable
	_RecordsetPtr  m_pRecordsetPN; // PowerNameTable
	_RecordsetPtr  m_pRecordsetPM; //PowerManagerTable

	HRESULT        hrP;   
	HRESULT        hrL;
	HRESULT        hrPN;
	HRESULT        hrPM;
	try
	{
		hrP = m_pRecordsetP.CreateInstance (__uuidof(Recordset));
		hrL = m_pRecordsetL.CreateInstance (__uuidof(Recordset));
		hrPN = m_pRecordsetPN.CreateInstance(__uuidof(Recordset));
		hrPM = m_pRecordsetPM.CreateInstance(__uuidof(Recordset));
	
		if(FAILED(hrP) || FAILED(hrL) || FAILED(hrPN) || FAILED(hrPM))
		{
			AfxMessageBox (_T("不能创建记录集实例!"));
			return;
		}
		hrP = m_pRecordsetP->Open ("select * from PowTable",
			                     m_pConnection.GetInterfacePtr(),
			                     adOpenDynamic,
			                     adLockOptimistic,
			                     adCmdText);

		hrL = m_pRecordsetL->Open ("select * from LoginTable",
								m_pConnection.GetInterfacePtr(),
								adOpenDynamic,
								adLockOptimistic,
								adCmdText);

		hrPN = m_pRecordsetPN->Open ("select * from PowerNameTable",
								m_pConnection.GetInterfacePtr(),
								adOpenDynamic,
								adLockOptimistic,
								adCmdText);



		if(SUCCEEDED(hrP) && SUCCEEDED(hrL) && SUCCEEDED(hrPN) && SUCCEEDED(hrPM))
		{
			_variant_t var;
			CString    strValue;
			BOOL       CanUse;
			int        AccountNum;
			CString    PowerName;
			struct FlagUserSetPower{
				CString  AccountName;
				CString  PowerName;
				CString  RealName;
				CString  PowerNum;
				CString  CanUse;
				int      AccountNum;
				BOOL     flag;
			};
			FlagUserSetPower *pFlagUserSetPower;
			int Size = 0;

			while(!m_pRecordsetP->adoEOF)
			{
				Size++;
				m_pRecordsetP->MoveNext();
			}

			pFlagUserSetPower = new FlagUserSetPower[Size];

			m_Index = 0;
			m_pRecordsetP->MoveFirst();

			while(!m_pRecordsetP->adoEOF)
			{
				var = m_pRecordsetP->GetCollect ("AccountNum");
				if(var.vt != VT_NULL)
					AccountNum = (int)_variant_t(var);

				pFlagUserSetPower[m_Index].AccountNum = AccountNum;

				m_pRecordsetL->MoveFirst();
				while(!m_pRecordsetL->adoEOF)
				{
					int tempAccountNum ;
				    var = m_pRecordsetL->GetCollect ("AccountNum");
				    if(var.vt != VT_NULL)
					   tempAccountNum = (int)_variant_t(var);

					if(tempAccountNum == AccountNum)
					{
					   var = m_pRecordsetL->GetCollect ("AccountName");
				       if(var.vt != VT_NULL)
					       strValue = (LPCSTR) _bstr_t(var);
					   break;
					}

					m_pRecordsetL->MoveNext();
				}

                pFlagUserSetPower[m_Index].AccountName = strValue;

				var = m_pRecordsetP->GetCollect ("RealName");
				if(var.vt != VT_NULL)
					strValue = (LPCSTR)_bstr_t(var);
				pFlagUserSetPower[m_Index].RealName = strValue;

				var = m_pRecordsetP->GetCollect ("PowerName");
				if(var.vt != VT_NULL)
					strValue = (LPCSTR)_bstr_t(var);
				pFlagUserSetPower[m_Index].PowerName = strValue;

				m_pRecordsetPN->MoveFirst();
				while(!m_pRecordsetPN->adoEOF)
				{
					CString tempPowerName;
					var = m_pRecordsetPN->GetCollect("PowerName");
				    tempPowerName = (LPCSTR)_bstr_t(var);
					
					if(tempPowerName == strValue)
					{
						var = m_pRecordsetPN->GetCollect("PowerNum");
                        pFlagUserSetPower[m_Index].PowerNum = (LPCSTR)_bstr_t(var);
						break;
					}
					m_pRecordsetPN->MoveNext();
				}

				var = m_pRecordsetP->GetCollect ("CanUse");
				if(var.vt != VT_NULL)
					CanUse = (int)_variant_t(var);
				if(CanUse)
				    pFlagUserSetPower[m_Index].CanUse = _T("可用");
				else
					pFlagUserSetPower[m_Index].CanUse = _T("禁用");

				pFlagUserSetPower[m_Index].flag = FALSE;

				m_pRecordsetP->MoveNext();
				m_Index++;
			}

			for(m_Index = 0 ; m_Index < Size; m_Index++)
			{
				if(pFlagUserSetPower[m_Index].AccountNum == m_AccountNum)
				{
					pFlagUserSetPower[m_Index].flag = TRUE;
					break;
				}
			}

			m_pRecordsetL->MoveFirst();
			while(!m_pRecordsetL->adoEOF)
			{
				var = m_pRecordsetL->GetCollect("AccountName");
				strValue = (LPCSTR)_bstr_t(var);
				if(strValue == m_AccountName)
				{
				   var = m_pRecordsetL->GetCollect("PowerName");
				   PowerName = (LPCSTR)_bstr_t(var);
				   break;
				}
				m_pRecordsetL->MoveNext();
			}
			CString strSQL;
			strSQL.Format("select * from PowerManagerTable where PowerName = '%s'", PowerName);
			
            hrPM = m_pRecordsetPM->Open (_bstr_t(strSQL),
						m_pConnection.GetInterfacePtr(),
						adOpenDynamic,
						adLockOptimistic,
						adCmdText);

			var = m_pRecordsetPM->GetCollect("ManagerPowNum");
			strValue = (LPCSTR)_bstr_t(var);

			int Count = strValue.GetLength();

			for(m_Index = 0; m_Index < Count; m_Index ++)
			{
				for(int index = 0; index < Size; index++)
				{
					if(strValue[m_Index] == pFlagUserSetPower[index].PowerNum)
						pFlagUserSetPower[index].flag = TRUE;
				}
			}
			int index = 0;

			for(m_Index = 0; m_Index < Size; m_Index++)
			{
				if(pFlagUserSetPower[m_Index].flag == TRUE &&
					  pFlagUserSetPower[m_Index].AccountName != _T("admin")  &&
					  pFlagUserSetPower[m_Index].AccountName != _T("manager"))
				{
					m_UserList.InsertItem(index, pFlagUserSetPower[m_Index].AccountName);
					m_UserList.SetItemText(index, 1, pFlagUserSetPower[m_Index].RealName);
					m_UserList.SetItemText(index, 2, pFlagUserSetPower[m_Index].PowerName);
					m_UserList.SetItemText(index, 3, pFlagUserSetPower[m_Index].CanUse);
					index++;
				}
			}

			m_pRecordsetP->Close();
			m_pRecordsetL->Close();
			m_pRecordsetPN->Close();
			m_pRecordsetPM->Close();
			m_pRecordsetP = NULL;
			m_pRecordsetL = NULL;
			delete []pFlagUserSetPower;
		}
	}
	catch(_com_error &e)
	{
		AfxMessageBox (e.ErrorMessage());
	}
}

void CUserSetDialog::InitComboBox()
{
	_RecordsetPtr  m_pRecordsetPN;
	_RecordsetPtr  m_pRecordsetPM;
	HRESULT        hrPN;
	HRESULT        hrPM;
	try
	{
		hrPN = m_pRecordsetPN.CreateInstance (__uuidof(Recordset));
		hrPM = m_pRecordsetPM.CreateInstance (__uuidof(Recordset));
		
		if(FAILED(hrPN) || FAILED(hrPM))
		{
			AfxMessageBox (_T("不能创建记录集实例!"));
			return;
		}
		hrPN = m_pRecordsetPN->Open ("select * from PowerNameTable",
			                       m_pConnection.GetInterfacePtr(),
			                       adOpenDynamic,
			                       adLockOptimistic,
			                       adCmdText);
		CString  strSQL;
		strSQL.Format ("select * from PowerManagerTable where PowerName = '%s'", m_PowerName);
		hrPM = m_pRecordsetPM->Open (_bstr_t(strSQL),
			                         m_pConnection.GetInterfacePtr(),
			                         adOpenDynamic,
			                         adLockOptimistic,
			                         adCmdText);

			                          
		if(SUCCEEDED(hrPN) && SUCCEEDED(hrPM))
		{
			_variant_t var;
			CString    strValue;
			CString    ManagerPow;

		    var = m_pRecordsetPM->GetCollect ("ManagerPowNum");
			ManagerPow = (LPCSTR)_bstr_t(var);
            
			if(m_PowerName != _T("超级用户") && m_PowerName != _T("系统管理员"))
			   m_Pow.InsertString (-1,m_PowerName);
			if(ManagerPow == "")
				return;
			int Count = ManagerPow.GetLength ();
            for(int index = 0; index < Count; index++)
			{
				CString num = "";
				num += ManagerPow[index];
				m_pRecordsetPN->MoveFirst ();
				while( !m_pRecordsetPN->adoEOF)
				{
					var = m_pRecordsetPN->GetCollect ("PowerNum");
					strValue = (LPCSTR)_bstr_t(var);

					if(strValue == num)
					{
						var = m_pRecordsetPN->GetCollect ("PowerName");
						strValue  = (LPCSTR)_bstr_t(var);
						m_Pow.InsertString (-1, strValue);
						break;
					}
					
					m_pRecordsetPN->MoveNext ();
				}
			}//for
		}//if
	        
	}
	catch(_com_error &e)
	{
		AfxMessageBox (e.ErrorMessage());
	}
}

void CUserSetDialog::CtrlButtonCanUse()//使控件可以使用
{
	CEdit *pEdit = (CEdit*) GetDlgItem(IDC_EDIT_ACCOUNT);
	pEdit->EnableWindow(TRUE);

	pEdit = (CEdit*) GetDlgItem(IDC_EDIT_NAME);
	pEdit->EnableWindow(TRUE);

	pEdit = (CEdit*) GetDlgItem(IDC_EDIT_PASSF);
	pEdit->EnableWindow(TRUE);

	pEdit = (CEdit*) GetDlgItem(IDC_EDIT_PASSA);
	pEdit->EnableWindow(TRUE);

	CButton *pButton = (CButton*)GetDlgItem(IDC_RADIO_CAN);
	pButton->EnableWindow(TRUE);
    
	pButton = (CButton*)GetDlgItem(IDC_RADIO_NO);
	pButton->EnableWindow(TRUE);

	pButton = (CButton*)GetDlgItem(IDOK);
	pButton->EnableWindow(TRUE);

	pButton = (CButton*)GetDlgItem(IDC_BUTTON_CANCEL);
	pButton->EnableWindow(TRUE);

	m_Pow.EnableWindow(TRUE);
}

void CUserSetDialog::CtrlButtonCannotUse()//使控件不能使用
{
	CEdit *pEdit = (CEdit*) GetDlgItem(IDC_EDIT_ACCOUNT);
	pEdit->EnableWindow(FALSE);

	pEdit = (CEdit*) GetDlgItem(IDC_EDIT_NAME);
	pEdit->EnableWindow(FALSE);

	pEdit = (CEdit*) GetDlgItem(IDC_EDIT_PASSF);
	pEdit->EnableWindow(FALSE);

⌨️ 快捷键说明

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