MFC9.13_登陸註冊,txt儲存使用者名稱密碼
阿新 • • 發佈:2018-12-09
登陸註冊,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_edit1
和m_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_edit3
和m_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);
}