MFC簡單的登入註冊實現
阿新 • • 發佈:2019-01-07
註冊
Void CSignDlg::OnSubmit() { CString username;//從檔案中讀取使用者名稱進行校驗,如果輸入的使用者名稱在檔案已存在則不進行註冊 CString sex; bool flag=false;//標記 char * path="username.txt";//檔案路徑 CFile fp;//使用MFC的CFile將暑假寫入檔案 fp.Open(path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite); fp.SeekToBegin();//移動檔案指標位置至檔案頭 CArchive ar(&fp,CArchive::load);//使用CArchive進行讀取檔案 UpdateData();//將資料從控制元件複製到控制元件變數 //進行左右空格清除 m_Sign_Account.TrimLeft(); m_Sign_Account.TrimRight(); m_Sign_Pass.TrimLeft(); m_Sign_Pass.TrimRight(); //單選框選擇並獲取其文字 UINT nID=GetCheckedRadioButton(IDC_RADIO_MAN,IDC_RADIO_WOMAN); GetDlgItemText(nID,sex); //校驗操作 while(ar.ReadString(username)){ username.TrimLeft(); username.TrimRight(); if(strcmp(username,m_Sign_Account)==0) { flag=true;//如果已存在使用者名稱,則標記flag為true break; }else { ar.ReadString(username);//讀取下一行(每一行為一個屬性,比如使用者名稱,密碼,性別,總共3 個屬性) ar.ReadString(username);//讀取下一行 } } ar.Close(); fp.SeekToEnd();//檔案寫入為追加操作,所以寫入前必須將檔案指標移動至檔案尾 if(!flag) { //CFile Write(*str,GetLength())寫入 fp.Write(m_Sign_Account,m_Sign_Account.GetLength()); //win雖是\r\n,在寫程式只需要\n即可換行 fp.Write("\n",sizeof(char)); fp.Write(m_Sign_Pass,m_Sign_Pass.GetLength()); fp.Write("\n",sizeof(char)); fp.Write(sex,sex.GetLength()); fp.Write("\n",sizeof(char)); fp.Close(); MessageBox("註冊成功"); CDialog::OnOK(); } else { MessageBox("使用者已存在");//使用者已存在提示框,不關閉註冊框,可讓使用者自由選擇是否繼續註冊 } }
登入
void CMyDlg::OnLogin() { UpdateData();//將控制元件資料複製給控制元件變數 CString username; CString password; CString sex; //與註冊類似操作 bool flag=false; char * path="username.txt"; CFile file; file.Open(path,CFile::modeRead); file.SeekToBegin(); CArchive ar(&file,CArchive::load); //去除資料左右空格資料 m_Login_Account.TrimLeft(); m_Login_Account.TrimRight(); m_Login_Pass.TrimLeft(); m_Login_Pass.TrimRight(); //校驗使用者密碼,與註冊校驗相同的操作,這裡多驗證了一步,即校驗密碼 while(ar.ReadString(username)) { if(ar.ReadString(password)) { username.TrimLeft(); username.TrimRight(); password.TrimLeft(); password.TrimRight(); if(strcmp(username,m_Login_Account)==0 &&strcmp(password,m_Login_Pass)==0) { flag=true; ar.ReadString(sex);//如果使用者驗證正確,flag=true,並且sex為使用者的性別 break; } } ar.ReadString(sex); } //關閉CFile和CArchive ar.Close(); file.Close(); if(flag) { m_Login_Result=m_Login_Account+" "+sex+" "+"已登入";//找到則顯示的是使用者名稱+性別+已登入 m_Login_Account="";//成功登入後把使用者框和密碼框文字清除 m_Login_Pass=""; UpdateData(FALSE);//將資料從控制元件變數傳遞給控制元件 } else{ MessageBox("使用者名稱不存在或密碼錯誤");//使用者密碼錯誤或使用者不存在提示 } }