试验软件-均匀设计试验法

#include "uniform_design.h"
#include "ui_uniform_design.h"

Uniform_design::Uniform_design(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Uniform_design)
{
    ui->setupUi(this);
    init_data();
    get_software_path();
}

Uniform_design::~Uniform_design()
{
    delete ui;
}

void Uniform_design::init_data()
{
   map_data();
   ui->lineEdit->setEnabled(false);
   ui->lineEdit_2->setEnabled(false);
   QString str = ui->comboBox->currentText();
   QString table_str = map_u.value(str);
   qDebug()<<table_str;
   QStringList teplist = table_str.split(",");
   QString row_str = teplist.at(0);
   ui->lineEdit->setText(row_str);
   QStringList list_combox;
   for(int i=1;i<teplist.size();i++)
   {
    list_combox<<teplist.at(i);
   }
    if(list_combox.size()>0)
    {
        ui->comboBox_2->addItems(list_combox);
    }
    qDebug()<<"2";
   QString col_str = ui->comboBox_2->currentText();
   set_table(ui->lineEdit->text(),ui->comboBox_2->currentText());
}

void Uniform_design::map_data()
{
    map_u.clear();
    map_u.insert("U5(5^3)","5,2,3");
    map_u.insert("U6*(6^4)","6,2,3,4");
    map_u.insert("U7(7^4)","7,2,3,4");
    map_u.insert("U7*(7^4)","7,2,3");
    map_u.insert("U8*(8^5)","8,2,3,4");
    map_u.insert("U9(9^5)","9,2,3,4");
    map_u.insert("U9*(9^4)","9,2,3");
    map_u.insert("U10*(10^8)","10,2,3,4,5,6");
    map_u.insert("U11(11^6)","11,2,3,4,5,6");
    map_u.insert("U11*(11^4)","11,2,3");
    map_u.insert("U12*(12^10)","12,2,3,4,5,6,7");
    map_u.insert("U13(13^8)","13,2,3,4,5,6");
    map_u.insert("U13*(13^4)","13,2,3,4");
    map_u.insert("U14*(14^5)","14,2,3,4");
    map_u.insert("U15(15^5)","15,2,3,4");
    map_u.insert("U15*(15^7)","15,2,3,4,5");
    map_u.insert("U16*(16^12)","16,2,3,4,5,6,7");
    map_u.insert("U17(17^8)","17,2,3,4,5,6,7");
    map_u.insert("U17*(17^5)","17,2,3,4");
    map_u.insert("U18*(18^11)","18,2,3,4,5,6,7");
    map_u.insert("U19(19^7)","19,2,3,4,5,6,7");
    map_u.insert("U19*(19^7)","19,2,3,4,5");
    map_u.insert("U20*(20^7)","20,2,3,4,5,6");
    map_u.insert("U21(21^6)","21,2,3,4,5,6");
    map_u.insert("U21*(21^7)","21,2,3,4,5");
    map_u.insert("U22*(22^11)","22,2,3,4,5,6,7");
    map_u.insert("U23(23^13)","23,2,3,4,5,6,7");
    map_u.insert("U23*(23^7)","23,2,3,4,5");
    map_u.insert("U24*(24^9)","24,2,3,4,5,6,7");
    map_u.insert("U25(25^9)","25,2,3,4,5,6,7");
    map_u.insert("U25*(25^11)","25,2,3,4,5");
    map_u.insert("U26*(26^11)","26,2,3,4,5,6,7");
    map_u.insert("U27(27^11)","27,2,3,4,5,6,7");
    map_u.insert("U27*(27^10)","27,2,3,4,5");
    map_u.insert("U28*(28^8)","28,2,3,4,5,6,7");
    map_u.insert("U29(29^8)","29,2,3,4,5,6,7");
    map_u.insert("U30*(30^13)","30,2,3,4,5,6,7");
    map_u.insert("U31(31^12)","31,2,3,4,5,6,7");
    map_u.insert("U31*(31^10)","31,2,3,4,5");
    map_u.insert("U37(37^12)","37,2,3,4,5,6,7");
}

void Uniform_design::set_table(QString row_str, QString col_str)
{
    ui->tableWidget_79->setRowCount(0);
    ui->tableWidget_79->setRowCount(row_str.toInt()+1);
    ui->tableWidget_79->setColumnCount(col_str.toInt());
}

