1. 程式人生 > >MFC9.13_登陸註冊,txt儲存使用者名稱密碼

MFC9.13_登陸註冊,txt儲存使用者名稱密碼

登陸註冊,txt儲存使用者名稱密碼

  • 首先資源檢視,建立兩個對話方塊,ID改為IDD_DIA_LOGIN和IDD_DIA_JOIN,分別新增類Login和Join。

  • 在CXXX.cpp檔案中新增標頭檔案#include "Login.h",然後在cpp函式InitInstance()中CXXXDlg dlg; 語句之上,新增

    Login Dlg;
    Dlg.DoModal();
  • 為Login.cpp新增標頭檔案#include "Join.h"更改Login.cpp中的註冊函式
void Login::OnBnClickedButton1()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
Join Dlg2; Dlg2.DoModal(); }
  • Join介面的“註冊”按鈕雙擊,添加註冊函式,輸入框兩個變數分別為m_edit1m_edit2
void Join::OnBnClickedOk()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
    CString m_Sign_Account,m_Sign_Pass; //定義一個變數str
    m_edit1.GetWindowText(m_Sign_Account); 
    m_edit2.GetWindowText(m_Sign_Pass);

     m_Sign_Account.TrimLeft();
     m_Sign_Account.TrimRight();

     m_Sign_Pass.TrimLeft();
     m_Sign_Pass.TrimRight();

    if
((m_Sign_Account=="")||(m_Sign_Pass=="")) { AfxMessageBox("error"); return; } // TODO: 在此新增控制元件通知處理程式程式碼 CString username;//從檔案中讀取使用者名稱進行校驗,如果輸入的使用者名稱在檔案已存在則不進行註冊 CString sex; bool flag=false;//標記 char * path="username.txt";//檔案路徑 CFile fp;//使用MFC的CFile將暑假寫入檔案 fp.Open((LPCTSTR)path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite); fp.SeekToBegin();//移動檔案指標位置至檔案頭
CArchive ar(&fp,CArchive::load);//使用CArchive進行讀取檔案 UpdateData();//將資料從控制元件複製到控制元件變數 //進行左右空格清除 //單選框選擇並獲取其文字 // 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(); AfxMessageBox("註冊成功"); CDialog::OnOK(); } else { MessageBox("使用者已存在");//使用者已存在提示框,不關閉註冊框,可讓使用者自由選擇是否繼續註冊 } //OnOK(); }
  • 更改Login.cpp中的登陸函式,輸入框兩個新增變數分別為m_edit3m_edit4
void Login::OnBnClickedOk()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
    UpdateData();//將控制元件資料複製給控制元件變數

    CString m_Login_Account,m_Login_Pass;
    m_edit3.GetWindowText(m_Login_Account); 
    m_edit4.GetWindowText(m_Login_Pass);

    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)
    {
        AfxMessageBox(m_Login_Account+" "+" "+"成功登入");//找到則顯示的是使用者名稱+性別+已登入
        m_Login_Account="";//成功登入後把使用者框和密碼框文字清除
        m_Login_Pass="";
        UpdateData(FALSE);//將資料從控制元件變數傳遞給控制元件
        OnOK();
    }
    else{
        MessageBox("使用者名稱不存在或密碼錯誤");//使用者密碼錯誤或使用者不存在提示
    }

}
  • 禁用Login的×按鈕(屬性裡新增函式OnInitDialog()),取消按鈕關閉程式
BOOL Login::OnInitDialog()
{
    CDialog::OnInitDialog();

    // TODO:  在此新增額外的初始化
    ::EnableMenuItem(::GetSystemMenu(this->m_hWnd, false), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

    return TRUE;  // return TRUE unless you set the focus to a control
    // 異常: OCX 屬性頁應返回 FALSE
}

void Login::OnBnClickedCancel()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
    //OnCancel();
    exit(0);
}