#include "home.h"
#include "ui_home.h"
Home::Home(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Home)
{
ui->setupUi(this);
QSettings settings("kim", "ad");
username = settings.value("username").toString();
usertype = settings.value("usertype").toString();
ui->usertypelabel->setText(usertype);
if(usertype=="学生")
{
ui->listframe->hide();
ui->setframe->hide();
ui->mainframe->hide();
QFrame *stuframe = new QFrame();
stuframe->setParent(this);
stuframe->setStyleSheet("width:100px;height:100px;background-color: rgb(250, 250, 250);");
stuframe->move(100,0);
teachEdit = new QLineEdit(this);
teachEdit->move(200,50);
teachEdit->setStyleSheet("background-color:#ffffff;color:#000000;width:200px;height:30px;border-radius:7px;color:#000000;padding-left:10px;");
teachEdit->setPlaceholderText("请输入教师账号");
adkeyEdit = new QLineEdit(this);
adkeyEdit->move(200,90);
adkeyEdit->setStyleSheet("background-color:#ffffff;color:#000000;width:200px;height:30px;border-radius:7px;color:#000000;padding-left:10px;");
adkeyEdit->setPlaceholderText("请输入签到验证码");
adkeybtn = new QPushButton(this);
adkeybtn->move(200,170);
adkeybtn->setText("签到");
adkeybtn->setStyleSheet("background-color:#000000;color:#ffffff;width:200px;height:40px;border-radius:7px;");
connect(adkeybtn, &QPushButton::clicked, this, &Home::onAdKeyBtnClicked);
stuHintLable = new QLabel(this);
stuHintLable->move(210,140);
stuHintLable->setFixedWidth(200);
stuHintLable->setStyleSheet("color:rgb(222, 60, 51);height:40px;");
}
ui->usernamelabel->setText(username);
ui->usertypelabel->setAlignment(Qt::AlignCenter);
closeAllpage();
openAdPage();
}
Home::~Home()
{
delete ui;
}
void Home::onAdKeyBtnClicked() {
if(teachEdit->text()=="")
{
stuHintLable->setText("教师账号不能为空");
stuHintLable->setStyleSheet("color:rgb(222, 60, 51);height:40px;");
}else if(adkeyEdit->text()=="")
{
stuHintLable->setText("签到激活码不能为空");
stuHintLable->setStyleSheet("color:rgb(222, 60, 51);height:40px;");
}else{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::stuad_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::stuad_readyRead_slot);
}
}
void Home::startad_connected_slot()
{
struct data user;
user.type=STARTAD;
user.username=username;
user.value=generateRandomString(6);
ui->hintlable_3->setText("签到码:"+user.value);
ui->startattendancebtn->setStyleSheet("background-color:#ffffff;border-radius:7px;border:1px solid #000000;color:#000000;");
socket->write(user.toByteArray());
}
void Home::startad_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
outputlog(receivedInfo.data);
socket->disconnectFromHost();
}
void Home::endad_connected_slot()
{
struct data user;
user.type=ENDAD;
user.username=username;
user.value="123";
ui->hintlable_3->setText("");
ui->startattendancebtn->setStyleSheet("background-color:#000000;border-radius:7px;color:#ffffff;");
socket->write(user.toByteArray());
}
void Home::endad_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
outputlog(receivedInfo.data);
socket->disconnectFromHost();
}
void Home::addname_connected_slot()
{
struct data user;
user.type=NAMEADD;
user.username=username;
user.value=ui->funcinput->text();
socket->write(user.toByteArray());
}
void Home::addname_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
outputlog("【"+ui->funcinput->text()+"】"+receivedInfo.data);
ui->funcinput->clear();
socket->disconnectFromHost();
}
void Home::getAllName_connected_slot()
{
struct data user;
user.type=NAMEGETALL;
user.username=username;
user.value="123";
socket->write(user.toByteArray());
}
void Home::getAllName_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
QString receivedData(receivedInfo.data);
QStringList records = receivedData.split("|", Qt::SkipEmptyParts);
ui->settable->setRowCount(records.size());
for (int row = 0; row < records.size(); ++row) {
QStringList lines = records[row].split("\n", Qt::SkipEmptyParts);
for (int col = 0; col < lines.size(); ++col) {
QStringList keyValue = lines[col].split("&", Qt::SkipEmptyParts);
QString key = keyValue[0].trimmed();
QString value = keyValue[1].trimmed();
QTableWidgetItem *item = new QTableWidgetItem(value);
ui->settable->setItem(row, col, item);
item->setTextAlignment(Qt::AlignCenter);
}
}
ui->settable->setColumnWidth(0, 50);
ui->settable->setColumnWidth(1, 100);
ui->settable->setColumnWidth(2, 180);
socket->disconnectFromHost();
}
void Home::deletename_connected_slot()
{
QList<QTableWidgetItem *> selectedItems = ui->settable->selectedItems();
if (!selectedItems.isEmpty()) {
int selectedRow = selectedItems.first()->row();
QTableWidgetItem *item1 = ui->settable->item(selectedRow, 0);
QString content1 = item1->text();
struct data user;
user.type=NAMEDELETE;
user.username=username;
user.value=content1;
socket->write(user.toByteArray());
} else {
qDebug() << "No row selected.";
}
}
void Home::deletename_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
outputlog(receivedInfo.data);
socket->disconnectFromHost();
}
void Home::searchname_connected_slot()
{
struct data user;
user.type=NAMESEARCH;
user.username=username;
user.value=ui->funcinput->text();
socket->write(user.toByteArray());
}
void Home::searchname_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
QString receivedData(receivedInfo.data);
QStringList records = receivedData.split("|", Qt::SkipEmptyParts);
ui->settable->setRowCount(records.size());
for (int row = 0; row < records.size(); ++row) {
QStringList lines = records[row].split("\n", Qt::SkipEmptyParts);
for (int col = 0; col < lines.size(); ++col) {
QStringList keyValue = lines[col].split("&", Qt::SkipEmptyParts);
QString key = keyValue[0].trimmed();
QString value = keyValue[1].trimmed();
QTableWidgetItem *item = new QTableWidgetItem(value);
ui->settable->setItem(row, col, item);
item->setTextAlignment(Qt::AlignCenter);
}
}
ui->settable->setColumnWidth(0, 50);
ui->settable->setColumnWidth(1, 100);
ui->settable->setColumnWidth(2, 180);
socket->disconnectFromHost();
}
void Home::getadList_connected_slot()
{
struct data user;
user.type=NAMEHISTORY;
user.username=username;
user.value="123";
socket->write(user.toByteArray());
}
void Home::getadList_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
QString receivedData(receivedInfo.data);
QStringList records = receivedData.split("|", Qt::SkipEmptyParts);
ui->settable->setRowCount(records.size());
for (int row = 0; row < records.size(); ++row) {
QStringList lines = records[row].split("\n", Qt::SkipEmptyParts);
for (int col = 0; col < lines.size(); ++col) {
QStringList keyValue = lines[col].split("&", Qt::SkipEmptyParts);
QString key = keyValue[0].trimmed();
QString value = keyValue[1].trimmed();
QTableWidgetItem *item = new QTableWidgetItem(value);
ui->settable->setItem(row, col, item);
item->setTextAlignment(Qt::AlignCenter);
}
}
ui->settable->setColumnWidth(0, 50);
ui->settable->setColumnWidth(1, 80);
ui->settable->setColumnWidth(2, 80);
ui->settable->setColumnWidth(3, 160);
socket->disconnectFromHost();
}
void Home::stuad_connected_slot()
{
struct data user;
user.type=STUAD;
user.username=username;
user.value=teachEdit->text();
user.value1=adkeyEdit->text();
socket->write(user.toByteArray());
}
void Home::callname_connected_slot()
{
struct data user;
user.type=NAMECALL;
user.username=username;
user.value="123";
user.value1="123";
socket->write(user.toByteArray());
}
void Home::callname_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
outputlog(receivedInfo.data);
socket->disconnectFromHost();
}
void Home::stuad_readyRead_slot()
{
QByteArray rawData = socket->readAll();
const char* rawCharArray = rawData.constData();
socketinfo receivedInfo;
memcpy(&receivedInfo, rawCharArray, sizeof(socketinfo));
stuHintLable->setText(receivedInfo.data);
stuHintLable->setStyleSheet("color:rgb(26, 136, 35);height:40px;");
socket->disconnectFromHost();
}
void Home::on_startattendancebtn_clicked()
{
if(ui->startattendancebtn->text()=="发起签到")
{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::startad_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::startad_readyRead_slot);
ui->startattendancebtn->setText("关闭签到");
}else{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::endad_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::endad_readyRead_slot);
ui->startattendancebtn->setText("发起签到");
ui->startattendancebtn->setStyleSheet("background-color:#000000;border-radius:7px;color:#ffffff;");
}
}
void Home::outputlog(QString msg)
{
ui->adEdit->setText("【"+getCurretTime()+"】"+msg+"\n"+ui->adEdit->toPlainText());
}
QString Home::getCurretTime()
{
QTime systime = QTime::currentTime();
QString s = systime.toString("hh:mm:ss");
return s;
}
QString Home::generateRandomString(int length) {
const QString charset = "123456789abcdefghijklmnpqrstuvwxyz";
QString randomString;
for (int i = 0; i < length; ++i) {
int randomIndex = QRandomGenerator::global()->bounded(charset.length());
randomString.append(charset.at(randomIndex));
}
return randomString;
}
void Home::closeAllpage()
{
ui->hintframe->hide();
ui->hintframe_2->hide();
ui->startattendancebtn->hide();
ui->setmainframe->hide();
ui->callnamebtn->hide();
}
void Home::openAdPage()
{
ui->hintframe->show();
ui->hintframe_2->show();
ui->startattendancebtn->show();
ui->callnamebtn->show();
this->setWindowTitle("签到管理系统v1.0-签到");
}
void Home::openListPage()
{
this->setWindowTitle("签到管理系统v1.0-记录");
ui->setmainframe->show();
ui->funcinput->hide();
ui->addbtn->hide();
ui->searchbtn->hide();
ui->deletebtn->hide();
ui->backbtn->hide();
QStringList headerLabels;
headerLabels << "ID" << "姓名" << "签到码" << "签到时间";
ui->settable->setHorizontalHeaderLabels(headerLabels);
ui->settable->verticalHeader()->setVisible(false);
ui->settable->setColumnCount(4);
ui->settable->setStyleSheet("QScrollBar:vertical {"
" background: #ffffff;"
" width: 10px;"
" margin: 16px 0px 16px 0px;"
"}"
"QScrollBar::handle:vertical {"
" background: rgb(78, 79, 79);"
" min-height: 10px;"
"}"
"QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {"
" border: none;"
" background: none;"
"}"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {"
" background: none;"
"}"
"#settable{background-color:#ffffff;color:#000000;}"
"QTableWidget::item:selected {"
" background-color: #eeeeee;"
"color:#000000;"
"}");
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::getadList_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::getadList_readyRead_slot);
for (int row = 0; row < ui->settable->rowCount(); ++row) {
for (int col = 0; col < ui->settable->columnCount(); ++col) {
QTableWidgetItem *item = new QTableWidgetItem(QString("Row %1, Col %2").arg(row + 1).arg(col + 1));
item->setTextAlignment(Qt::AlignCenter);
}
}
}
void Home::openSetPage()
{
this->setWindowTitle("签到管理系统v1.0-设置");
ui->setmainframe->show();
ui->funcinput->show();
ui->addbtn->show();
ui->searchbtn->show();
ui->deletebtn->show();
ui->backbtn->show();
QStringList headerLabels;
headerLabels << "ID" << "姓名" << "添加时间";
ui->settable->setHorizontalHeaderLabels(headerLabels);
ui->settable->verticalHeader()->setVisible(false);
ui->settable->setColumnCount(3);
ui->settable->setColumnWidth(2, 500);
ui->settable->setStyleSheet("QScrollBar:vertical {"
" background: #ffffff;"
" width: 10px;"
" margin: 16px 0px 16px 0px;"
"}"
"QScrollBar::handle:vertical {"
" background: rgb(78, 79, 79);"
" min-height: 10px;"
"}"
"QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {"
" border: none;"
" background: none;"
"}"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {"
" background: none;"
"}"
"#settable{background-color:#ffffff;color:#000000;}"
"QTableWidget::item:selected {"
" background-color: #eeeeee;"
"color:#000000;"
"}");
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::getAllName_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::getAllName_readyRead_slot);
for (int row = 0; row < ui->settable->rowCount(); ++row) {
for (int col = 0; col < ui->settable->columnCount(); ++col) {
QTableWidgetItem *item = new QTableWidgetItem(QString("Row %1, Col %2").arg(row + 1).arg(col + 1));
item->setTextAlignment(Qt::AlignCenter);
}
}
}
void Home::on_callbtn_2_clicked()
{
closeAllpage();
openListPage();
}
void Home::on_callbtn_clicked()
{
closeAllpage();
openAdPage();
}
void Home::on_callbtn_3_clicked()
{
closeAllpage();
openSetPage();
}
void Home::on_callnamebtn_clicked()
{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::callname_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::callname_readyRead_slot);
}
void Home::on_addbtn_clicked()
{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::addname_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::addname_readyRead_slot);
}
void Home::on_deletebtn_clicked()
{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::deletename_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::deletename_readyRead_slot);
}
void Home::on_backbtn_clicked()
{
Widget *w = new Widget();
w->show();
this->close();
}
void Home::on_searchbtn_clicked()
{
socket = new QTcpSocket(this);
socket->connectToHost(ip,port);
connect(socket,&QTcpSocket::connected,this,&Home::searchname_connected_slot);
connect(socket,&QTcpSocket::readyRead,this,&Home::searchname_readyRead_slot);
}