void Uniform_design::map_list_data(QList<double> list,int i)
{
    if(list.size()>1)
    {
        map_list.clear();
        for(int i=0;i<list.size();i++)
        {
           map_list.insert(QString::number(i+1),QString::number(list.at(i)));
                qDebug()<< "key"<<i+1<<"value"<<list.at(i);
        }
        for(int num=0;num<ui->tableWidget_80->rowCount();num++)
        {
            QString str = ui->tableWidget_80->item(num,i)->text();
            if(str.contains("\n"))
            {
                str.remove(str.size()-1,1);
            }
            ui->tableWidget_80->item(num,i)->setText(map_list.value(str));
            qDebug()<<str <<"-"<<num<<i<<"-"<<map_list.value(str);

        }
        ui->lineEdit_2->setText(bias_value);
    }

}

void Uniform_design::visit_table()
{
    QString str = ui->comboBox->currentText();
    if(str.contains("*"))
    {
        str.replace("*","x");
    }
    read_txt(software_path+str+".txt",ui->tableWidget_82);
    read_txt(software_path+str+"user.txt",ui->tableWidget_81);
}

void Uniform_design::create_table()
{
    //插入表中 先找到对应的表和列
    visit_table();
}

void Uniform_design::on_pushButton_clicked()
{
    init_data();
    ui->tableWidget_80->setRowCount(0);
    ui->tableWidget_81->setRowCount(0);
    ui->tableWidget_82->setRowCount(0);
    ui->tableWidget_80->horizontalHeader()->setVisible(false);
}

void Uniform_design::on_pushButton_2_clicked()
{
    create_table();
    add_uniform_table();
    //获取表格的数据进行排序
    for(int i=0;i<ui->tableWidget_79->columnCount();i++)
    {
        QList<double>list_dle;
        for(int k=1;k<ui->tableWidget_79->rowCount();k++)
        {
            if(ui->tableWidget_79->item(k,i) == 0)
            {
                qDebug()<<"row col"<<k<<i;
                QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("请将因素水平表填好在执行操作"));
                return;
            }
            else
            {
                list_dle<<ui->tableWidget_79->item(k,i)->text().toDouble();
            }
        }
        qSort(list_dle);
        //形成映射关系
        qDebug()<<list_dle;

        map_list_data(list_dle,i);
    }
}

void Uniform_design::on_comboBox_activated(const QString &arg1)
{
    ui->tableWidget_80->setRowCount(0);
    QStringList list;
    list.clear();
    ui->tableWidget_80->setHorizontalHeaderLabels(list);
    QString table_str = map_u.value(arg1);
    QStringList teplist = table_str.split(",");
    QString row_str = teplist.at(0);
    ui->lineEdit->setText(row_str);
    QStringList list_combox;
    ui->comboBox_2->clear();
    for(int i=1;i<teplist.size();i++)
    {
     list_combox<<teplist.at(i);
    }
     if(list_combox.size()>0)
     {
         ui->comboBox_2->addItems(list_combox);
     }
    set_table(ui->lineEdit->text(),ui->comboBox_2->currentText());
}

void Uniform_design::on_comboBox_2_activated(const QString &arg1)
{
    ui->tableWidget_79->setRowCount(0);
    set_table(ui->lineEdit->text(),ui->comboBox_2->currentText());

}


void Uniform_design::write_txt(QString path, QStringList list)
{
    QFile file(path);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        return;
    }
    QTextStream stream(&file);
    for(int i=0;i<list.size();i++)
    {
        QString temp_str = list.at(i);
        if(i == list.size()-1)
        {
            temp_str.remove(temp_str.size()-1,1);
        }
        stream<<temp_str;
    }
    file.close();
}
void Uniform_design::get_tabletable(QTableWidget *tablewidget)
{
    //遍历表格取出选值范围
    tale_data_list.clear();
    for(int i=0;i<tablewidget->rowCount();i++)
    {
        QString tStr = "";
        for(int j=0;j<tablewidget->columnCount();j++)
        {
            if(tablewidget->item(i,j) != 0)
            {
                   tStr = tStr + tablewidget->item(i,j)->text() + "\t";
            }
            else
            {
                tStr = tStr + "" + "\t";
            }
        }
        if(tStr !="")
        {
           tStr.remove(tStr.size()-1,1);
           tale_data_list<<tStr + "\n";
        }

    }
    qDebug()<<tale_data_list;
    if(tale_data_list.size()<1)
    {
        QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("请填表"));
        return;
    }
}
void Uniform_design::get_software_path()
{
    QDir dir(qApp->applicationDirPath());
    dir.cdUp();
//    dir.cdUp();
    software_path = dir.absolutePath() + QString("/uniform_tables/");
    qDebug()<<software_path;
}
void Uniform_design::read_txt(QString path,QTableWidget *tablewidget)
{
    QFile file(path);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        return;
    }
    txt_list.clear();
    while(!file.atEnd())
    {
        QByteArray line = file.readLine();
        QString str(line);
        qDebug()<<str;
        txt_list<<str;
    }
    qDebug()<<txt_list;
