//注册函数
bool Validator::LocalValidate(const std::string& name, const std::string& password)
{
m_pl.m_name = name;
m_pl.m_password = password;
//先判断链表是否为空
if( m_list.empty())
{
//存放用户注册的账号与密码
m_list.push_front(m_pl);
m_pIO->Write();
return true;
}
//不为空
else
{
//定义一个迭代器
list<DATA>::iterator it = m_list.begin();
//查看链表中有没有这个账号
for(it;it!=m_list.end();it++)
{
//存在账号了
if((*it).m_name==name)
{
return false;
}
//不存在账号
else
{
//存放用户注册的账号与密码
m_list.push_front(m_pl);
m_pIO->Write();
return true;
}
}
}
}
//登录函数
int Validator:: LocalValidote(const std::string& name, const std::string& password)
{
if(name==m_pIO->Read_Name())
{
if(password == m_pIO->Read_Password())
{
//密码正确
return Sucess;
}
//密码错误
return PasswordError;
}
else
{
return NoUser;
}
}
1.预期效果
使用QT5实现一个简易的登录界面,可以实现账号与密码的注册与验证登录,并且将验证登录过程与UI界面实现分离。
2.思路分析
将账号与密码的输入框(lineEdit)中的用户输入的字符提取出来,并且存入自定义的链表中或者写入文件中,登录程序为验证账号是否存在,并根据账号找到链表或文件中相对应下的密码,与用户输入的进行验证,实现简单的登录过程,并将登录与验证过程分离。
3.实现过程
先前步骤可以参考https://blog.csdn.net/qq_56369428/article/details/121414779?spm=1001.2014.3001.5501
界面UI效果
验证过程
//注册函数
bool Validator::LocalValidate(const std::string& name, const std::string& password)
{
m_pl.m_name = name;
m_pl.m_password = password;
//先判断链表是否为空
if( m_list.empty())
{
//存放用户注册的账号与密码
m_list.push_front(m_pl);
m_pIO->Write();
return true;
}
//不为空
else
{
//定义一个迭代器
list<DATA>::iterator it = m_list.begin();
//查看链表中有没有这个账号
for(it;it!=m_list.end();it++)
{
//存在账号了
if((*it).m_name==name)
{
return false;
}
//不存在账号
else
{
//存放用户注册的账号与密码
m_list.push_front(m_pl);
m_pIO->Write();
return true;
}
}
}
}
//登录函数
int Validator:: LocalValidote(const std::string& name, const std::string& password)
{
if(name==m_pIO->Read_Name())
{
if(password == m_pIO->Read_Password())
{
//密码正确
return Sucess;
}
//密码错误
return PasswordError;
}
else
{
return NoUser;
}
}
#ifndef VALIDATOR_H
#define VALIDATOR_H
#include <iostream>
#include <list>
#include <cstdbool>
#include <QDebug>
#include "io.h"
using std::string;
using std::list;
#define FILEPATH "C:\\name\\name.ini"
#define JSON_FILEPATH "C:\\name\\json.json"
class Validator
{
public:
//枚举
enum ValidResult
{
NoUser=1,
Sucess,
PasswordError,
Other
}value;
//注册函数
bool LocalValidate(const std::string& name, const std::string& password);
//登录函数
int LocalValidote(const std::string& name, const std::string& password);
Validator()
{
};
Validator(const std::string& name, const std::string& password);
private:
//定义一个账号密码的结构体
typedef struct exam
{
std::string m_name;
std::string m_password;
}DATA;
//定义一个链表存放结构体
list<DATA> m_list;
DATA m_pl;
IO *m_pIO = NULL;
};
#endif // VALIDATOR_H
UI与逻辑的关联
//用户注册
void MainWindow::on_pushButton_LocalValilogin_clicked()
{
//获取用户输入的账号与密码
code =ui->lineEdit->text();
pwd =ui->lineEdit_2->text();
//账号注册
Validator localValidator(code.toStdString(),pwd.toStdString());
bool bRet = localValidator.LocalValidate(code.toStdString(),pwd.toStdString());
if(!bRet)
{
ui->label->setText("账号已存在!");
return;
}
ui->label->setText("账号注册成功!");
}
//用户登录
void MainWindow::on_pushButton_LocalValienter_clicked()
{
//获取用户输入的账号与密码
QString g_code=ui->lineEdit->text();
QString g_pwd=ui->lineEdit_2->text();
Validator LocalValidator(g_code.toStdString(),g_pwd.toStdString());
int i = LocalValidator.LocalValidote( g_code.toStdString(),g_pwd.toStdString());
if(i== LocalValidator.NoUser )
{
ui->label->setText("账号不存在,请先注册!");
}
else if(i==LocalValidator.Sucess)
{
ui->label->setText("登陆成功!");
}
else if(i==LocalValidator.PasswordError)
{
ui->label->setText("登陆失败,密码错误!");
}
}
4.总结
这样实现后,就可以针对某一过程进行单独的改进,而不会影响其他界面的操作,实现了UI与逻辑的分离。