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

📄 usermanage.cpp

📁 自己编的设备管理系统
💻 CPP
字号:
// UserManage.cpp : implementation file
//

#include "stdafx.h"
#include "eq_manager_sys.h"
#include "UserManage.h"
#include "UserLogin.h"
#include "UserManage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUserManage dialog


CUserManage::CUserManage(CWnd* pParent /*=NULL*/)
	: CDialog(CUserManage::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUserManage)
	m_LastLogin = _T("");
	m_Password = _T("");
	m_PasswordRe = _T("");
	m_UserName = _T("");
	m_Power = _T("");
	m_cPower = _T("");
	//}}AFX_DATA_INIT
}


void CUserManage::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUserManage)
	DDX_Control(pDX, IDC_LIST_User, m_UserManage);
	DDX_Text(pDX, IDC_EDIT_Lastlogin, m_LastLogin);
	DDX_Text(pDX, IDC_EDIT_Password, m_Password);
	DDX_Text(pDX, IDC_EDIT_PasswordRe, m_PasswordRe);
	DDX_Text(pDX, IDC_EDIT_UserName, m_UserName);
	DDX_CBString(pDX, IDC_COMBO_Power, m_Power);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUserManage, CDialog)
	//{{AFX_MSG_MAP(CUserManage)
	ON_NOTIFY(NM_CLICK, IDC_LIST_User, OnClickLISTUser)
	ON_BN_CLICKED(IDC_BUTTON_Insert, OnBUTTONInsert)
	ON_BN_CLICKED(IDC_BUTTON_Delete, OnBUTTONDelete)
	ON_BN_CLICKED(IDC_BUTTON_Modify, OnBUTTONModify)
	ON_BN_CLICKED(IDC_BUTTON_Clear, OnBUTTONClear)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUserManage message handlers
void CUserManage::ConnectDB()//function for connect DataBase
{
	CString sql;
	TRY
	{
		sql.Format("DSN=ORADB;UID=eq_system;PWD=eq_system");
		m_db.OpenEx(sql,CDatabase::noOdbcDialog);
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox("问题出在连接数据库");
		AfxMessageBox(ex->m_strError);
		AfxMessageBox(ex->m_strStateNativeOrigin);
	}
	AND_CATCH(CMemoryException,pEx)
	{
		pEx->ReportError();
		AfxMessageBox("memory exception");
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox(szError);
	}
	END_CATCH

	InitCtrlData();
}
	
void CUserManage::InitControl()
{
	DWORD dwExstyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|
		LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;
	m_UserManage.SetExtendedStyle(dwExstyle);

	//初试化设备信息表列表框控件
	m_UserManage.InsertColumn(0,"用户名",LVCFMT_CENTER,100);
	m_UserManage.InsertColumn(1,"口令",LVCFMT_CENTER,100);
	m_UserManage.InsertColumn(2,"用户权限",LVCFMT_CENTER,100);
	m_UserManage.InsertColumn(3,"最近访问时间",LVCFMT_CENTER,120);
}

///////

void CUserManage::InitCtrlData()
{
	if(!m_db.IsOpen())
	{
		MessageBox("数据库没打开");
			return;
	}
	m_UserManage.DeleteAllItems();

	TRY
	{
		CRecordset rs(&m_db);
		rs.Open(CRecordset::dynaset,"select * from eq_user");
		while(!rs.IsEOF())
		{
			CString name,password,power,lastlogin;
			CString PowerName;

			rs.GetFieldValue((short)0,name);
			rs.GetFieldValue((short)1,password);
			rs.GetFieldValue((short)2,power);
			rs.GetFieldValue((short)3,lastlogin);

			if(power=="1")
				PowerName = "系统权限";
			else
				PowerName = "普通权限";
			//向控件加入一条
			InsertUserList(name,password,PowerName,lastlogin);
			rs.MoveNext();
		}
		rs.Close();
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox("问题出在初试化表格");
		AfxMessageBox(ex->m_strError);
		AfxMessageBox(ex->m_strStateNativeOrigin);
	}
	AND_CATCH(CMemoryException,pEx)
	{
		pEx->ReportError();
		AfxMessageBox("memory exception");
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox(szError);
	}
	END_CATCH
}

