Qt银行管理系统——初始界面功能函数_登录


2.功能函数

(1)登录

客户端创建login设计师类,登录功能函数在所有功能函数中为最复杂,因为登录是初始界面,需要连接服务器,需要发送数据给服务器,让服务器连接上数据库,并判断账号密码是否有效,然后执行接下来的所有功能都建立在这和连接套接字上。

login.h

#ifndef LOGIN_H
#define LOGIN_H

#include
#include "cilent.h"


namespace Ui {
class Login;
}
class Login : public QWidget        //登录用QWidegt就可以了因为用不到子窗口的exec功能所以不要用QDialog类
{
Q_OBJECT

public:
explicit Login(QWidget *parent = 0);
~Login();
QThread *thread;

private slots:
void on_LoginButton_clicked();    //登录

void on_registerButton_clicked();    //注册

private:
Ui::Login *ui;
Cilent *client;
char temp[100];
bool LoginSure;
Register* Reg;    //注册函数
};

#endif // LOGIN_H


login.cpp

#include "login.h"
#include "share.h"
#include "ui_login.h"
#include
#include
#include
#include     //容器,用来存在登录过得账号信息
#include
QString username;        //定义登录的管理员用户名为全局变量
Cilent *MyClient;            //定义连接上的客户端套接字为全局变量

Login::Login(QWidget *parent) :
QWidget(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
ui->lineAccout->setTextMargins(5,2,2,2);//设置间隙
ui->linePswd->setEchoMode(QLineEdit::Password);//设置密码的显示方式为密码显示方式(用黑点代替显示)
this->client = new Cilent(this);    //构造新的Cilent用来连接到服务器,用this作为parents是因为其能跟随它的show而show,它的析构而析构
MyClient = new Cilent(client);    //拷贝构造,把已经连接上的cilent拷贝一份作为全局变量,以便其他功能函数调用(在不同的cpp文件中)

}

Login::~Login()
{
delete ui;
}

void Login::on_LoginButton_clicked()        //登录按钮,login核心的按钮
{
QString accountStr = ui->lineAccout->text();
QString pswdStr = ui->linePswd->text();        //读取账号和密码信息
QStringList list;
list << accountStr;
QCompleter *com = new QCompleter(list,this);
com->setCaseSensitivity(Qt::CaseInsensitive);//不区分大小写
ui->lineAccout->setCompleter(com);    //用completer容器来记录已经输入过得账号信息,以便下次登录
QString Str = QString("1,%1,%2").arg(accountStr).arg(pswdStr);    //打包账号密码信息,登录功能的功能标志位为1
client->TCPwrite(Str);    //发送数据
connect(client,client->Continue,        //接收到服务器返回的数据后TCPread函数才发送continue信号,让login来继续执行判断
[=]()
{
QMessageBox::about(this,"银行管理系统",client->getData().toUtf8().data());
qDebug()<<"the Data is"<<client->getData();
qDebug()<<"the Siganl is"<<client->getSign();
if (client->getSign()=="1")//标志位1为登录成功 ,解包读取包内的标志位,(发包解包都用section功能函数,特别好用)
{
username = accountStr;
this->hide();
client->show();
client->exec();
this->show();
}
});
}



void Login::on_registerButton_clicked()        //注册功能函数启动
{
Reg= new Register(this);
this->hide();
Reg->show();
Reg->exec();
this->show();
}

//下面附上登录的ui界面一张
Qt银行管理系统——初始界面功能函数_登录_第1张图片



服务器端收到后用处理
case 1: Login(); break; //收到后功能函数标志位为1
...................................

void MyServerWindow :: Login ()
{
section1 = Bag . section ( "," , 1 , 1 );          //解包,两部分,账号和密码
section2 = Bag . section ( "," , 2 , 2 );
QString TempStr = QString ( "账号%1,密码%2" ). arg ( section1 ). arg ( section2 );
ui -> ReadEdit -> append ( TempStr );
if ( mysql -> loginSure ( section1 , section2 ))    //传参传到数据库函数处理,返回bool类型告知是否成功
{
ServerWrite ( "登录成功,1" );
}
else
{
ServerWrite ( "登录失败,0" );
}

}

...........................


bool Banksql :: loginSure ( QString name , QString pswd )
{
QString str = QString ( "select * from manager where username='%1' and passwd='%2'" ). arg ( name ). arg ( pswd );
qDebug ()<< str ;
QSqlQuery query ;
query . exec ( str );
while ( query . next ())    //如果有这个账号密码,则next遍历的时候会进入,返回true,否则遍历完也没有进入返回false
{
return true ;
}
return false ;
}



你可能感兴趣的:(Qt)