Python, C ++开发小学/初中/大学发展模式与思路选择APP
以下是更完整的代码实现,包含C++客户端(Qt界面交互)和Python后端(数据库集成+案例库功能),可直接运行体验核心流程:
一、C++客户端(Qt界面完整实现)
负责用户交互(选择教育阶段、查看模式/案例),用Qt Widgets构建界面,通过HTTP与Python后端通信。
1. 主窗口界面代码( mainwindow.h )
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include \"edu_model.h\"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
// 阶段按钮点击事件(小学/初中/高校)
void on_primaryBtn_clicked();
void on_middleBtn_clicked();
void on_collegeBtn_clicked();
// 案例查询按钮点击事件
void on_queryCaseBtn_clicked();
private:
Ui::MainWindow *ui;
QNetworkAccessManager *netManager; // 网络请求管理器
QString backendUrl = \"http://127.0.0.1:8000/api\";
// 发送请求获取发展模式
void fetchModels(const QString &stage);
// 发送请求获取案例
void fetchCases(const QString &stage, const QString &keyword);
// 解析模式数据并显示
void showModels(const QByteArray &data);
// 解析案例数据并显示
void showCases(const QByteArray &data);
};
#endif // MAINWINDOW_H
2. 主窗口实现( mainwindow.cpp )
cpp
#include \"mainwindow.h\"
#include \"ui_mainwindow.h\"
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), netManager(new QNetworkAccessManager(this)) {
ui->setupUi(this);
setWindowTitle(\"教育阶段发展模式参考工具\");
// 连接网络请求完成信号
connect(netManager, &QNetworkAccessManager::finished, this, [=](QNetworkReply *reply) {
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::warning(this, \"错误\", \"请求失败:\" + reply->errorString());
reply->deleteLater();
return;
}
// 根据请求URL判断是模式还是案例数据
QString url = reply->url().toString();
QByteArray data = reply->readAll();
if (url.contains(\"/models\")) {
showModels(data);
} else if (url.contains(\"/cases\")) {
showCases(data);
}
reply->deleteLater();
});
}
MainWindow::~MainWindow() {
delete ui;
}
// 小学按钮点击
void MainWindow::on_primaryBtn_clicked() {
fetchModels(\"primary\");
}
// 初中按钮点击
void MainWindow::on_middleBtn_clicked() {
fetchModels(\"middle\");
}
// 高校按钮点击
void MainWindow::on_collegeBtn_clicked() {
fetchModels(\"college\");
}
// 案例查询按钮点击
void MainWindow::on_queryCaseBtn_clicked() {
QString stage;
if (ui->primaryBtn->isChecked()) stage = \"primary\";
else if (ui->middleBtn->isChecked()) stage = \"middle\";
else if (ui->collegeBtn->isChecked()) stage = \"college\";
else {
QMessageBox::warning(this, \"提示\", \"请先选择教育阶段\");
return;
}
QString keyword = ui->caseKeywordEdit->text(); // 案例关键词输入框
fetchCases(stage, keyword);
}
// 获取发展模式
void MainWindow::fetchModels(const QString &stage) {
QUrl url(backendUrl + \"/models?stage=\" + stage);
netManager->get(QNetworkRequest(url));
}
// 获取案例
void MainWindow::fetchCases(const QString &stage, const QString &keyword) {
QUrl url(backendUrl + \"/cases?stage=\" + stage + \"&keyword=\" + keyword);
netManager->get(QNetworkRequest(url));
}
// 显示发展模式到界面
void MainWindow::showModels(const QByteArray &data) {
ui->modelListWidget->clear(); // 清空列表
QJsonArray models = QJsonDocument::fromJson(data).array();
for (const auto &m : models) {
QJsonObject model = m.toObject();
QString itemText = QString(\"【%1】\\n核心理念:%2\\n适用场景:%3\")
.arg(model[\"name\"].toString())
.arg(model[\"core_idea\"].toString())
.arg(model[\"applicable_scene\"].toString());
ui->modelListWidget->addItem(itemText);
}
}
// 显示案例到界面
void MainWindow::showCases(const QByteArray &data) {
ui->caseListWidget->clear(); // 清空列表
QJsonArray cases = QJsonDocument::fromJson(data).array();
for (const auto &c : cases) {
QJsonObject caseObj = c.toObject();
QString itemText = QString(\"【%1(%2)】\\n采用模式:%3\\n成效:%4\")
.arg(caseObj[\"school_name\"].toString())
.arg(caseObj[\"region\"].toString())
.arg(caseObj[\"model_used\"].toString())
.arg(caseObj[\"effect\"].toString());
ui->caseListWidget->addItem(itemText);
}
}
3. UI设计( mainwindow.ui 简化描述)
Qt Designer 设计的界面布局:
- 顶部:三个单选按钮( primaryBtn / middleBtn / collegeBtn ),分别对应“小学”“初中”“高校”;
- 左侧: modelListWidget (QListWidget),显示发展模式;
- 右侧:输入框( caseKeywordEdit )+ 查询按钮( queryCaseBtn )+ caseListWidget (QListWidget),用于案例查询与展示。
二、Python后端(数据库集成+完整接口)
用SQLite存储数据,提供发展模式查询、案例检索、效果分析功能,基于FastAPI实现。
1. 数据库初始化( db_init.py )
python
import sqlite3
def init_db():
conn = sqlite3.connect(\"edu_dev.db\")
cursor = conn.cursor()
# 创建发展模式表
cursor.execute(\'\'\'
CREATE TABLE IF NOT EXISTS development_models (
model_id INTEGER PRIMARY KEY AUTOINCREMENT,
stage TEXT NOT NULL, -- primary/middle/college
name TEXT NOT NULL,
core_idea TEXT NOT NULL,
key_elements TEXT NOT NULL, -- 用逗号分隔的字符串
applicable_scene TEXT NOT NULL
)
\'\'\')
# 创建案例表
cursor.execute(\'\'\'
CREATE TABLE IF NOT EXISTS case_studies (
case_id INTEGER PRIMARY KEY AUTOINCREMENT,
stage TEXT NOT NULL,
school_name TEXT NOT NULL,
region TEXT NOT NULL,
model_used TEXT NOT NULL,
effect TEXT NOT NULL,
detail TEXT
)
\'\'\')
# 插入示例数据(发展模式)
cursor.execute(\'\'\'
INSERT OR IGNORE INTO development_models (stage, name, core_idea, key_elements, applicable_scene)
VALUES
(\'primary\', \'小学:游戏化教学模式\', \'通过游戏化设计激发学习兴趣\', \'情境创设,即时反馈,小组竞赛\', \'1-3年级基础学科教学\'),
(\'primary\', \'小学:项目式学习模式\', \'以真实项目驱动综合能力培养\', \'跨学科整合,问题导向,成果展示\', \'4-6年级综合实践课程\'),
(\'middle\', \'初中:分层教学模式\', \'按能力分组实施差异化教学\', \'入学测评,动态分组,个性化作业\', \'7-9年级数学/英语学科\'),
(\'college\', \'高校:产学研融合模式\', \'结合科研项目培养应用能力\', \'企业合作,项目课题,成果转化\', \'理工科高年级学生\')
\'\'\')
# 插入示例数据(案例)
cursor.execute(\'\'\'
INSERT OR IGNORE INTO case_studies (stage, school_name, region, model_used, effect, detail)
VALUES
(\'primary\', \'阳光小学\', \'北京海淀\', \'游戏化教学模式\', \'数学及格率提升20%\', \'2023年实施,针对1-2年级学生...\'),
(\'middle\', \'实验中学\', \'上海浦东\', \'分层教学模式\', \'英语优秀率提升15%\', \'2022年起实施,按入学成绩分组...\'),
(\'college\', \'理工大学\', \'广东深圳\', \'产学研融合模式\', \'毕业生就业率达98%\', \'与5家科技企业合作开发课程...\')
\'\'\')
conn.commit()
conn.close()
if __name__ == \"__main__\":
init_db()
print(\"数据库初始化完成\")
2. 后端接口实现( app.py )
python
from fastapi import FastAPI, Query
from pydantic import BaseModel
from typing import List, Optional
import sqlite3
import json
app = FastAPI(title=\"教育阶段发展模式API\")
# 数据库连接工具函数
def get_db():
conn = sqlite3.connect(\"edu_dev.db\")
conn.row_factory = sqlite3.Row # 支持按列名访问
return conn
# 数据模型(Pydantic)
class DevelopmentModel(BaseModel):
model_id: int
stage: str
name: str
core_idea: str
key_elements: List[str]
applicable_scene: str
class CaseStudy(BaseModel):
case_id: int
stage: str
school_name: str
region: str
model_used: str
effect: str
detail: Optional[str] = None
# 接口1:查询发展模式
@app.get(\"/api/models\", response_model=List[DevelopmentModel])
def get_models(stage: str = Query(..., description=\"教育阶段:primary/middle/college\")):
conn = get_db()
cursor = conn.cursor()
cursor.execute(\"SELECT * FROM development_models WHERE stage = ?\", (stage,))
models = cursor.fetchall()
conn.close()
# 转换为响应格式(key_elements字符串转列表)
result = []
for m in models:
result.append({
\"model_id\": m[\"model_id\"],
\"stage\": m[\"stage\"],
\"name\": m[\"name\"],
\"core_idea\": m[\"core_idea\"],
\"key_elements\": m[\"key_elements\"].split(\",\"),
\"applicable_scene\": m[\"applicable_scene\"]
})
return result
# 接口2:查询案例
@app.get(\"/api/cases\", response_model=List[CaseStudy])
def get_cases(
stage: str = Query(..., description=\"教育阶段:primary/middle/college\"),
keyword: str = Query(\"\", description=\"案例关键词(学校名/模式名)\")
):
conn = get_db()
cursor = conn.cursor()
# 带关键词模糊查询
query = \"\"\"
SELECT * FROM case_studies WHERE stage = ?
AND (school_name LIKE ? OR model_used LIKE ?)
\"\"\"
cursor.execute(query, (stage, f\"%{keyword}%\", f\"%{keyword}%\"))
cases = cursor.fetchall()
conn.close()
# 转换为响应格式
return [dict(case) for case in cases]
# 接口3:分析模式效果(示例)
@app.get(\"/api/analyze/model\")
def analyze_model(model_id: int = Query(..., description=\"模式ID\")):
# 模拟从案例中统计该模式的效果
conn = get_db()
cursor = conn.cursor()
# 先获取模式名称
cursor.execute(\"SELECT name, stage FROM development_models WHERE model_id = ?\", (model_id,))
model = cursor.fetchone()
if not model:
return {\"error\": \"模式不存在\"}
# 统计使用该模式的案例成效
cursor.execute(\"\"\"
SELECT effect FROM case_studies
WHERE stage = ? AND model_used = ?
\"\"\", (model[\"stage\"], model[\"name\"]))
effects = cursor.fetchall()
conn.close()
return {
\"model_name\": model[\"name\"],
\"case_count\": len(effects),
\"sample_effects\": [e[\"effect\"] for e in effects[:3]] # 前3个案例成效
}
if __name__ == \"__main__\":
import uvicorn
uvicorn.run(\"app:app\", host=\"0.0.0.0\", port=8000, reload=True)
三、运行步骤
1. 初始化数据库:
运行 python db_init.py ,生成 edu_dev.db 并插入示例数据。
2. 启动Python后端:
运行 python app.py ,后端服务启动在 http://127.0.0.1:8000 。
3. 编译运行C++客户端:
- 用Qt Creator打开项目,确保 .pro 文件包含 QT += network widgets ;
- 编译后运行,点击“小学”“初中”“高校”按钮查看对应发展模式,输入关键词(如“游戏化”“分层”)查询案例。
功能说明
- 发展模式查询:按教育阶段展示对应模式的核心理念、关键要素和适用场景;
- 案例检索:按阶段+关键词查询真实学校的实践案例及成效;
- 效果分析:通过API可查看某模式的实际应用效果(示例接口)。
该代码可直接扩展,例如添加更多模式/案例数据、优化界面交互、增加数据可视化功能等,适合作为教育阶段发展参考工具的基础版本。