void CUserManage::InsertUserList(CString name,CString password,CString power,CString lastlogin)
{	
	int index=m_UserManage.GetItemCount();
	
	LV_ITEM lvItem1;
	lvItem1.mask=LVIF_TEXT;
	lvItem1.iItem=index;// 行数
	lvItem1.iSubItem=0;
	lvItem1.pszText=(char*)(LPCTSTR)name;//第一列
	//在最后一行插入记录直
	m_UserManage.InsertItem(&lvItem1);
	//设置该行的其他列的直
	m_UserManage.SetItemText(index,1,password);
	m_UserManage.SetItemText(index,2,power);
	m_UserManage.SetItemText(index,3,lastlogin);	
}

BOOL CUserManage::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	InitControl();//
	ConnectDB();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CUserManage::OnOK() 
{
	// TODO: Add extra validation here
	m_db.Close();
	CDialog::OnOK();
}

void CUserManage::OnClickLISTUser(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int nItem=m_UserManage.GetNextItem(-1,LVNI_SELECTED);
	if(nItem!=-1)
	{
		//从列表框控件的第nItem+1行获取数据,以将这些数据显示在设备空间中
		m_UserName=m_UserManage.GetItemText(nItem,0);
		m_Password=m_UserManage.GetItemText(nItem,1);
		m_Power=m_UserManage.GetItemText(nItem,2);
		m_LastLogin=m_UserManage.GetItemText(nItem,3);
		m_cPower = m_Power;
		UpdateData(FALSE);
	}
	*pResult = 0;
}

void CUserManage::OnBUTTONInsert() 
{
	// TODO: Add your control notification handler code here
	int iPower;
	CString sql;
//	CString cPower;
	UpdateData(TRUE);
	if(m_UserName!="")
	{
		if(m_Password!="")
		{
			if(m_Password==m_PasswordRe)
			{
				TRY
				{
					//CRecordset rs(&m_db);
					//insert the new user info into eq_user
					if(m_Power=="系统权限")
					{
						iPower = 1;
						//cPower = "session,dba";
					}
					else
					{
						iPower = 0;
						//cPower = "session";
					}

					sql.Format("Insert into eq_user values('%s','%s',%d,'%s')",m_UserName,m_Password,iPower,m_LastLogin);									
					TRACE(sql);
					m_db.ExecuteSQL(sql);
					//create the new user 
					//if it is a system user;
					if(iPower==1)
					{
						//create the system user in Oracle
						sql.Format("create user %s identified by %s",m_UserName,m_Password);
						TRACE(sql);
						m_db.ExecuteSQL(sql);
						//grant the system user
						sql.Format("grant create session,dba to %s",m_UserName);
						TRACE(sql);
						m_db.ExecuteSQL(sql);
					}
					//insert the new info into the 
					InitCtrlData();
					//rs.Close();
				}
				CATCH(CDBException,ex)
				{
					AfxMessageBox("问题出在插入");
					AfxMessageBox(ex->m_strError);
					AfxMessageBox(ex->m_strStateNativeOrigin);
				}
				AND_CATCH(CMemoryException,pEx)
				{
					pEx->ReportError();
					AfxMessageBox("memory exception");
				}
				AND_CATCH(CException,e)
				{
					TCHAR szError[100];
					e->GetErrorMessage(szError,100);
					AfxMessageBox(szError);
				}
				END_CATCH
			}
			else
				MessageBox("两次输入的密码不匹配!");
		}
		else
			MessageBox("密码不能为空!");
	}
	else
		MessageBox("用户名不能为空!");

}

