MFC 用戶登錄、注冊、工作主窗體


創建項目由向導生成的窗體作為工作的主窗體。用戶登錄、注冊窗體添加對話框來實現。

【具體功能】

1、主窗體應該出現在登錄窗體成功之后。

2、登錄窗體關閉(右上角❌),程序直接退出。

在App.cpp的InitInstance()內起始處加入代碼

    //============登錄===========//在主程序窗口運行前首先彈出登錄對話框
    while (TRUE)
    {
        CLogin login_Dialog;
        //模態對話框
        int nReturn = login_Dialog.DoModal();//返回IDOK或IDCANCEL。如果返回的是IDCANCEL,則要調用WindowsCommDlgExtendedError函數來確定是否發生了一個錯誤。IDOK和IDCANCEL都是常量,它表明用戶選擇的是OK按鈕還是Cancel按鈕
        if (nReturn == IDCANCEL)//點擊取消
        {
            return FALSE;
        }
        if (nReturn == IDOK)//點擊確定
        {
            //HWND login_Hwnd = GetDlgItem(login_Dialog, IDD_DIALOG1);
            CString str_User = login_Dialog.m_strUser;
            CString str_Password = login_Dialog.m_strPassword;    
            
            if (!(str_User == "admin" && str_Password == "admin"))//如果用戶名密碼不是admin/admin,則報錯,提示重新輸入,直至正確為止。
            {
                if (IDOK == MessageBox(NULL, TEXT("用戶ID或密碼錯誤!\n 請重新輸入!"),TEXT( "登錄失敗!"), MB_OKCANCEL | MB_ICONERROR))
                    continue;
                else 
                    return FALSE;
            }
            else 
                break;
        }
    }

 

用戶登錄對話框

void CMFCApplication17Dlg::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知處理程序代碼
    UpdateData(TRUE);//將控件數據復制給控件變量
    CString username;
    CString password;
    //與注冊類似操作
    bool flag = false;
    //char * path = "username.txt";
    CString path = TEXT("./username.txt");
    CFile file;
    file.Open(path, CFile::modeCreate | CFile::modeRead);
    file.SeekToBegin();
    CArchive ar(&file, CArchive::load);
    //去除數據左右空格數據    
    m_loginName.Trim();
    m_loginPwd.Trim();

    //校驗用戶密碼,與注冊校驗相同的操作,這里多驗證了一步,即校驗密碼
    while (ar.ReadString(username))
    {
        if (ar.ReadString(password))
        {
            username.Trim();
            password.Trim();
            if (username == m_loginName && password == m_loginPwd)
            {
                flag = true;
                break;
            }
        }
    }
    //關閉CFile和CArchive
    ar.Close();
    file.Close();
    if (flag)
    {
        //m_Login_Result = m_Login_Account + " " + " " + "已登錄";//找到則顯示的是用戶名+性別+已登錄
        m_loginName = "";//成功登錄后把用戶框和密碼框文本清除
        m_loginPwd = "";
        UpdateData(FALSE);//將數據從控件變量傳遞給控件
        CWork dlgW;
        dlgW.DoModal();

    }
    else{
        MessageBox(TEXT("用戶名不存在或密碼錯誤"));//用戶密碼錯誤或用戶不存在提示
    }
}
void CMFCApplication17Dlg::OnBnClickedButton2()
{
    // TODO:  在此添加控件通知處理程序代碼
    CRegister reg;
    reg.DoModal();
}

用戶注冊對話框

void CRegister::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知處理程序代碼
    CString username;//從文件中讀取用戶名進行校驗,如果輸入的用戶名在文件已存在則不進行注冊
    bool flag = false;//標記
    //char * path = "username.txt";//文件路徑
    CString path = TEXT("username.txt");

    CFile fp;//使用MFC的CFile將暑假寫入文件
    fp.Open(path, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
    fp.SeekToBegin();//移動文件指針位置至文件頭

    CArchive ar(&fp, CArchive::load);//使用CArchive進行讀取文件


    UpdateData(TRUE);//將數據從控件復制到控件變量

    //進行左右空格清除
    m_registerName.Trim();
    m_registerPwd1.Trim();
    m_registerPwd2.Trim();

    //校驗操作
    while (ar.ReadString(username))
    {
        username.Trim();
        if (username == m_registerName)
        {
            flag = true;//如果已存在用戶名,則標記flag為true
            break;
        }
        else
        {
            ar.ReadString(username);//讀取下一行(每一行為一個屬性,比如用戶名,密碼)
            ar.ReadString(username);//讀取下一行
        }
    }
    ar.Close();

    fp.SeekToEnd();//文件寫入為追加操作,所以寫入前必須將文件指針移動至文件尾

    if (!flag)
    {
        //CFile Write(*str,GetLength())寫入
        fp.Write(m_registerName, m_registerName.GetLength());
        //win雖是\r\n,在寫程序只需要\n即可換行
        fp.Write("\r\n", sizeof(char));
        if (m_registerPwd1 != m_registerPwd2)
        {
            MessageBox(TEXT("密碼不一致"));
        }
        else
        {
            fp.Write(m_registerPwd1, m_registerPwd1.GetLength());
            fp.Write("\r\n", sizeof(char));
            fp.Close();
            MessageBox(TEXT("注冊成功"));
            CDialog::OnOK();
        }
    }
    else
    {
        MessageBox(TEXT("用戶已存在"));//用戶已存在提示框,不關閉注冊框,可讓用戶自由選擇是否繼續注冊
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM