有一个数据库RcPatData,里面有两个表patients、TxData。patients用来存储患者信息,TxData用来存储每个患者每次治疗的信息。patients的主键是patientId;TxData的主键是treatmentId,外键是patientId,对于每个患者的每次治疗TxData记录的内容是txPlanInfo、txRegInfo、txNavInfo、txTreatInfo。使用C++、QT、sqlite写一个管理TxData的类,可以实现TxData关于patientId的增加、删除、修改、查找功能。 比如数据库中TxData中treatmentId为1,2,3,4,5,6,7,8,9对应的patientId为1,2,1,2,3,3,4,5,1;查找patientId=1的所有对应的数据,struct RcTxData { int patientId; int txDataId;
QString txPlanInfo;
QString txRegInfo;
QString txNavInfo;
QString txTreatInfo;}把每个患者的治疗数据存放在QVector<RcTxData> vRcTxData中
下面是一个使用C++、Qt和SQLite实现的管理TxData的类的示例。这个类提供了对TxData表中与patientId相关的增加、删除、修改和查找功能。
首先,确保你已经在Qt项目中包含了SQLite的支持。你可以在.pro文件中添加以下内容:
QT += sql
接下来,创建一个名为TxDataManager
的类,代码如下:
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVector>
#include <QString>
#include <QVariant>
#include <QDebug>
struct RcTxData {
int patientId;
int txDataId;
QString txPlanInfo;
QString txRegInfo;
QString txNavInfo;
QString txTreatInfo;
};
class TxDataManager {
public:
TxDataManager(const QString& dbName) {
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbName);
if (!db.open()) {
qDebug() << "Database error: " << db.lastError().text();
}
}
~TxDataManager() {
db.close();
}
bool addTxData(const RcTxData& txData) {
QSqlQuery query;
query.prepare("INSERT INTO TxData (patientId, txPlanInfo, txRegInfo, txNavInfo, txTreatInfo) "
"VALUES (:patientId, :txPlanInfo, :txRegInfo, :txNavInfo, :txTreatInfo)");
query.bindValue(":patientId", txData.patientId);
query.bindValue(":txPlanInfo", txData.txPlanInfo);
query.bindValue(":txRegInfo", txData.txRegInfo);
query.bindValue(":txNavInfo", txData.txNavInfo);
query.bindValue(":txTreatInfo", txData.txTreatInfo);
if (!query.exec()) {
qDebug() << "Add TxData error: " << query.lastError().text();
return false;
}
return true;
}
bool deleteTxData(int treatmentId) {
QSqlQuery query;
query.prepare("DELETE FROM TxData WHERE treatmentId = :treatmentId");
query.bindValue(":treatmentId", treatmentId);
if (!query.exec()) {
qDebug() << "Delete TxData error: " << query.lastError().text();
return false;
}
return true;
}
bool updateTxData(const RcTxData& txData) {
QSqlQuery query;
query.prepare("UPDATE TxData SET patientId = :patientId, txPlanInfo = :txPlanInfo, "
"txRegInfo = :txRegInfo, txNavInfo = :txNavInfo, txTreatInfo = :txTreatInfo "
"WHERE treatmentId = :treatmentId");
query.bindValue(":patientId", txData.patientId);
query.bindValue(":txPlanInfo", txData.txPlanInfo);
query.bindValue(":txRegInfo", txData.txRegInfo);
query.bindValue(":txNavInfo", txData.txNavInfo);
query.bindValue(":txTreatInfo", txData.txTreatInfo);
query.bindValue(":treatmentId", txData.txDataId);
if (!query.exec()) {
qDebug() << "Update TxData error: " << query.lastError().text();
return false;
}
return true;
}
QVector<RcTxData> findTxDataByPatientId(int patientId) {
QVector<RcTxData> vRcTxData;
QSqlQuery query;
query.prepare("SELECT treatmentId, patientId, txPlanInfo, txRegInfo, txNavInfo, txTreatInfo "
"FROM TxData WHERE patientId = :patientId");
query.bindValue(":patientId", patientId);
if (query.exec()) {
while (query.next()) {
RcTxData txData;
txData.txDataId = query.value(0).toInt();
txData.patientId = query.value(1).toInt();
txData.txPlanInfo = query.value(2).toString();
txData.txRegInfo = query.value(3).toString();
txData.txNavInfo = query.value(4).toString();
txData.txTreatInfo = query.value(5).toString();
vRcTxData.append(txData);
}
} else {
qDebug() << "Find TxData error: " << query.lastError().text();
}
return vRcTxData;
}
private:
QSqlDatabase db;
};
你可以在你的主程序中使用TxDataManager
类来管理TxData。例如:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TxDataManager manager("your_database_name.db");
// 添加治疗数据
RcTxData newTxData = {1, 0, "Plan A", "Reg A", "Nav A", "Treat A"};
manager.addTxData(newTxData);
// 查找患者ID为1的所有治疗数据
QVector<RcTxData> results = manager.findTxDataByPatientId(1);
for (const RcTxData& data : results) {
qDebug() << "Treatment ID:" << data.txDataId << "Patient ID:" << data.patientId;
qDebug() << "Plan Info:" << data.txPlanInfo;
}
// 更新治疗数据
newTxData.txDataId = 1; // 假设我们要更新treatmentId为1的记录
newTxData.txPlanInfo = "Updated Plan A";
manager.updateTxData(newTxData);
// 删除治疗数据
manager.deleteTxData(1); // 删除treatmentId为1的记录
return app.exec();
}