void CUserManage::OnBUTTONDelete() 
{
	// TODO: Add your control notification handler code here
	int nItem=m_UserManage.GetNextItem(-1,LVNI_SELECTED);
	if(nItem!=0)
	{
		if(nItem==-1)
		{
			AfxMessageBox("没有选择欲删除的用户!");
				return;
		}
		CString strUserName=m_UserManage.GetItemText(nItem,0);
		TRY
		{
			CString sql;
			sql.Format("delete eq_user where user_name='%s'",strUserName);
			TRACE(sql);
			m_db.ExecuteSQL(sql);
			///if system user,delete it from Oracle
			if(m_UserManage.GetItemText(nItem,2)=="系统权限")
			{
				sql.Format("drop user %s cascade",strUserName);
				TRACE(sql);
				m_db.ExecuteSQL(sql);
			}
			InitCtrlData();
		}
		CATCH(CDBException,ex)
		{
			AfxMessageBox("问题出在删除");
			AfxMessageBox(ex->m_strError);
			AfxMessageBox(ex->m_strStateNativeOrigin);
		}
		AND_CATCH(CMemoryException,pEx)
		{
			pEx->ReportError();
			AfxMessageBox("memory exception");
		}
		AND_CATCH(CException,e)
		{
			TCHAR szError[100];
			e->GetErrorMessage(szError,100);
			AfxMessageBox(szError);
		}
		END_CATCH
	}
	else
		MessageBox("超级用户不能删除!");

}

void CUserManage::OnBUTTONModify() 
{
	// TODO: Add your control notification handler code here
	int iPower;
	if(!UpdateData())
		return;
	// TODO: Add your control notification handler code here
	int nItem=m_UserManage.GetNextItem(-1,LVNI_SELECTED);
	//如果没有选择要修改的记录返回
	if(nItem==-1)
	{
		AfxMessageBox("没有选择欲修改的用户!");
			return;
	}
	if(nItem==0)
	{
		AfxMessageBox("超级用户不能修改!");
			return;
	}
	CString strUserName=m_UserManage.GetItemText(nItem,0);
	UpdateData(TRUE);
	//MessageBox(m_Power);
	if(m_Power=="系统权限")
	{
		iPower=1;
	}
	else if(m_Power=="普通权限")
		iPower=0;

	if(m_Password!="")
	{
		if(m_Password==m_PasswordRe)
		{
			TRY
			{
				CString sql;
				//update
				sql.Format("update eq_user set User_Name='%s',"
					"user_psd='%s',"
					"user_power='%d',"
					"last_login='%s'"
					"where User_Name='%s'",m_UserName,m_Password,iPower,m_LastLogin,strUserName);	
				TRACE(sql);
				m_db.ExecuteSQL(sql);
		
				//if user is change from ordinary to system
				if(iPower==1&&m_cPower=="普通权限")
				{
					//create the system user in Oracle
					sql.Format("create user %s identified by %s",m_UserName,m_Password);
					TRACE(sql);
					m_db.ExecuteSQL(sql);
					//grant the system user
					sql.Format("grant create session,dba to %s",m_UserName);
					TRACE(sql);
					m_db.ExecuteSQL(sql);
				}
				//if user is changing from system to ordinary
				if(iPower==0&&m_cPower=="系统权限")
				{
					//drop the old user from Oracle
					sql.Format("drop user %s cascade",m_UserName);
					TRACE(sql);
					m_db.ExecuteSQL(sql);
				}

				InitCtrlData();
				UpdateData(FALSE);
			}
			CATCH(CDBException,ex)
			{
				AfxMessageBox("问题出在更新");
				AfxMessageBox(ex->m_strError);
				AfxMessageBox(ex->m_strStateNativeOrigin);
			}
			AND_CATCH(CMemoryException,pEx)
			{
				pEx->ReportError();
				AfxMessageBox("memory exception");
			}
			AND_CATCH(CException,e)
			{
				TCHAR szError[100];
				e->GetErrorMessage(szError,100);
				AfxMessageBox(szError);
			}
			END_CATCH
		}
		else
			MessageBox("两次输入的密码不匹配!");
	}
	else
		MessageBox("密码不能为空!");
}

void CUserManage::OnBUTTONClear() 
{
	// TODO: Add your control notification handler code here
	m_UserName = "";
	m_Password = "";
	m_PasswordRe = "";
	m_Power = "";
	m_LastLogin = "";

	UpdateData(FALSE);
}

⌨️ 快捷键说明

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