> 技术文档 > Python, C ++开发小学/初中/大学发展模式与思路选择APP

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可查看某模式的实际应用效果(示例接口)。
 
该代码可直接扩展,例如添加更多模式/案例数据、优化界面交互、增加数据可视化功能等,适合作为教育阶段发展参考工具的基础版本。