请选择 进入手机版 | 继续访问电脑版

简易电子表格的设计

[复制链接]
小甜心 发表于 2020-12-31 18:10:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
浅易电子表格的设计

问题形貌

设计一个支持根本计算统计功能和别的一些表格管理/处理功能的软件,使用户可在该软件的支持下,用交互方式进行表格创建、数据输入、数据编辑及别的一些表格操纵。即类似于浅易Execel表格处理软件。
根本要求

(1)创建表格:创建空缺表格,同时在屏幕上显示,使其处于可输入数据的状态。用户可指定新建表格的行列数。
(2)输入数据与编辑数据:通过键盘将数据输入到显示在屏幕上的电子表上。
(3)根本统计计算:可选择按行或列合计、求均匀、求最大最小。
(4)排序:使任意指定的行或列中的数据按巨细(升或降)分列,对字符型据,还可选择巨细写敏感。
(5)表格生存:使电子表格以磁盘文件的方式存储在磁盘上,并可随时读入,供继承处理。
(6)公式支持:单位格内可输入公式(表达式),使对应单位格的最终内容为公式的计算结果。公式最根本的形式是算术计算公式,可按名引用别的单位格。
算法思路

  1. void MyExcel::on_ConfirmButton_pressed(){    int calculate_row=-1;    int calculate_column=-1;    if(ui->RCBox->currentText()=="行")    {        calculate_row=ui->lineEdit->text().toInt();        if(calculate_rowui->tableWidget->columnCount())         {             QMessageBox::about(this,"Warning","输入错误的行数");         }    }    else if(ui->RCBox->currentText()=="列")     {        calculate_column=ui->lineEdit->text().toInt();        if(calculate_columnui->tableWidget->columnCount())         {             QMessageBox::about(this,"Warning","输入错误的列数");         }    }    if(ui->FunctionBox->currentText()=="合计")    {        if(calculate_row!=-1)        {            if(SumColumnPos==-1)            {                SumColumnPos=ui->tableWidget->columnCount();                ui->tableWidget->insertColumn(ui->tableWidget->columnCount());                //计算某一行的合计时,就是插入新的一列,专门用于计算合计的            }            double sum=0;            for(int i=0;itableWidget->item(calculate_row-1,i)==0)                {                    QMessageBox::about(this,"Warning","有格没有被界说");                    break;                }                else{                   sum=sum+ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                }                qDebug()setItem(calculate_row-1,SumColumnPos,SUM);        }        else if(calculate_column!=-1)        {            if(SumRowPos==-1)            {                SumRowPos=ui->tableWidget->rowCount();                 ui->tableWidget->insertRow(ui->tableWidget->rowCount());                 //就是插入新的一行,专门用于计算合计的            }            double sum=0;            for(int i=0;itableWidget->item(i,calculate_column-1)==0)                {                    QMessageBox::about(this,"Warning","有格没有被界说");                    break;                }                else{                   sum=sum+ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                }                qDebug()setItem(SumRowPos,calculate_column-1,SUM);        }    }    else if(ui->FunctionBox->currentText()=="求均匀")        {        if(calculate_row!=-1)        {            if(AverageColumnPos==-1)            {                AverageColumnPos=ui->tableWidget->columnCount();                ui->tableWidget->insertColumn(ui->tableWidget->columnCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double sum=0;            for(int i=0;itableWidget->item(calculate_row-1,i)==0)                {                    QMessageBox::about(this,"Warning","有格没有被界说");                    break;                }                else{                   sum=sum+ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                }                qDebug()setItem(calculate_row-1,AverageColumnPos,Average);        }        else if(calculate_column!=-1)        {            if(AverageRowPos==-1)            {                AverageRowPos=ui->tableWidget->rowCount();                ui->tableWidget->insertRow(ui->tableWidget->rowCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double sum=0;            for(int i=0;itableWidget->item(i,calculate_column-1)==0)                {                    QMessageBox::about(this,"Warning","有格没有被界说");                    break;                }                else{                   sum=sum+ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                }                qDebug()setItem(AverageRowPos,calculate_column-1,Average);        }    }    else if(ui->FunctionBox->currentText()=="最大值")        {        if(calculate_row!=-1)        {            if(MaxColumnPos==-1)            {                MaxColumnPos=ui->tableWidget->columnCount();                ui->tableWidget->insertColumn(ui->tableWidget->columnCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double maxNumber=0;            for(int i=0;iitem(calculate_row-1,i)->text().toDouble())                {                    if(ui->tableWidget->item(calculate_row-1,i)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       maxNumber=ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                    }                    qDebug()setItem(calculate_row-1,MaxColumnPos,MaxNumber);        }        else if(calculate_column!=-1)        {            if(MaxRowPos==-1)            {                MaxRowPos=ui->tableWidget->rowCount();                ui->tableWidget->insertRow(ui->tableWidget->rowCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double maxNumber=0;            for(int i=0;iitem(i,calculate_column-1)->text().toDouble())                {                    if(ui->tableWidget->item(i,calculate_column-1)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       maxNumber=ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                    }                    qDebug()setItem(MaxRowPos,calculate_column-1,MaxNumber);        }    }    else if(ui->FunctionBox->currentText()=="最小值")        {        if(calculate_row!=-1)        {            if(MinColumnPos==-1)            {                MinColumnPos=ui->tableWidget->columnCount();                ui->tableWidget->insertColumn(ui->tableWidget->columnCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double minNumber=ui->tableWidget->item(calculate_row-1,0)->text().toDouble();            for(int i=0;iui->tableWidget->item(calculate_row-1,i)->text().toDouble())                {                    if(ui->tableWidget->item(calculate_row-1,i)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       minNumber=ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                    }                    qDebug()setItem(calculate_row-1,MinColumnPos,MinNumber);        }        else if(calculate_column!=-1)        {            if(MinRowPos==-1)            {                MinRowPos=ui->tableWidget->rowCount();                ui->tableWidget->insertRow(ui->tableWidget->rowCount());                //计算某一行的均匀时,就是插入新的一列,专门用于计算合计的            }            double minNumber=ui->tableWidget->item(0,calculate_column-1)->text().toDouble();            for(int i=0;iui->tableWidget->item(i,calculate_column-1)->text().toDouble())                {                    if(ui->tableWidget->item(i,calculate_column-1)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       minNumber=ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                    }                    qDebug()setItem(MinRowPos,calculate_column-1,MinNumber);        }    }    else if(ui->FunctionBox->currentText()=="升序排序")        {             if(calculate_row!=-1)             {                double array[100];                for(int i=0;itableWidget->item(calculate_row-1,i)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       array[i]=ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                    }                }                    std::sort(array,array+Column);                    for(int i=0;itableWidget->setItem(calculate_row-1,i,arrayItem);                    }             }             else if(calculate_column!=-1)             {                 double array[100];                 for(int i=0;itableWidget->item(i,calculate_column-1)==0)                     {                         QMessageBox::about(this,"Warning","有格没有被界说");                         break;                     }                     else{                        array[i]=ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                     }                 }                 std::sort(array,array+Row);                 for(int i=0;itableWidget->setItem(i,calculate_column-1,arrayItem);                 }             }        }    else if(ui->FunctionBox->currentText()=="降序排序")        {             if(calculate_row!=-1)             {                double array[100];                for(int i=0;itableWidget->item(calculate_row-1,i)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                        break;                    }                    else{                       array[i]=ui->tableWidget->item(calculate_row-1,i)->text().toDouble();                    }                }                    std::sort(array,array+Column);                    for(int i=Column-1;i>=0;i--)                    {                        QTableWidgetItem *arrayItem=new QTableWidgetItem(QString::number(array[i]));                        ui->tableWidget->setItem(calculate_row-1,Column-1-i,arrayItem);                    }             }             else if(calculate_column!=-1)             {                 double array[100];                 for(int i=0;itableWidget->item(i,calculate_column-1)==0)                    {                        QMessageBox::about(this,"Warning","有格没有被界说");                         break;                    }                     else                     {                        array[i]=ui->tableWidget->item(i,calculate_column-1)->text().toDouble();                   }                 }                 std::sort(array,array+Row);                 for(int i=Row-1;i>=0;i--)                 {                     QTableWidgetItem *arrayItem=new QTableWidgetItem(QString::number(array[i]));                     ui->tableWidget->setItem(Row-1-i,calculate_column-1,arrayItem);                 }             }     }    //调解行列宽度,制止和原来的表格数据肴杂    for(int i=Column;itableWidget->columnCount();i++)    {        ui->tableWidget->setColumnWidth(i,5);    }    for(int i=Column;itableWidget->rowCount();i++)    {        ui->tableWidget->setRowHeight(i,3);    }}
复制代码
来源:https://blog.csdn.net/Mario_kxz/article/details/111936375
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )