书店售书管理系统(一)登陆界面
使用工具:qt vs2019 odbc sqlserver
vs2019中使用qt的配置方法指路:https://blog.csdn.net/mnb1V9cxz/article/details/124776935?spm=1001.2014.3001.5501
实现功能:
1.注册账号
2.只有使用正确的账号和口令(即数据库中已存储的)才能登陆成功
3.数据库中口令采用md5加密保存
4.美化界面
具体步骤:
1.创建qt项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
下图内容根据自己的需求修改:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
创建之后点击运行,出现ui界面即创建成功。
2.使用ODBC连接sqlserver数据库
(1)创建数据库并创建表
根据自己的需求创建
(2)对数据库添加sql server账户
打开安全性—>登录名—>右键 新建登录名;
在选择页——常规中,新建登录名和密码。(自行选择登录名,密码)
选择sqlserver身份验证方式,设置密码确认密码,不勾选强制实施密码策略;
下一步选择用户映射。选择要使用的数据库勾选
如果需要对数据库进行增查改删操作,则需要再设置用户的权限
先选择数据库bookdb ,右键选择属性,在属性也左侧选择权限,选择jiang用户,在下面即可选择添加相应的权限
有人在进行增删查改的时候出现问题,报错数据库操作失败,那可能就是给的权限不够,所以一定要给权限
3.ODBC设置
注:在连接部分,所有图片中的涂红的内容是一样的
ODBC电脑一般都自带有的,在搜索框直接搜就可以,至于用32位还是64位则根据自己的具体情况选择。不确定的可以都试试。我使用的是32位的。
1)打开ODBC,点击右边添加
2)选择SQL Server 点击完成
3)填写相关数据库信息
名称是对数据源的命名,后面在QT中会用到。描述是对数据源的一些简单解释描述,服务器是连接数据库中对应的服务器名,即SQL Server 登录框中的服务器名
4)选择验证方式
5)点击下一页,选择要使用的数据库
6)然后点击下一页–>完成–>测试数据源
7)测试成功
4.QT连接数据库
直接上代码吧
在main.cpp中
#include "BOOKSW.h"
#include <QtWidgets/QApplication>
#include<QString>
#include <QtSql/QSql>
#include<QtSql/qsqldatabase.h>//连接数据库
#include<QtSql/qsqltablemodel.h>
#include<QtSql/qsqlerror.h>
#include <QApplication>
#include <QtSql/QSqlQuery>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
{
if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);
BOOKSW w;
w.show();
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");//数据库是SQL SERVER
qDebug()<< "ODBC driver?" << db.isValid();
db.setHostName("localhost");//选择主机服务器
db.setDatabaseName("BOOKD");//设置数据源名称
db.setUserName("jiang");//登录用户
db.setPassword("5992");//密码
if (!db.open()){
qDebug() << db.lastError().text();//打开失败
}
else {
qDebug() << "成功";
}
return a.exec();
}
实现登陆功能,密码加密,ui美化
界面设计
与之相应的cpp代码:
#include "BOOKSW.h"
#include<qsqlquery.h>//包含查询语言
#include <QDebug>
#include <QLineEdit>
#include<QtSql/qsqlerror.h>//输出错误语言
#include <QMessageBox>
#include <openssl/md5.h>
#include <QCryptographicHash>
#include <QCoreApplication>
#include<QtSql>
#pragma execution_character_set("utf-8")
BOOKSW::BOOKSW(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
this->setWindowTitle("登陆");
//添加背景照片
QPixmap Images("C:/Users/lenovo/Pictures/20200329175335_erzim.jpg");
QPalette Palette = this->palette();
Palette.setBrush(QPalette::Window, Images);
this->setPalette(Palette);
//用户注册
connect(ui.regButton, &QPushButton::clicked, this, [=]() {
QString name = ui.usernameEdit->text();//用户账号
QString passwd = ui.passwordEdit->text();//密码
//插入数据
QSqlQuery query;
if (name == "" || passwd == "") {
QMessageBox::warning(this, tr("Warning"), tr("用户名或密码为空"), QMessageBox::Ok);
}
else {
//md5调用
QCryptographicHash hash(QCryptographicHash::Md5);//创建一个加密对象
hash.addData(passwd.toUtf8());//放入要加密的数据
//获取加密的结果
QByteArray arr = hash.result();
passwd = arr.toHex();
QString qs = QString("insert into logind(name,passwd) values('%1','%2')").arg(name).arg(passwd);
if (query.exec(qs)) {//如果插入成功
QMessageBox::information(this, "注册", "注册成功");
}
else {
QMessageBox::information(this, "注册", "注册失败");
qDebug() << query.lastError().text();//输出错误信息
return;
}
}
});
//登陆
connect(ui.loginButton, &QPushButton::clicked, this, [=]() {
QString name = ui.usernameEdit->text();//用户账号
QString passwd = ui.passwordEdit->text();//密码
if (name == "" || passwd == "") {
QMessageBox::warning(this, tr("Warning"), tr("用户名或密码为空"), QMessageBox::Ok);
}
else {
//md5调用
QCryptographicHash hash(QCryptographicHash::Md5);//创建一个加密对象
hash.addData(passwd.toUtf8());//放入要加密的数据
//获取加密的结果
QByteArray arr = hash.result();
passwd = arr.toHex();
QSqlQuery query2;//操作数据库
QString q = QString("select * from logind where name ='%1' and passwd='%2'").
arg(name).arg(passwd);
if (!query2.exec(q)) {
qDebug() << query2.lastError().text();//输出错误信息
return;
}
//获取数据
if (query2.next()) {
QMessageBox::information(this, "登陆", "登陆成功");
this->hide();
BookG *bb = new BookG;
bb->show();
}
else {
QMessageBox::information(this, "登陆", "登陆失败");
}
}
});
}
最终运行成果:
只有输入正确的账号和口令才可以登陆成功