您的位置:首页 > 编程语言 > Qt开发

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

2018-02-21 00:47 441 查看
2.功能函数(1)登录
客户端创建login设计师类,登录功能函数在所有功能函数中为最复杂,因为登录是初始界面,需要连接服务器,需要发送数据给服务器,让服务器连接上数据库,并判断账号密码是否有效,然后执行接下来的所有功能都建立在这和连接套接字上。login.h
#ifndef LOGIN_H#define LOGIN_H
#include <QWidget>#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_Hlogin.cpp#include "login.h"#include "share.h"#include "ui_login.h"#include <QDebug>#include <QString>#include <QStringList>#include <QCompleter>    //容器,用来存在登录过得账号信息#include <QMessageBox>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);    //打包账号密码信息,登录功能的功能标志位为1client->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界面一张


服务器端收到后用处理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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