MFC 對話方塊 運用mysql資料庫 製作登入介面,記住密碼功能
阿新 • • 發佈:2019-01-02
首先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.雙擊新建對話方塊資源中的 確定控制元件新增程式碼
6.雙擊新建對話方塊的記住密碼checkbox控制元件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; } } } } } }
新增如下程式碼
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.編譯執行,功能實現