基于QT和C++面向对象计算器完善
系统简介
设计背景
身为一名计算机专业的在校大学生,深刻体会到了专业技能的重要性,这学期开设的《软件开发环境》课程,在当前的学习中我了解了软件开发的基本流程及软件设计和开发的基本工具。为此,我使用QT开发框架和C++开发一个简单的计算器,主要完成堆数据的准确运算,该系统可以实现加、减、乘、除的四则混合运算和算术开方功能,可以进行用户登录并且保存用户的计算记录。
(二)开发工具及环境
1、开发工具及介绍
ODBC英文全称为:Open Database Connectivity。是用于在不同的操作系统和数据库管理系统之间进行数据访问的标准化接口。它提供了一组函数和API,使得应用程序可以通过统一的方式访问不同类型的数据源,如关系型数据库、文件、电子表格等。实现了数据与程序的解耦。
在使用ODBC时,首先需要安装相应的ODBC驱动程序,然后通过ODBC API连接到特定的数据源。ODBC驱动程序负责将应用程序的请求翻译为特定数据库系统的通信协议,并将结果返回给应用程序。Windows系统提供了ODBC数据源管理工具,该工具用来设置数据源的名字。
ODBC的基本构成:
2、开发环境
Windows 11系统、QT Creator 11.0.3(community)、C++、Visio、SQL Sever 数据库
二、界面设计与实现
(一)界面流程图
界面实现
登录界面及关键代码
界面展示:
关键代码:
#include "Login.h"
#include "ui_Login.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("Login");
this->new_window = new Welcome();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_Yes_released()
{
auto username = ui->A_lineEdit->text();
auto password = ui->P_lineEdit->text();
qInfo()<<"released" << username << password;
//用户名不能为空
if(username.isEmpty())
{
ui->label->setText("注意:用户名不能为空!");
return;
}
//密码不能为空
if(password.isEmpty())
{
ui->label->setText("注意:密码不能为空!");
return;
}
//验证用户名或密码是否正确
//本地验证
if(username == "ZXJ" && password == "123456")
{
ui->label->setText("登录成功!");
connect(ui->Yes,&QPushButton::clicked,this,[=](){
this->hide();//主页面隐藏;
this->new_window->show();
});
}
else
{
ui->label->setText("注意:用户名或密码不正确!");
}
}
欢迎界面及关键代码
界面展示:
关键代码:
#include "welcome.h"
#include "ui_welcome.h"
Welcome::Welcome(QWidget *parent) :
QWidget(parent),
ui(new Ui::Welcome)
{
ui->setupUi(this);
this->setWindowTitle("Welcome");
this->new_windows = new Calculator();
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
this->hide();
this->new_windows->show();
});
}
Welcome::~Welcome()
{
delete ui;
}
3、计算器界面
三、数据库
(一)连接数据库
1、代码展示
//数据库配置
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //添加数据库实列
QStringList list = QSqlDatabase::drivers();
qDebug() << list;
db.setHostName("localhost"); //服务器名称
db.setDatabaseName("Calculator Database"); //数据库名称
db.setUserName("sa"); //用户名
db.setPassword("123456"); //密码
//数据库连接
bool ok = db.open();
if(ok)
{
qDebug()<< "DataBase open success!";
}
else
{
qDebug()<< "error";
}
连接结果
连接成功
对数据库进行操作
//对数据库的操作
//创建用户表
QSqlQuery query(db);
QString strCreateTable = "create table user (id int primary key,name varchar(30),password varchar(20))";
if(!query.exec(strCreateTable))
{
qDebug()<<"init tb_error errot"<<query.lastError();
}
else
{
qDebug()<< "Create table success!";
}
//插入数据
QString strInserData = "insert into uservalues (?,?,?)";
query.prepare(strInsertData);
query.addBindValue(01);
query.addBindValue("name1");
query.addBindValue(123456);
if(!query.exec())
{
qDebug()<<query.lastError();
}
//更新数据
QString strUpdateData = "update user set name = :name where id = :id";
query.prepare(strUpdateData);
query.bindValue(":name", "Name");
query.bindValue(":id", 02);
if(!query.exec())
{
qDebug()<<query.lastError();
}
//查询数据
QString strSelectData = "select * from user";
query.prepare(strSelectData);
if(!query.exec())
{
qDebug()<<query.lastError();
}
else
{
while(query.next())
{
qDebug() << query.value(0).toInt() << query.value(1).toString() << query.value(2).toInt();
}
}
//删除数据
QString strDeteleData = "delete from student where id = 01";
query.prepare(strDeteleData);
if(!query.exec())
{
qDebug()<<query.lastError();
}