ExamDialog.h:
#ifndef EXAMDIALOG_H
#define EXAMDIALOG_H
#include <QDialog>
#include<QTimer>
#include<QTextEdit>
#include<QLabel>
#include<QRadioButton>
#include<QCheckBox>
#include<QGridLayout>
#include<QButtonGroup>
class ExamDialog : public QDialog
{
Q_OBJECT
public:
ExamDialog(QWidget *parent = 0);
void initTimer();
void initLayout();
bool initTextEdit();
void initButtion();
bool hasNoSelect();
private slots:
void freshTime();
void getScore();
private:
QTimer *m_timer;
int m_timerGo;
QTextEdit *m_textEdit;
QLabel *m_labelLabels[10];
QRadioButton *m_radioBtns[32];
QCheckBox *m_cheBtns[4];
QRadioButton *m_radioA;
QRadioButton *m_radioB;
QGridLayout *m_layout;
QStringList m_answerList;
QButtonGroup *m_btnGroup[9];
};
#endif
ExamDialog.cpp
#include "examdialog.h"
#include<QFile>
#include<QTextStream>
#include<QMessageBox>
#include<QApplication>
#include<QPushButton>
ExamDialog::ExamDialog(QWidget *parent):QDialog(parent)
{
QFont font;
font.setPointSize(12);
setFont(font);
setPalette(QPalette(QColor(209,215,225)));
setWindowTitle("考试用时:0分0秒");
setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
resize(800,900);
initTimer();
initLayout();
if(!initTextEdit()){
QMessageBox::information(this,"提示","打开文件失败");
QTimer::singleShot(0,qApp,SLOT(quit()));
}
initButtion();
}
void ExamDialog::initTimer()
{
m_timerGo = 0;
m_timer = new QTimer(this);
m_timer->setInterval(1000);
m_timer->start();
connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()));
}
void ExamDialog::initLayout()
{
m_layout = new QGridLayout(this);
m_layout->setSpacing(10);
m_layout->setMargin(10);
}
bool ExamDialog::initTextEdit()
{
QString strLine;
QStringList strList;
QString filename("../exam.txt");
QFile file(filename);
QTextStream stream(&file);
stream.setCodec("UTF-8");
if(file.open(QIODevice::ReadOnly|QIODevice::Text)){
m_textEdit = new QTextEdit(this);
m_textEdit->setReadOnly(true);
QString strText;
int nLins=0;
while(!stream.atEnd()){
if(nLins == 0){
stream.readLine();
nLins++;
continue;
}
if((nLins>=6 && nLins<=6*9 && nLins%6==0)||nLins==6*9+4){
strLine = stream.readLine();
strList = strLine.split(" ");
m_answerList.append(strList.at(1));
strText += "\n";
nLins++;
continue;
}
strText += stream.readLine();
strText += "\n";
nLins++;
}
m_textEdit->setText(strText);
m_layout->addWidget(m_textEdit,0,0,1,10);
file.close();
return true;
}else{
return false;
}
}
void ExamDialog::initButtion()
{
QStringList strList = {"A","B","C","D"};
for(int i=0;i<10;i++){
m_labelLabels[i] = new QLabel(this);
m_labelLabels[i]->setText("第"+QString::number(i+1)+"题");
m_layout->addWidget(m_labelLabels[i],1,i);
if(i == 9){
m_radioA = new QRadioButton(this);
m_radioB = new QRadioButton(this);
m_radioA->setText("正确");
m_radioB->setText("错误");
m_layout->addWidget(m_radioA,2,9);
m_layout->addWidget(m_radioB,3,9);
m_btnGroup[8] = new QButtonGroup(this);
m_btnGroup[8]->addButton(m_radioA);
m_btnGroup[8]->addButton(m_radioB);
break;
}
if(i<8)m_btnGroup[i] = new QButtonGroup(this);
for(int j = 0;j < 4; j++){
if(i == 8){
m_cheBtns[j] = new QCheckBox(this);
m_cheBtns[j]->setText(strList.at(j));
m_layout->addWidget(m_cheBtns[j],2+j,8);
}else{
m_radioBtns[4 * i +j] = new QRadioButton(this);
m_radioBtns[4 * i +j]->setText(strList.at(j));
m_layout->addWidget(m_radioBtns[4 * i + j],2+j,i);
m_btnGroup[i]->addButton(m_radioBtns[4 * i + j]);
}
}
}
QPushButton *submitBtn = new QPushButton(this);
submitBtn->setText("提交");
submitBtn->setFixedSize(100,35);
connect(submitBtn,SIGNAL(clicked(bool)),this,SLOT(getScore()));
m_layout->addWidget(submitBtn,6,9);
}
bool ExamDialog::hasNoSelect()
{
int radioSelects = 0;
for(int i = 0; i < 8; i++){
if(m_btnGroup[i]->checkedButton())
radioSelects++;
}
if(radioSelects != 8){
return true;
}
int checkSelect = 0;
for(int i = 0; i < 4; i++){
if(m_cheBtns[i]->isChecked())
checkSelect++;
}
if(checkSelect ==0 || checkSelect == 1)
return true;
if(!m_radioA->isChecked() && !m_radioB->isChecked())
return true;
return false;
}
void ExamDialog::freshTime()
{
m_timerGo++;
QString min = QString::number(m_timerGo / 60);
QString sec = QString::number(m_timerGo % 60);
setWindowTitle("考试用时:"+min+"分"+sec+"秒");
}
void ExamDialog::getScore()
{
if(hasNoSelect()){
QMessageBox::information(this,"提示","还有题目未做完,请继续!");
return;
}
int score = 0 ;
for(int i = 0; i < 10 ; i++){
if(i < 8){
if(m_btnGroup[i]->checkedButton()->text() == m_answerList.at(i)){
score+=10;
}
}
if(i == 8){
QString answer = m_answerList.at(i);
bool hasA = answer.contains("A")?true:false;
bool hasB = answer.contains("B")?true:false;
bool hasC = answer.contains("C")?true:false;
bool hasD = answer.contains("D")?true:false;
bool checkA = m_cheBtns[0]->checkState();
bool checkB = m_cheBtns[1]->checkState();
bool checkC = m_cheBtns[2]->checkState();
bool checkD = m_cheBtns[3]->checkState();
if(hasA != checkA)continue;
if(hasB != checkB)continue;
if(hasC != checkC)continue;
if(hasD != checkD)continue;
score += 10;
}
if(i ==9){
if(m_btnGroup[8]->checkedButton()->text() == m_answerList.at(i)){
score += 10;
}
}
}
QString str = "你的分数是:"+QString::number(score)+"分,是否重新考试";
int res = QMessageBox::information(this,"提示",str,QMessageBox::Yes|QMessageBox::No);
if(res==QMessageBox::Yes){
return;
}else{
close();
}
}
loginDia.h
#ifndef LOGINDIA_H
#define LOGINDIA_H
#include<QDialog>
namespace Ui {
class loginDia;
}
class loginDia : public QDialog
{
Q_OBJECT
public:
explicit loginDia(QWidget *parent = 0);
~loginDia();
private slots:
void on_loginButton_clicked();
void on_calcelButton_clicked();
private:
Ui::loginDia *ui;
};
#endif
loginDia.cpp
#include "logindia.h"
#include "ui_logindia.h"
#include<QMessageBox>
#include<QFile>
#include<QTextStream>
loginDia::loginDia(QWidget *parent) :
QDialog(parent),
ui(new Ui::loginDia)
{
ui->setupUi(this);
setFixedSize(width(),height());
ui->png->setScaledContents(true);
resize(ui->png->width(),ui->png->height());
setWindowTitle("科目一考试系统");
setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
}
loginDia::~loginDia()
{
}
void loginDia::on_loginButton_clicked()
{
QRegExp rx("^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$");
bool res = rx.exactMatch(ui->accontEdit->text());
if(res){
QString filename = "../accont.txt";
QString strAccInput;
QString strCode;
QString strLine;
QStringList strList;
strAccInput = ui->accontEdit->text();
strCode = ui->passwordEdit->text();
QFile file(filename);
QTextStream stream(&file);
if(file.open(QIODevice::ReadOnly|QIODevice::Text)){
while(!stream.atEnd()){
strLine = stream.readLine();
strList = strLine.split(",");
if(strAccInput == strList.at(0))
if(strCode == strList.at(1)){
QMessageBox::information(this,"提示","欢迎登陆驾考科目一系统");
file.close();
done(Accepted);
return;
}else{
QMessageBox::information(this,"提示","密码错误!");
ui->passwordEdit->clear();
ui->passwordEdit->setFocus();
file.close();
return;
}
QMessageBox::information(this,"提示","账号输入有误请重新输入");
ui->accontEdit->clear();
ui->accontEdit->setFocus();
ui->passwordEdit->clear();
file.close();
return;
}
}else{
QMessageBox::information(this,"提示","打开文件失败");
return;
}
}else{
QMessageBox::information(this,"提示","输入非法邮箱请重新输入");
ui->accontEdit->clear();
ui->accontEdit->setFocus();
ui->passwordEdit->clear();
return;
}
}
void loginDia::on_calcelButton_clicked()
{
done(Rejected);
}
main.cpp
#include "logindia.h"
#include <QApplication>
#include"examdialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
loginDia logindia;
int res = logindia.exec();
if(res == QDialog::Accepted){
ExamDialog *examDialog;
examDialog = new ExamDialog;
examDialog->show();
}else{
return 0;
}
return a.exec();
}