//    if(txt_list.size()<1)
//    {
//        QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("填表格式有误!"));
//        return;
//    }
    table_update(txt_list,tablewidget);
}
void Uniform_design::table_update(QStringList list,QTableWidget *tablewidget)
{
    int row,col;
    row = list.size();
    for(int num = 0;num<list.size();num++)
    {
        QString str = list.at(num);
        QStringList tlist = str.split("\t");
        col = tlist.size();
        qDebug()<<"num:"<<tlist.size();
    }
    //获取行和列
    tablewidget->setRowCount(row);
    tablewidget->setColumnCount(col);
    for(int num = 0;num<list.size();num++)
    {
        QString str = list.at(num);
        QStringList tlist = str.split("\t");
        for(int k=0;k<tlist.size();k++)
        {

            QString str = tlist.at(k);
            tablewidget->setItem(num,k,new QTableWidgetItem(str));
        }
    }
    if(tablewidget == ui->tableWidget_81)
    {
        QString str = QString::fromLocal8Bit("列号");
        tablewidget->item(0,1)->setText(str);
    }
}

void Uniform_design::add_uniform_table()
{
    QString obj_str;
    bias_value = "";
    QString str = ui->comboBox_2->currentText();

    for(int i=0;i<ui->tableWidget_81->rowCount();i++)
    {
        for(int k=0;k<ui->tableWidget_81->columnCount();k++)
        {
            if(ui->tableWidget_81->item(i,k)->text() == str)
            {
                obj_str = ui->tableWidget_81->item(i,1)->text();
                bias_value = ui->tableWidget_81->item(i,2)->text();
            }
        }
    }
    QStringList list = obj_str.split(",");
    qDebug()<<list<<ui->tableWidget_79->rowCount()-1<<list.size();
    ui->tableWidget_80->setRowCount(ui->tableWidget_79->rowCount()-1);
    ui->tableWidget_80->setColumnCount(list.size());

    QStringList title_list;
    QVector<QStringList>vec_list;

    for(int num = 0;num<list.size();num++)
    {
        QString str = list.at(num);
        title_list<<ui->tableWidget_79->item(0,num)->text();
        //取出表中的值形成容器
        QStringList listtep;

        for(int count = 0;count<ui->tableWidget_82->rowCount()-1;count++)
        {
            qDebug()<<count+1<<str.toInt();
            listtep<<ui->tableWidget_82->item(count+1,str.toInt())->text();
        }
        vec_list.push_back(listtep);

//        for(int num1=0;num1<ui->tableWidget_80->rowCount();num1++)
//        {
//            for(int k=0;k<ui->tableWidget_80->columnCount();k++)
//            {
//                ui->tableWidget_80->setItem(num1,k,new QTableWidgetItem(ui->tableWidget_82->item(num1+1,str.toInt())->text()));

//            }
//        }
    }
    qDebug()<<vec_list;

//充入表格
    for(int numk=0;numk<vec_list.size();numk++)
    {
        QStringList teplist = vec_list.at(numk);
        for(int numj=0;numj<teplist.size();numj++)
        {
            ui->tableWidget_80->setItem(numj,numk,new QTableWidgetItem(teplist.at(numj)));
        }
    }
    ui->tableWidget_80->setHorizontalHeaderLabels(title_list);
    ui->tableWidget_80->horizontalHeader()->setVisible(true);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好格子点是一种应用于均匀设计表的构造方均匀设计表是一种实验设计方案,用于确定不同因素对实验结果的影响。u7(76)表示该均匀设计表具有7个水平和76个试验,即有7个因素,每个因素有7个水平,总共进行76个试验。 首先,我们需要确定一个好格子点表。好格子点表是一个特殊的数字方阵,每行和每列都包含不同的数字,且互不相同。通常,好格子点表的列数需要等于表的因素个数。 然后,我们可以根据好格子点表中的数字,为每个因素的每个水平指定一个数字。通过将这些数字与因素水平进行组合,可以得到试验的各个组合。 在这个例子中,根据好格子点表,我们可以选择一个如下的好格子点表: 1 2 3 4 5 6 7 2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5 7 1 2 3 4 5 6 然后,我们为每个因素的每个水平指定一个数字。假设我们有7个因素,每个因素有7个水平,则我们可以使用上述好格子点表中的第一行作为因素A的水平数字,第二行作为因素B的水平数字,以此类推。 最后,通过将这些数字与因素水平进行组合,我们可以得到试验表。例如,第一行的试验组合可以为(1,2,3,4,5,6,7),第二行的试验组合可以为(2,3,4,5,6,7,1),以此类推。总共进行76个试验。 通过这种方式,我们可以使用好格子点构造均匀设计表u7(76)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值