QT,C++做一个数据库,包含“器件名称、阈值范围、实际测试型号、测量值、合格判定”的代码
时间: 2023-12-12 18:03:08 浏览: 88
这里提供一个基于Qt和C++的简单示例,实现一个包含“器件名称、阈值范围、实际测试型号、测量值、合格判定”的数据库。
主要思路是使用Qt的QSqlDatabase类连接到本地SQLite数据库,并创建一个包含所需字段的表。然后,通过Qt的QSqlQuery类执行SQL语句来插入、查询和修改数据。在C++中,可以使用结构体或类来表示数据库中的每个条目。
以下是示例代码:
```cpp
#include <QtSql>
// 定义一个结构体表示数据库中的每个条目
struct DeviceEntry {
QString name; // 器件名称
QString range; // 阈值范围
QString model; // 实际测试型号
double value; // 测量值
bool isQualified; // 合格判定
};
// 创建数据库表
bool createTable(QSqlDatabase db) {
QSqlQuery query(db);
return query.exec("CREATE TABLE devices ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name TEXT, range TEXT, model TEXT, "
"value REAL, is_qualified INTEGER)");
}
// 插入一条数据
bool insertEntry(QSqlDatabase db, DeviceEntry entry) {
QSqlQuery query(db);
query.prepare("INSERT INTO devices (name, range, model, value, is_qualified) "
"VALUES (:name, :range, :model, :value, :is_qualified)");
query.bindValue(":name", entry.name);
query.bindValue(":range", entry.range);
query.bindValue(":model", entry.model);
query.bindValue(":value", entry.value);
query.bindValue(":is_qualified", entry.isQualified);
return query.exec();
}
// 查询所有数据
QList<DeviceEntry> queryAllEntries(QSqlDatabase db) {
QList<DeviceEntry> entries;
QSqlQuery query(db);
if (query.exec("SELECT name, range, model, value, is_qualified FROM devices")) {
while (query.next()) {
DeviceEntry entry;
entry.name = query.value(0).toString();
entry.range = query.value(1).toString();
entry.model = query.value(2).toString();
entry.value = query.value(3).toDouble();
entry.isQualified = query.value(4).toBool();
entries.append(entry);
}
}
return entries;
}
// 修改一条数据
bool updateEntry(QSqlDatabase db, int id, DeviceEntry entry) {
QSqlQuery query(db);
query.prepare("UPDATE devices SET name=:name, range=:range, model=:model, "
"value=:value, is_qualified=:is_qualified WHERE id=:id");
query.bindValue(":name", entry.name);
query.bindValue(":range", entry.range);
query.bindValue(":model", entry.model);
query.bindValue(":value", entry.value);
query.bindValue(":is_qualified", entry.isQualified);
query.bindValue(":id", id);
return query.exec();
}
int main() {
// 连接本地SQLite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("devices.db");
if (!db.open()) {
qDebug() << "Failed to open database!";
return 1;
}
// 创建表
if (!createTable(db)) {
qDebug() << "Failed to create table!";
return 1;
}
// 插入一些数据
DeviceEntry entry1 = {"Resistor 1", "1kΩ ±5%", "R1001", 1000.2, true};
DeviceEntry entry2 = {"Capacitor 1", "10μF ±10%", "C1001", 9.8, false};
insertEntry(db, entry1);
insertEntry(db, entry2);
// 查询所有数据并输出
QList<DeviceEntry> entries = queryAllEntries(db);
for (const auto& entry : entries) {
qDebug() << entry.name << entry.range << entry.model << entry.value << entry.isQualified;
}
// 修改一条数据并输出
DeviceEntry newEntry = {"Resistor 1", "1kΩ ±5%", "R1001", 999.8, false};
updateEntry(db, 1, newEntry);
entries = queryAllEntries(db);
for (const auto& entry : entries) {
qDebug() << entry.name << entry.range << entry.model << entry.value << entry.isQualified;
}
// 关闭数据库连接
db.close();
return 0;
}
```
这只是一个简单的示例,实际上需要根据具体需求进行更多的功能和优化。例如,可以使用Qt的模型-视图框架来实现一个可编辑的表格视图,或者添加更多的查询条件来检索数据。
阅读全文