【课堂点名系统】

简易课堂点名系统(带语音)

一、名单文件导入

 QString path = QFileDialog::getOpenFileName(this,tr("打开文件"),".",tr("Text Files(*.csv)")); 
    // qDebug() << path;
    if(!path.isEmpty())
    {
       QFile file(path);
       if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
       {
           QMessageBox::warning(this, tr("读文件"),
                                tr("Cannot open file:\n%1").arg(path));
           return;
       }
       int i = 0;            // 相对索引
       file.readLine();      // 跳过标题
       while(!file.atEnd())
       {
            QString strAll = file.readLine();
            QStringList strList = strAll.split(",");
            if (!strList[0].isEmpty())
            {
                std::pair<QString, QString> pairTempInfo(strList[0], strList[1]);
                map_info[i++] = pairTempInfo;
            }
       }
       file.close();
    }
    else
    {
       QMessageBox::warning(this, tr("文件路径"),
                            tr("你没有选择文件"));
    }

二、随机数生成

bool Widget::getRandNum(int *a,int n,int min,int max)   //获取[min-max]之间不重复的n个随机数保存到数组a中
{
    int i,j,t,m = 0,flag;
    srand(time(nullptr));        //随机数种子函数
    for(i=0; i<n; i++)           //循环n次得到n个随机数
    {
        while(1)
        {
            flag = 0;                  //进入while(1),标志位置0
            t = rand()%(max - min + 1) + min;   //rand()%5得到 [0-4) 之间的随机数,因此rand()%(max - min + 1)可以得到[0 - (max - min + 1) )之间的随机数。再加上min 就能得到 [min - max]之间的随机数
            for(j=0; j<m; j++)         //第一次m = 0,不执行循环语句
            {
                if(a[j] == t)          //新生成的随机数只要和数组中的元素重复
                {
                    flag = 1;          // flag 置1
                    break;             //一旦找到一个重复的,直接跳出for循环
                }
            }
            if(flag == 0)              //第一次flag = 0
            {
                a[m++] = t;            //生成的随机数和数组中已有的元素不重复时,保存到数组中。
                break;                 //跳出while循环,继续获得后面的随机数
            }
        }
    }
    return 0;
}

三、语音功能


void Widget::on_pushButton_call_clicked()
{
    m_speech.pause();
    int arr[100] = {0};   // 一个班级的学生上限是100个
    getRandNum(arr, map_info.size(), 0, map_info.size() - 1);
    m_speech.say("本次抽到的五位同学分别是:");
    for (int i = 0; i < 5; i++)
    {
        QString strLineData = QString("%1、%2").arg(++m_nNumber).arg(map_info[arr[i]].first);
        ui->textEdit->append(strLineData);
        // ui->textEdit->textCursor().movePosition(QTextCursor::StartOfLine);
        QString strSpeechData = QString("%1%2%3").arg(m_nNumber).arg("号").arg(map_info[arr[i]].first);
        m_speech.say(strSpeechData);
    }
    m_speech.say("请做好准备!");
}

四、运行效果

【课堂点名系统】

上一篇:【libevent】定时器:以lsquic的prog.c为例


下一篇:electron例子 | 文件读写