MFC_9.13_登陆注册,txt保存用户名密码

https://blog.csdn.net/weixin_38593332/article/details/82689393

登陆注册,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);
}
 

猜你喜欢

转载自blog.csdn.net/active2489595970/article/details/88293266