1. 软件截图
也适用于其它需要随机选取某个东西的地方,比如随机选择学生、抽奖之类的。
【Qt软件的发布参考此文:【Qt5】Qt小软件发布_qilei2010的博客-CSDN博客_qt5发布程序】
发布后exe文件及源代码下载地址:评标专家选取小软件.zip-电子政务文档类资源-CSDN下载
其中 myexe 文件夹可以复制到 任意PC上,双击其中的 SelectName.exe就能使用该软件,录入的人员姓名会保存到当前文件夹的 people.txt 中。
2. 设计与实现
开发环境:Windows 10, Qt 5.14.2。
编程实现:没有什么难度,就是 QList 内的元素随机有点难度,我参考此文的代码。
2.1 项目结构截图
2.2 主要代码
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->txtName = "people.txt";
//创建保存人名的文件
QFile file(this->txtName);
if(!file.exists())
{
file.open(QIODevice::WriteOnly);
file.close();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
//数组元素的乱序排列
QList<QString> MainWindow::LuanXu(QList<QString> list)
{
int length = list.size();
for(int i=0;i<length;i++)
{
QTime t = QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
int r = i+qrand()%(length-i);
QString temp=list[i];
list[i]=list[r];
list[r]=temp;
}
return list;
}
//点击 标签
void MainWindow::on_tabWidget_tabBarClicked(int index)
{
QFile file(this->txtName);
//显示全部人员
if(index == 1){
file.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file);
ui->textBrowser->setText(in.readAll());
file.close();
}
}
//录入人员 保存按钮
void MainWindow::on_pushButton_2_clicked()
{
QString pname = ui->nameInput->text();
QFile file(this->txtName);
//读取people.txt,若无则创建
if(!file.exists())
{
file.open(QIODevice::WriteOnly);
file.close();
}else{
//文件存在
file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
QTextStream stream(&file);
stream<<pname<<"\n";
file.close();
QMessageBox::information(NULL, "提示", "保存成功");
ui->nameInput->clear();
this->on_tabWidget_tabBarClicked(1); //刷新全部人员显示
}
}
//随机选取人员
void MainWindow::on_pushButton_clicked()
{
//读取文件
QFile file(this->txtName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QList<QString> oraList;
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull())
{
oraList.append(line);
line = in.readLine();
}
file.close();
if(oraList.size()<9){
QMessageBox::information(NULL, "提示", "人员不足9名,请先录入人员");
}else{
//随机选取
QList<QString> list = LuanXu(oraList);
QString rstName = list[0]+" "+list[1]+" "+list[2]+" "+list[3]+" "+list[4];
QString secName = list[5]+" "+list[6]+" "+list[7]+" "+list[8];
ui->lineEdit->setText(rstName);
ui->lineEdit_2->setText(secName);
}
}
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QMessageBox>
#include <QFile>
#include <QList>
#include <QTime>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
QList<QString> LuanXu(QList<QString> list);
~MainWindow();
private slots:
void on_tabWidget_tabBarClicked(int index);
void on_pushButton_2_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QString txtName;
};
#endif // MAINWINDOW_H