1. 程式人生 > >MFC簡單的登入註冊實現

MFC簡單的登入註冊實現

註冊

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("使用者名稱不存在或密碼錯誤");//使用者密碼錯誤或使用者不存在提示
    }
}