标签:info map 点名 int tr 系统 QString arg 课堂
简易课堂点名系统(带语音)
一、名单文件导入
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("请做好准备!");
}
四、运行效果
标签:info,map,点名,int,tr,系统,QString,arg,课堂 来源: https://blog.csdn.net/qq_35316704/article/details/122667882
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。