智能家居状态监控系统:数据库设计及客户端服务器通信
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlite3.h>
// 回调函数,用于处理查询结果 static int callback(void *data, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf('%s = %s\n', azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }
int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc;
// 打开数据库 rc = sqlite3_open("database.db", &db); if(rc) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "Opened database successfully\n"); }
// 解析客户端传来的JSON文件,获取userid int userid = 123; // 假设从JSON文件中解析得到的userid为123
// 构建SQL语句,查询对应userid的最新信息 char sql[1000]; snprintf(sql, sizeof(sql), "SELECT device_name, value FROM Status WHERE uid=%d ORDER BY sid DESC LIMIT 1;", userid);
// 执行查询语句 rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if(rc != SQLITE_OK){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); }
// 分析查询结果,生成建议 char suggestion[1000]; snprintf(suggestion, sizeof(suggestion), "空调温度过低,建议提高温度至26℃;加湿器湿度过高或过低,建议调整加湿器湿度");
// 将建议发送给客户端
// 关闭数据库 sqlite3_close(db); return 0; }
-- 创建用户表 CREATE TABLE IF NOT EXISTS users ( uid INTEGER PRIMARY KEY AUTOINCREMENT, username varchar(10), passwd varchar(10) );
-- 创建智能家居状态表 CREATE TABLE IF NOT EXISTS Status ( sid INTEGER PRIMARY KEY AUTOINCREMENT, uid INTEGER , device_name varchar(10), device_state varchar(10), value varchar(10), mode varchar(10), FOREIGN KEY (uid) REFERENCES users (uid) );
#ifndef PROCESSION_H #define PROCESSION_H
#include
namespace Ui { class Procession; }
class Procession : public QWidget { Q_OBJECT
public: explicit Procession(int userid,QWidget *parent = nullptr); ~Procession(); void processionWidget();
private slots: void connectToServer();//和服务器通信 void handleServerResponse(QNetworkReply *reply);//和服务器连接回应
private: Ui::Procession *ui; int userid; QNetworkAccessManager *networkManager; };
#endif // PROCESSION_H
#include "procession.h"
#include "ui_procession.h"
#include
//通过发送POST请求将用户ID发送到指定的服务器,并将服务器的响应显示在界面上。
Procession::Procession(int userid,QWidget *parent) : QWidget(parent), ui(new Ui::Procession), userid(userid) { ui->setupUi(this); processionWidget(); connect(ui->connectServerBtn,&QPushButton::clicked,this,={ this->connectToServer(); }); connect(networkManager, &QNetworkAccessManager::finished, this, &Procession::handleServerResponse);
}
Procession::~Procession() { delete ui; }
void Procession::processionWidget() { setWindowTitle("服务器通信"); setAutoFillBackground(true); QPalette palette=this->palette(); QPixmap pixmap(":/user/image/image/net.jpg"); palette.setBrush(QPalette::Window, QBrush(pixmap)); setPalette(palette); setFixedSize(600,400); } void Procession::connectToServer() { QJsonObject json; json["userid"] = this->userid;
QJsonDocument doc(json);
QByteArray postData = doc.toJson();
QNetworkRequest request(QUrl(ui->serverIP->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
networkManager->post(request, postData);
}
void Procession::handleServerResponse(QNetworkReply *reply) { if (reply->error() == QNetworkReply::NoError) { QByteArray response = reply->readAll(); ui->message->setText(response); } else { ui->message->setText("连接失败!"); }
reply->deleteLater();
}
原文地址: https://www.cveoy.top/t/topic/fB6a 著作权归作者所有。请勿转载和采集!