1. 程式人生 > >MFC 對話方塊 運用mysql資料庫 製作登入介面,記住密碼功能

MFC 對話方塊 運用mysql資料庫 製作登入介面,記住密碼功能

首先MFC連線mysql資料庫的配置百度配好,這裡不再解釋。注意x64和x32配置時是有區別的。x64的系統libmysqld.dll檔案要放到工程檔案X64\DEBUG中才能配置好資料庫連線。

1.新建MFC工程 命名為登入介面。在資源檢視新增對話方塊資源IDD_DIALOG1

給該對話方塊定義一個dlg

2.開啟該對話方塊資源加入兩個edit(輸入的賬號密碼),兩個static(使用者名稱:密碼:),一個checkbox(記住密碼)。

3.開啟dlg.h檔案在public加入

CString user1,password;
	MYSQL_RES *res;
	MYSQL m_sqlCon;
	MYSQL_ROW row;


4.找到登入介面.cpp檔案中的BOOL C登入介面App::InitInstance()函式新增補充如下程式碼

dlg dlgg;
	if(dlgg.DoModal()==IDOK)
	{
		C登入介面Dlg dlg;
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();
		if (nResponse == IDOK)
		{
		// TODO: 在此放置處理何時用
		//  “確定”來關閉對話方塊的程式碼
		}
		else if (nResponse == IDCANCEL)
		{
		// TODO: 在此放置處理何時用
		//  “取消”來關閉對話方塊的程式碼
		}
	}
	else
	{
		return FALSE;
	}


5.雙擊新建對話方塊資源中的 確定控制元件新增程式碼

	GetDlgItem(IDC_EDIT1)->GetWindowText(user1);
	GetDlgItem(IDC_EDIT2)->GetWindowText(password);
	const char user[] = "root";         
    const char pswd[] = "1234";        
    const char host[] = "localhost";    
    const char table[] = "mysql";       
    unsigned int port = 3306;         
	MYSQL_RES *res;
	MYSQL m_sqlCon;
	MYSQL_ROW row;
	if(user1.IsEmpty()||password.IsEmpty())
	{
		MessageBox(_T("使用者名稱或密碼不能為空!"),_T("使用者登入資訊"));
		return;
		}
	mysql_init(&m_sqlCon); 
	if(mysql_real_connect(&m_sqlCon, host,user,pswd,table,port,NULL,0))
	{
		mysql_query(&m_sqlCon, "SET NAMES GBK");
			int ress=mysql_query(&m_sqlCon,"select * from 使用者賬戶密碼");// 查詢資料庫中的"使用者賬號密碼"表  
			if(!ress)
			{
				res=mysql_store_result(&m_sqlCon);
				if(res)
				{
					for(int i=0;i<res->row_count;i++)
					{
						row=mysql_fetch_row(res);
						if(user1==row[0]&&password==row[1])
						{

							mysql_free_result(res);
							mysql_close(&m_sqlCon);
							CFileFind finder;   //查詢是否存在ini檔案,若不存在,則生成一個新的預設設定的ini檔案,這樣就保證了我們更改後的設定每次都可用  
							BOOL ifFind = finder.FindFile(_T("d:\\RoadDataManagerApp.ini"));  
							if( !ifFind )  
							{  
							::WritePrivateProfileStringW(_T(""+user1+"使用者"),_T("UID"),_T(""+user1+""),_T("d:\\RoadDataManagerApp.ini"));  
							::WritePrivateProfileStringW(_T(""+user1+"使用者"),_T("PWD"),_T(""+password+""),_T("d:\\RoadDataManagerApp.ini"));  
							}
							::WritePrivateProfileStringW(_T(""+user1+"使用者"),_T("UID"),_T(""+user1+""),_T("d:\\RoadDataManagerApp.ini")); 
							::WritePrivateProfileStringW(_T(""+user1+"使用者"),_T("PWD"),_T(""+password+""),_T("d:\\RoadDataManagerApp.ini"));  
							CDialogEx::OnOK();
							break;
						}
						else 
						{
							if(i==res->row_count-1)
							{
							MessageBox(_T("使用者名稱或密碼不正確"),_T("提示"));
							return;
							}
						}
					}
				}
				
			}
		 }
6.雙擊新建對話方塊的記住密碼checkbox控制元件

新增如下程式碼

GetDlgItem(IDC_EDIT1)->GetWindowText(user1);
	GetDlgItem(IDC_EDIT2)->GetWindowText(password);
	::CButton *CB=(CButton*)GetDlgItem(IDC_CHECK1);
	if(CB->GetCheck())
	{
	CString m_strCurrentUID,m_str;
	::GetPrivateProfileStringW(_T(""+user1+"使用者"),_T("UID"),_T(""+user1+""),m_strCurrentUID.GetBuffer(MAX_PATH),MAX_PATH,_T("d:\\RoadDataManagerApp.ini"));
	::GetPrivateProfileStringW(_T(""+user1+"使用者"),_T("PWD"),_T(""+password+""),m_str.GetBuffer(MAX_PATH),MAX_PATH,_T("d:\\RoadDataManagerApp.ini"));
	this->ID_ED1.SetWindowTextW(m_strCurrentUID);
	this->ID_ED2.SetWindowTextW(m_str);
	}

7.編譯執行,功能實現