Список використаної літератури

Зміст

1. Вступ. 4

2. Теоретичні відомості 5

Короткі відомості про оригінальний додаток. 5

Опис програми. 5

3. Опис класів та їх ієрархія. 12

Клас контактів. 12

Клас справ. 13

Клас головного вікна. 15

Реалізація програми у відповідних класам файлах. 18

4. Висновок. 34

5. Список використаної літератури. 35

 

 

 


Вступ

Метою цієї роботи є розробка програмного забезпечення із графічним інтерфейсом користувача із використанням бібліотеки Qt.

Qt – це крос-платформовий інструментарій для розробки додатків з графічним інтерфейсом мовою програмування С++. Також може бути використаним в інших мовах, таких як Ada (QtAda), C# (Qyoto/Kimono), Java (Qt Jambi), Qt Jambi, Pascal, Perl, PHP (PHP-Qt), Ruby (QtRuby), та Python (PyQt,PySide).

Qt дозволяє запускати написане з його допомогою ПЗ в більшості сучасних операційних систем шляхом простої компіляції програми для кожної ОС без зміни початкового коду. Включає в себе всі основні класи, які можуть знадобитися при розробці прикладного програмного забезпечення, починаючи від елементів графічного інтерфейсу і закінчуючи класами для роботи з мережею, базами даних і XML. Qt є повністю об'єктно-орієнтованим, легко розширюваним і підтримуючим техніку компонентного програмування.

Qt використовується в Autodesk Maya, Adobe Photoshop Elements, OPIE, Skype, Медиапроигрыватель VLC, VirtualBox, і Mathematica, и на European Space Agency, DreamWorks, Google, HP, KDE, Lucasfilm, Panasonic, Philips, Samsung, Siemens, Volvo і  Walt Disney Animation Studios.

Qt надає програмісту не тільки зручний набір бібліотек класів, а й певну модель розробки додатків, певний каркас їх структури. Проходження принципам і правилам «хорошого стилю програмування на C ++ / Qt» істотно знижує частоту таких важко відловлюють помилок в додатках, як витоку пам'яті, необроблені виключення, незакриті файли або незвільнені дескриптори ресурсних об'єктів.

 

 

Теоретичні відомості

Короткі відомості про оригінальний додаток

Тестування, у соьгоденні, - це одна із основних форм моніторингу за певними властивостями різних груп людей. Кожна людина хоча б раз у житті проходила тест, може колись у школі, може вчора, а може, навіть і в даний момент. Адже тести – це найшвидший спосіб моніторингу. Тому зараз є дуже популярні програми,  які дозволяють складати, редагувати та проходити тест.

Опис програми

Програма розроблена у середовищі Qt, мовою С++ .

При запуску програми з’явиться головне вікно, де спочатку доступні строки авторизації, кнопка «ok» ( для авторизації), та кнопка «Close» (для припинення роботи програми).

 

    Роботу програми можна умовно розділити на два режими: “teacher”

, “student”.

Почнемо з режиму “teacher”. Щоб активувати цей режим, потрібно у першу строку ввести користувача “master”, а у наступну – пароль “neznau”, та натиснути кнопку “ok”. Якщо авторизація пройшла вдало, напис “TextLabel” зміниться на “teacher”.

 

Також, стали доступні кнопки “results”, “Create new test”, “Test search”.

При натисканні на “results”, з’являється вікно, де показано всі користувачі, які проходили будь-який тест у цій програмі, та їх результати у вигляді таблиці. При натисканні кнопки “Clean”, всі записи з таблиці назавжди видаляються, а - “Close” , вікно закривається,

При натисканні кнопки “Create new test”, розпочинається процес створення нового тесту.

Поперше відкривається нове вікно , де, спочатку, недуступна кнопка «ок», вона стає доступна, при вводі назви тесту. Після назви, слід вибрати тип питання, яке буде йти у тксті першим: питання з 4-ма варіантами відповіді(1 type), питання на правдивість висловлювання(2 type), питання з ручним вводом відповіді( 3 type); та натиснути кнопку “ok” для продовження створення тесту. Залежно від вибраного типу може з’явитися 3 різні вікна.

У всіх трьох типів вікон є спільні кнопки: “1 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 1-го типу), “2 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 2-го типу),“3 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 3-го типу), “close”(не зберігає дані та закриває вікно); спільні віджети : слайдер, спін бокс(зміна складності питання), поле вводу для самого питання. А різне:

 

1. Вікно для першого типу питань, має 4 поля вводу для кожного із варіантів, мітки для мітки правильної відповіді.

 

2. Вікно для другого типу питань має дві мітки для двох можливих відповідей (Так, Ні).

 

 

3. Вікно для третього типу питань має поле для вводу правильної відповіді на питання.

 

При натисканні у головному меню кнопки “Test search”, з’явиться вікно для вибору одного із створених тесті, тест вибирається при натискань на один із наявних у таблиці.

 

 

Після обрання тесту він стає активним, вікно тестів закривається, а у головному вікні з’являється напис з активним тестом. Також стають доступними кнопки “show quetions”, “delete test”, “Start”.

 

При натисканні на “delete test”, активний тест буде видалений і з’явиться відповідне повідомлення сатиристичного характеру, яке містить «відсилки», на певний продукт художньої творчості.

 

Також кнопки “show quetions”, “delete test”, “Start” знов стануть недоступні, до вибору наступного активного тесту.

При натисканні на “show quetions”, з’явиться вікно зтаблицею, де в лівій колонці записані питання, а в правій типи цих питань. При виборі одного з питань кнопка “delete” стає доступна, і при натисканні її обране питання видаляється.

 

При натисканні на “Start”, починається активне тестування і залежно від тесту може відкритися 3 типи вікон для кожного із типів питань. У першому та другому типі питань відповіді користувача вводяться мітками, а у третьому типі - з клавіатури.

1-ий тип

 

2-ий тип

3-ій тип

 

 

Кнопка “Next” переходить до наступного питання, якщо вони не закінчилися, або видає результат проходження тесту користувачем, в іншому випадку.

 

Кнопка “Close” достроково припиняє тест видає результат проходження тесту користувачем, до даного питання включно.

 

 Щоб активувати режим “student”, потрібно у першу строку ввести ім’я користувача , а у наступну можна залишити порожньою, та натиснути кнопку “ok”. Якщо авторизація пройшла вдало, напис “TextLabel” зміниться на “student”.

 

Логіка режиму “student”відрізняється від режиму “teacher”, недоступністю кнопок “show quetions”, “delete test”, “results”, “Create new test”.

    Всі функції обраного додатку розглянуто, усі орфографічні помилки у написах слід вважати способом захисту авторських прав.

 

Опис класів

 

#ifndef ALLTESTS_H

#define ALLTESTS_H

 

#include <QDialog>

#include "creatortest.h"

#include <QLabel>

 

namespace Ui {

class allTests;

}

 

class allTests : public QDialog

{

Q_OBJECT

   

public:

explicit allTests(QWidget *parent = 0);

~allTests();

   

private slots:

void on_pushButton_clicked();

 

void on_table_cellClicked(int row, int column);

 

private:

Ui::allTests *ui;

 

signals:

void refresh();

};

 

#endif // ALLTESTS_H

#include "alltests.h"

#include "ui_alltests.h"

 

allTests::allTests(QWidget *parent) :

QDialog(parent),

ui(new Ui::allTests)

{

ui->setupUi(this);

 

creator_test *ct = new creator_test;

vector<string> xx = ct->show_alltest();

 

ui->table->setRowCount(xx.size());

 

QLabel *label;

for(int i=0; i < xx.size(); i++)

{

   QString zz = QString::fromStdString(xx[i]);

   label = new QLabel;

   label->setText(zz);

   ui->table->setCellWidget(i, 0, label);

}

 

 

delete ct;

 

connect(this, SIGNAL(refresh()), this->parent(), SLOT(onrefresh()));

}

 

allTests::~allTests()

{

delete ui;

}

 

void allTests::on_pushButton_clicked()

{

this->close();

}

 

void allTests::on_table_cellClicked(int row, int column)

{

creator_test *ct = new creator_test;

vector<string> xx = ct->show_alltest();

 

ofstream q("buf1.txt");

 

q<<xx[row];

 

q.close();

 

delete ct;

 

emit refresh();

 

this->close();

}

 

#ifndef CREATENAME_H#define CREATENAME_H #include <QDialog>#include "creatortest.h"#include "qation1f.h"#include "qation2f.h"#include "qation3f.h" namespace Ui {class createName;} class createName : public QDialog{ Q_OBJECT public: explicit createName(QWidget *parent = 0); ~createName(); private slots: void on_pushButton_2_clicked(); void on_pushButton_clicked(); void on_lineEdit_textChanged(const QString &arg1); private: Ui::createName *ui;}; #endif // CREATENAME_H#include "createname.h"#include "ui_createname.h" createName::createName(QWidget *parent) : QDialog(parent), ui(new Ui::createName){ ui->setupUi(this);} createName::~createName(){ delete ui;} void createName::on_pushButton_2_clicked(){ this->close();} void createName::on_pushButton_clicked(){ creator_test *ct=new creator_test; ct->creator_name(ui->lineEdit->text().toStdString()); delete ct; if (ui->radioButton->isChecked()) {   qation1f *q1f=new qation1f(this, ui->lineEdit->text().toStdString()); q1f->show(); } else if (ui->radioButton_2->isChecked()) {   qation2f *q2f=new qation2f(this, ui->lineEdit->text().toStdString());   q2f->show(); } else if (ui->radioButton_3->isChecked()) {   qation3f *q3f=new qation3f(this, ui->lineEdit->text().toStdString());   q3f->show(); } this->close();} void createName::on_lineEdit_textChanged(const QString &arg1){ ui->pushButton->setEnabled(arg1.toStdString().length());}

 

 

#ifndef CREATORTEST_H#define CREATORTEST_H #include <fstream>#include <vector>#include <cstdlib>#include "qation.h"#include "qation1.h"#include "qation2.h"#include "qation3.h" using namespace std; class creator_test{ private:    string name;    qation1 q1;    qation2 q2;    qation3 q3; public:    void set_name(string nev);    void set_q1(string nam,double g,int i, string nev1, string nev2, string nev3, string nev4);    void set_q2(string nam,double d,int i);    void set_q3(string nam,double d,string nev);     void creator_name(string txt);    int search_name(string txt);     void add_q1(string txt);    void add_q2(string txt);    void add_q3(string txt);     vector<string> show_alltest();    vector<string> show_all(string txt);    vector<string> show_allque(string txt);     qation1 load_q1(string txt,int n);    qation2 load_q2(string txt,int n);    qation3 load_q3(string txt,int n);    string load_q(string txt,int n);     void del_test(string txt);    void del_q(string txt,int n);     string get_name();    qation1 get_q1();    qation2 get_q2();    qation3 get_q3(); }; #endif

#include "creatortest.h"

 

void creator_test::set_name(string nev){name=nev;}

 

    void creator_test::set_q1(string nam,double g,int i, string nev1, string nev2, string nev3, string nev4){

         q1.set_variant(0,nev1);

         q1.set_variant(1,nev2);

         q1.set_variant(2,nev3);

         q1.set_variant(3,nev4);

         q1.set_correct(i);

         q1.set_question(nam);

         q1.set_dif(g);

         }

    void creator_test::set_q2(string nam,double d,int i){

         q2.set_correct(i);

         q2.set_question(nam);

         q2.set_dif(d);

         }

 

    void creator_test::set_q3(string nam,double d,string nev){

         q3.set_correct(nev);

         q3.set_question(nam);

         q3.set_dif(d);

         }

 

    string creator_test::get_name(){return name;}

    qation1 creator_test::get_q1(){return q1;}

    qation2 creator_test::get_q2(){return q2;}

    qation3 creator_test::get_q3(){return q3;}

 

int creator_test::search_name(string txt){

int h=0;

char buffer[150];

ifstream f("alltest.txt");

if(!f){

   cout<<"ne otkril-"<<"alltest.txt";

   }

   while (true){

   f.getline(buffer,150,'\n');

   if(txt==buffer) h=1;

   if (f.eof()) break;

         }

   f.close();

return h;

}

 

void creator_test::creator_name(string txt){

char buffer[150];

set_name(txt);

string zz=txt+".txt";

ofstream d(zz.c_str());

      if(!d){

        cout<<"ne otkril-"<<zz;

        }

 

 

d<<txt<<"\n";

 d.close();

 

int h=search_name(txt);

  if (h==0){

  ofstream k("alltest.txt",ios::app);

if(!k){

   cout<<"ne otkril-"<<"alltest.txt";

   }

    k<<txt<<"\n";

    k.close();}

}

 

void creator_test::add_q1(string txt)

{ string zz=txt+".txt";

ofstream k(zz.c_str(),ios::app);

if(!k){

   cout<<"ne otkril-"<<zz;

   }

   k<<"q1"<<"\n";

   k<<q1.get_question()<<"\n";

   k<<q1.get_correct()<<"\n";

   k<<q1.get_dif()<<"\n";

   k<<q1.get_variant(0)<<"\n";

   k<<q1.get_variant(1)<<"\n";

   k<<q1.get_variant(2)<<"\n";

   k<<q1.get_variant(3)<<"\n";

   k.close();

   }

 

void creator_test::add_q2(string txt)

{ string zz=txt+".txt";

ofstream k(zz.c_str(),ios::app);

if(!k){

   cout<<"ne otkril-"<<zz;

   }

   k<<"q2"<<"\n";

   k<<q2.get_question()<<"\n";

   k<<q2.get_correct()<<"\n";

   k<<q2.get_dif()<<"\n";

   k.close();

   }

 

void creator_test::add_q3(string txt)

{

string zz=txt+".txt";

ofstream k(zz.c_str(),ios::app);

if(!k){

   cout<<"ne otkril-"<<zz;

   }

   k<<"q3"<<"\n";

   k<<q3.get_question()<<"\n";

   k<<q3.get_correct()<<"\n";

   k<<q3.get_dif()<<"\n";

   k.close();

   }

 

 

vector<string> creator_test::show_alltest(){

vector<string> ss;

string BUF;

char buffer[150];

ifstream k("alltest.txt");

if(!k){

   cout<<"ne otkril-"<<"alltest.txt";

   }

while (true){

    k.getline(buffer,150,'\n');

    if (k.eof()) break;

    ss.push_back(buffer);

    }

k.close();

return ss;

          }

 

vector<string> creator_test::show_all(string txt){

vector<string> ss;

char buffer[150];

txt=txt+".txt";

ifstream k(txt.c_str());

if(!k){

   cout<<"ne otkril-"<<"alltest.txt";

   }

 

while (true){

    k.getline(buffer,150,'\n');

    if (k.eof()) break;

    ss.push_back(buffer);

    }

 

k.close();

return ss;

}

 

vector<string> creator_test::show_allque(string txt){

vector<string> zz=show_all(txt);

 vector<string> ss;

 for (int i=0; i<zz.size(); i++)

 { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){ss.push_back(zz[i]);ss.push_back(zz[i+1]);}

}

 return ss;

}

 

qation1 creator_test::load_q1(string txt,int n){

int k=0;

vector<string> zz=show_all(txt);

 for (int i=0; i<zz.size(); i++)

 { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){

if (k==n){

int z=atoi( zz[i+2].c_str() );

double f=atoi( zz[i+3].c_str());

set_q1(zz[i+1],f,z,zz[i+4],zz[i+5],zz[i+6],zz[i+7]);

return q1;

}

k++;

}

}

}

 

 

 qation2 creator_test::load_q2(string txt,int n){

int k=0;

vector<string> zz=show_all(txt);

 for (int i=0; i<zz.size(); i++)

 { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){

if (k==n){

int z=atoi( zz[i+2].c_str() );

double f=atoi( zz[i+3].c_str());

set_q2(zz[i+1],f,z);

return q2;

}

k++;

}

}

}

 

 qation3 creator_test::load_q3(string txt,int n){

int k=0;

vector<string> zz=show_all(txt);

 for (int i=0; i<zz.size(); i++)

 { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){

if (k==n){

double f=atoi( zz[i+3].c_str());

set_q3(zz[i+1],f,zz[i+2]);

return q3;

}

k++;

}

}

}

 

 

string creator_test::load_q(string txt,int n){

int k=0;

vector<string> zz=show_all(txt);

 for (int i=0; i<zz.size(); i++)

 { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){

if ((k==n)&&(zz[i]=="q3")){

double f=atoi( zz[i+3].c_str());

set_q3(zz[i+1],f,zz[i+2]);

return "q3";

}

else if ((k==n)&&(zz[i]=="q2")){

int z=atoi( zz[i+2].c_str() );

double f=atoi( zz[i+3].c_str());

set_q2(zz[i+1],f,z);

return "q2";

     }

else if ((k==n)&&(zz[i]=="q1")){

int z=atoi( zz[i+2].c_str() );

double f=atoi( zz[i+3].c_str());

set_q1(zz[i+1],f,z,zz[i+4],zz[i+5],zz[i+6],zz[i+7]);

return "q1";

     }

k++;

}

}

  }

 

 

 void creator_test::del_test(string txt){

 string buffer;

ifstream k("alltest.txt");

if(!k){

   cout<<"ne otkril-"<<"alltest.txt";

   }

ofstream d("buffalltest.txt");

if(!d){

   cout<<"ne otkril-"<<"buffalltest.txt";

   }

while (true){

    getline(k, buffer);

    if (k.eof()) break;

    if (buffer!=txt){

    d<<buffer<<endl;

    }

    }

d.close();

k.close();

 

ifstream k1("buffalltest.txt");

if(!k1){

   cout<<"ne otkril-"<<"buffalltest.txt";

   }

ofstream d1("alltest.txt");

if(!d1){

   cout<<"ne otkril-"<<"alltest.txt";

   }

while (true){

    getline(k1, buffer);

    if (k1.eof()) break;

    d1<<buffer<<endl;

    }

d1.close();

k1.close();

 

 

remove("bufalltest.txt");

buffer = txt + ".txt";

remove(buffer.c_str());

}

 

 void creator_test::del_q(string txt,int n){

int k=0;

vector<string> zz=show_all(txt);

vector<string> ss;

int fl=0;

for (int i=0; i<zz.size(); i++)

 {

if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){

fl=0;

if (n==k) fl=1;

k++;

}

if (fl==0)

ss.push_back(zz[i]);

}

txt=txt+".txt";

ofstream d1(txt.c_str());

if(!d1){

   cout<<"ne otkril-"<<txt;

   }

 

 

for (int i=0; i<ss.size(); i++){

    d1<<ss[i]<<"\n";

    }

d1.close();

}

 

 

#ifndef DELQ_H#define DELQ_H #include <QDialog>#include <creatortest.h>#include <QLabel> namespace Ui {class DelQ;} class DelQ : public QDialog{ Q_OBJECT public: explicit DelQ(QWidget *parent = 0, string newname=0); ~DelQ(); private slots: void on_closeButt_clicked(); void on_table_cellClicked(int row, int column); void on_delButt_clicked(); signals: void delqsig(); private: Ui::DelQ *ui; string name; int delrow;}; #endif // DELQ_H#include "delq.h"#include "ui_delq.h" DelQ::DelQ(QWidget *parent, string newname) : QDialog(parent), ui(new Ui::DelQ){ ui->setupUi(this); connect(this, SIGNAL(delqsig()), this->parent(), SLOT(delqcall())); name = newname; creator_test *ct = new creator_test; vector<string> xx = ct->show_allque(name); ui->table->setRowCount(xx.size()/2); QLabel *label; for(int i=1; i < xx.size(); i+=2) {   QString zz = QString::fromStdString(xx[i]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/2, 0, label);    zz = QString::fromStdString(xx[i-1]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/2, 1, label); } delete ct;} DelQ::~DelQ(){ delete ui;} void DelQ::on_closeButt_clicked(){ this->close();} void DelQ::on_table_cellClicked(int row, int column){ ui->delButt->setEnabled(true); delrow = row;} void DelQ::on_delButt_clicked(){ creator_test *ct = new creator_test; ct->del_q(name, delrow); delete ct; emit delqsig(); this->close();}

 

 

#ifndef DOQ1_H#define DOQ1_H #include <QDialog>#include "doq2.h"#include "doq3.h"#include "qation1.h"#include <dotest.h> namespace Ui {class doq1;} class doq1 : public QDialog{ Q_OBJECT public: explicit doq1(QWidget *parent = 0, string txt=0, int i=0, double d=0); ~doq1(); private slots: void on_closeButt_clicked(); void on_nextButt_clicked(); private: Ui::doq1 *ui; string name; int nom; double diff;}; #endif // DOQ1_H#include "doq1.h"#include "ui_doq1.h" doq1::doq1(QWidget *parent, string txt, int i, double d) : QDialog(parent), ui(new Ui::doq1){ ui->setupUi(this); name = txt; nom = i; diff=d; dotest *dt=new dotest; string ss=dt->load_q(name, nom-1); qation1 *q1 = new qation1; *q1 = dt->get_q1(); ui->textBrowser->setText(QString::fromStdString(q1->get_question())); ui->textBrowser_2->setText(QString::fromStdString(q1->get_variant(0))); ui->textBrowser_3->setText(QString::fromStdString(q1->get_variant(1))); ui->textBrowser_4->setText(QString::fromStdString(q1->get_variant(2))); ui->textBrowser_5->setText(QString::fromStdString(q1->get_variant(3))); delete q1; delete dt;} doq1::~doq1(){ delete ui;} void doq1::on_closeButt_clicked(){ dotest *dt = new dotest; this->close(); stringstream qq; qq<<diff; string s,s1; qq>>s; qq.clear(); qq<<dt->do_max(name); qq>>s1; QMessageBox done; string ggh="End, your marck: "+ s+" from "+s1; done.setText(ggh.c_str()); done.addButton(QMessageBox::Ok); done.exec(); delete dt;} void doq1::on_nextButt_clicked(){ dotest *dt0 = new dotest; dotest *dt = new dotest; int t; if (ui->radioButton->isChecked()) t=0; else if (ui->radioButton_1->isChecked()) t=1; else if (ui->radioButton_2->isChecked()) t=2; else if (ui->radioButton_3->isChecked()) t=3; string ss=dt0->load_q(name, nom-1); qation1 *q1 = new qation1; *q1 = dt0->get_q1(); delete q1; double d4=diff; if (t==q1->get_correct()) d4=d4+q1->get_dif(); delete dt0; if(dt->do_size(name)-nom) {   if (dt->load_q(name, nom)=="q1")   {       doq1 *d1 = new doq1(this, name, nom+1,d4);       d1->show();   }    else if (dt->load_q(name, nom)=="q2")   {       doq2 *d2 = new doq2(this, name, nom+1,d4);       d2->show();   }   else if (dt->load_q(name, nom)=="q3")   {       doq3 *d3 = new doq3(this, name, nom+1,d4);       d3->show();   } } else {   stringstream qq;   qq<<d4;   string s;   qq>>s;   dt->user_v_fail(s);    qq.clear();   s.clear();   qq<<dt->do_max(name);   qq>>s;   dt->user_v_fail(s); } this->close(); if(!(dt->do_size(name)-nom)) {   stringstream qq;   qq<<d4;   string s,s1;   qq>>s;    qq.clear();   qq<<dt->do_max(name);   qq>>s1;    QMessageBox done;   string ggh="End, your marck: "+ s+" from "+s1;   done.setText(ggh.c_str());   done.addButton(QMessageBox::Ok);   done.exec(); } delete dt;}

 

 

#ifndef DOQ2_H#define DOQ2_H #include <QDialog>#include "doq1.h"#include "doq3.h"#include "qation2.h"#include <dotest.h> namespace Ui {class doq2;} class doq2 : public QDialog{ Q_OBJECT public: explicit doq2(QWidget *parent = 0, string txt=0, int i=0,double d=0); ~doq2(); private slots: void on_closeButt_clicked(); void on_nextButt_clicked(); private: Ui::doq2 *ui; string name; int nom; double diff;}; #endif // DOQ2_H#include "doq2.h"#include "ui_doq2.h" doq2::doq2(QWidget *parent, string txt, int i,double d) : QDialog(parent), ui(new Ui::doq2){ ui->setupUi(this); name = txt; nom = i; diff=d; dotest *dt=new dotest; string ss=dt->load_q(name, nom-1); qation2 *q2 = new qation2; *q2 = dt->get_q2(); ui->textBrowser->setText(QString::fromStdString(q2->get_question())); delete q2; delete dt;} doq2::~doq2(){ delete ui;} void doq2::on_closeButt_clicked(){ dotest *dt = new dotest; this->close(); stringstream qq; qq<<diff; string s,s1; qq>>s; qq.clear(); qq<<dt->do_max(name); qq>>s1; QMessageBox done; string ggh="End, your marck: "+ s+" from "+s1; done.setText(ggh.c_str()); done.addButton(QMessageBox::Ok); done.exec(); delete dt;} void doq2::on_nextButt_clicked(){ dotest *dt0 = new dotest; dotest *dt = new dotest; int t; if (ui->radioButton->isChecked()) t=1; else if (ui->radioButton_2->isChecked()) t=0; string ss=dt0->load_q(name, nom-1); qation2 *q1 = new qation2; *q1 = dt0->get_q2(); double d4=diff; if (t==q1->get_correct()) d4=d4+q1->get_dif(); delete q1; delete dt0; if(dt->do_size(name)-nom) {   if (dt->load_q(name, nom)=="q1")   {       doq1 *d1 = new doq1(this, name, nom+1,d4);       d1->show();   }   else if (dt->load_q(name, nom)=="q2")   {       doq2 *d2 = new doq2(this, name, nom+1,d4);       d2->show();   }    else if (dt->load_q(name, nom)=="q3")   {       doq3 *d3 = new doq3(this, name, nom+1,d4);       d3->show();   } } else {   stringstream qq;   qq<<d4;   string s;   qq>>s;   dt->user_v_fail(s);    qq.clear();   qq<<dt->do_max(name);   qq>>s;   dt->user_v_fail(s); } this->close(); if(!(dt->do_size(name)-nom)) {   stringstream qq;   qq<<d4;   string s,s1;   qq>>s;    qq.clear();   qq<<dt->do_max(name);   qq>>s1;    QMessageBox done;   string ggh="End, your marck: "+ s+" from "+s1;   done.setText(ggh.c_str());   done.addButton(QMessageBox::Ok);   done.exec(); } delete dt;}

 

#ifndef DOQ3_H#define DOQ3_H #include <QDialog>#include "doq1.h"#include "doq2.h"#include "qation3.h"#include <dotest.h> namespace Ui {class doq3;} class doq3 : public QDialog{ Q_OBJECT public: explicit doq3(QWidget *parent = 0, string txt=0, int i=0,double d=0); ~doq3(); private slots: void on_closeButt_clicked(); void on_nextButt_clicked(); private: Ui::doq3 *ui; string name; int nom; double diff;}; #endif // DOQ3_H#include "doq3.h"#include "ui_doq3.h" doq3::doq3(QWidget *parent, string txt, int i,double d) : QDialog(parent), ui(new Ui::doq3){ ui->setupUi(this); name = txt; nom = i; diff=d; dotest *dt=new dotest; string ss=dt->load_q(name, nom-1); qation3 *q3 = new qation3; *q3 = dt->get_q3(); ui->textBrowser->setText(QString::fromStdString(q3->get_question())); delete q3; delete dt;} doq3::~doq3(){ delete ui;} void doq3::on_closeButt_clicked(){ dotest *dt = new dotest; this->close(); stringstream qq; qq<<diff; string s,s1; qq>>s; qq.clear(); qq<<dt->do_max(name); qq>>s1; QMessageBox done; string ggh="End, your marck: "+ s+" from "+s1; done.setText(ggh.c_str()); done.addButton(QMessageBox::Ok); done.exec(); delete dt;} void doq3::on_nextButt_clicked(){ dotest *dt0 = new dotest; dotest *dt = new dotest; string ss=dt0->load_q(name, nom-1); ss=ui->lineEdit->text().toStdString(); qation3 *q1 = new qation3; *q1 = dt0->get_q3(); double d4=diff; if (ss==q1->get_correct()) d4=d4+q1->get_dif(); delete q1; delete dt0; if(dt->do_size(name)-nom) {   if (dt->load_q(name, nom)=="q1")   {       doq1 *d1 = new doq1(this, name, nom+1,d4);       d1->show();   }   else if (dt->load_q(name, nom)=="q2")   {       doq2 *d2 = new doq2(this, name, nom+1,d4);       d2->show();   }   else if (dt->load_q(name, nom)=="q3")   {       doq3 *d3 = new doq3(this, name, nom+1,d4);       d3->show();   } } else {   stringstream qq;   qq<<d4;   string s;   qq>>s;   dt->user_v_fail(s);   qq.clear();   qq<<dt->do_max(name);   qq>>s;   dt->user_v_fail(s); } this->close(); if(!(dt->do_size(name)-nom)) {   stringstream qq;   qq<<d4;   string s,s1;   qq>>s;    qq.clear();   qq<<dt->do_max(name);   qq>>s1;    QMessageBox done;   string ggh="End, your marck: "+ s+" from "+s1;   done.setText(ggh.c_str());   done.addButton(QMessageBox::Ok);   done.exec(); } delete dt;}

 

 

#ifndef DOTEST_H#define DOTEST_H #include <fstream>#include <vector>#include <cstdlib>#include "qation.h"#include "qation1.h"#include "qation2.h"#include "qation3.h" using namespace std; class dotest { private:    string name;    qation1 q1;    qation2 q2;    qation3 q3;    int tsize; public:    void set_name(string nev);    void set_q1(string nam,double g,int i, string nev1, string nev2, string nev3, string nev4);    void set_q2(string nam,double d,int i);    void set_q3(string nam,double d,string nev);    void set_tsize(int nev);     string load_q(string txt,int n);    vector<string> show_all(string txt);    int do_size(string txt);    double do_dif(string txt);     void user_v_fail(string txt);    double do_max(string txt);     string get_name();    qation1 get_q1();    qation2 get_q2();    qation3 get_q3();    int get_tsize();    }; #endif // DOTEST_H#include "dotest.h" void dotest::set_name(string nev){name=nev;}    void dotest::set_tsize(int nev){tsize=nev;}     void dotest::set_q1(string nam,double g,int i, string nev1, string nev2, string nev3, string nev4){         q1.set_variant(0,nev1);         q1.set_variant(1,nev2);         q1.set_variant(2,nev3);         q1.set_variant(3,nev4);         q1.set_correct(i);         q1.set_question(nam);         q1.set_dif(g);         }    void dotest::set_q2(string nam,double d,int i){         q2.set_correct(i);         q2.set_question(nam);         q2.set_dif(d);         }     void dotest::set_q3(string nam,double d,string nev){         q3.set_correct(nev);         q3.set_question(nam);         q3.set_dif(d);         }     string dotest::get_name(){return name;}    qation1 dotest::get_q1(){return q1;}    qation2 dotest::get_q2(){return q2;}    qation3 dotest::get_q3(){return q3;}    int dotest::get_tsize(){return tsize;}    string dotest::load_q(string txt,int n){int k=0;vector<string> zz=show_all(txt); for (int i=0; i<zz.size(); i++) { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){ if ((k==n)&&(zz[i]=="q3")){ double f=atoi( zz[i+3].c_str()); set_q3(zz[i+1],f,zz[i+2]); return "q3"; } else if ((k==n)&&(zz[i]=="q2")){ int z=atoi( zz[i+2].c_str() ); double f=atoi( zz[i+3].c_str()); set_q2(zz[i+1],f,z); return "q2";     } else if ((k==n)&&(zz[i]=="q1")){ int z=atoi( zz[i+2].c_str() ); double f=atoi( zz[i+3].c_str()); set_q1(zz[i+1],f,z,zz[i+4],zz[i+5],zz[i+6],zz[i+7]); return "q1";     } k++; } }  }    vector<string> dotest::show_all(string txt){vector<string> ss;string BUF;char buffer[150];txt=txt+".txt";ifstream k(txt.c_str());if(!k){   cout<<"ne otkril-"<<"alltest.txt";   } while (true){    k.getline(buffer,150,'\n');    if (k.eof()) break;    ss.push_back(buffer);    } k.close(); return ss;} int dotest::do_size(string txt){ int k=0;vector<string> zz=show_all(txt); for (int i=0; i<zz.size(); i++) if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")) k++; set_tsize(k); return k; } double dotest::do_dif(string txt){ double k=0;vector<string> zz=show_all(txt); for (int i=0; i<zz.size(); i++) if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")) k+=(double)atoi(zz[i+3].c_str()); return k; } void dotest::user_v_fail(string txt){ ofstream k("users.txt", ios::app); if(!k)   cout<<"ne otkril-"<<"users.txt"; k<<txt<<endl; k.close();} double dotest::do_max(string txt){ double d=0; vector<string> zz=show_all(txt); for (int i=0; i<zz.size(); i++) { if((zz[i]=="q1")||(zz[i]=="q2")||(zz[i]=="q3")){       d+=(double)atoi(zz[i+3].c_str());   }   } return d;}

 

 

#ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow>#include "privet.h"#include "alltests.h"#include "createname.h"#include "resuser.h"#include <QMessageBox>#include "delq.h"#include "dotest.h"#include "doq1.h"#include "doq2.h"#include "doq3.h" namespace Ui {class MainWindow;} class MainWindow : public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_closeButt_clicked(); void on_userEdit_textChanged(const QString &arg1); void on_okButt_clicked(); void on_testSearchButt_clicked(); void onrefresh(); void on_createButt_clicked(); void on_delButt_clicked(); void on_delqButt_clicked(); void delqcall(); void on_startButt_clicked(); void on_resButt_clicked(); void resusslot(); signals: void delqsig(); void resussig(); private: Ui::MainWindow *ui;}; #endif // MAINWINDOW_H#include "mainwindow.h"#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->startButt->setEnabled(false); ui->passwordEdit->setEnabled(false); connect(this, SIGNAL(delqsig()), this, SLOT(delqcall())); connect(this, SIGNAL(resussig()), this, SLOT(resusslot()));} MainWindow::~MainWindow(){ delete ui;} void MainWindow::on_closeButt_clicked(){ close();} void MainWindow::on_userEdit_textChanged(const QString &arg1){ ui->passwordEdit->setEnabled(arg1.toStdString().length());} void MainWindow::on_okButt_clicked(){ ui->testSearchButt->setEnabled(true); ui->startButt->setEnabled(false); ui->testLabel->setText(""); QString user = ui->userEdit->text(); QString password = ui->passwordEdit->text(); //ui->userline->text()=password; std::string userS = user.toStdString(); std::string passwordS = password.toStdString(); privet pr; QString zz=QString::fromStdString(pr.do_status(userS,passwordS)); ui->statusLable->setText(zz); if (pr.do_status(userS,passwordS)=="teacher") {   ui->createButt->setEnabled(true);   ui->resButt->setEnabled(true); } else {   ui->createButt->setEnabled(false);   ui->resButt->setEnabled(false);   ui->delButt->setEnabled(false);   ui->delqButt->setEnabled(false); }} void MainWindow::on_testSearchButt_clicked(){ allTests *at = new allTests(this); at->show();} void MainWindow::onrefresh(){ ifstream w("buf1.txt"); string ss; getline(w, ss); ui->testLabel->setText(QString::fromStdString(ss)); w.close(); ui->startButt->setEnabled(true); if(ui->statusLable->text().toStdString() == "teacher") {   ui->delButt->setEnabled(true);   ui->delqButt->setEnabled(true); }} void MainWindow::on_createButt_clicked(){ createName *cn = new createName(this); cn->show();} void MainWindow::on_delButt_clicked(){ ui->delButt->setEnabled(false); ui->delqButt->setEnabled(false); ui->startButt->setEnabled(false); creator_test *ct = new creator_test; ct->del_test(ui->testLabel->text().toStdString()); ui->testLabel->setText(""); QMessageBox done; done.setText("Your test has been deleted! You`re monster!"); done.addButton(QMessageBox::Ok); done.exec(); delete ct;} void MainWindow::on_delqButt_clicked(){ emit delqsig();} void MainWindow::delqcall(){ DelQ *dq = new DelQ(this, ui->testLabel->text().toStdString()); dq->show();} void MainWindow::on_startButt_clicked(){ dotest *dt = new dotest; dt->user_v_fail(ui->userEdit->text().toStdString()); dt->user_v_fail(ui->testLabel->text().toStdString()); int i=0; if(dt->do_size(ui->testLabel->text().toStdString())) {   if (dt->load_q(ui->testLabel->text().toStdString(), i)=="q1")   {       doq1 *d1 = new doq1(this, ui->testLabel->text().toStdString(), i+1,0);       d1->show();   }   else if (dt->load_q(ui->testLabel->text().toStdString(), i)=="q2")   {       doq2 *d2 = new doq2(this, ui->testLabel->text().toStdString(), i+1,0);       d2->show();   }   else if (dt->load_q(ui->testLabel->text().toStdString(), i)=="q3")   {       doq3 *d3 = new doq3(this, ui->testLabel->text().toStdString(), i+1,0);       d3->show();   } } delete dt;} void MainWindow::on_resButt_clicked(){ emit resussig();} void MainWindow::resusslot(){ resuser *rs=new resuser(this); rs->show();}

 

 

#ifndef PRIVET_H#define PRIVET_H #include <string> using namespace std;class privet{ private: string user; string password; int status; public: void put_user(string nev); void put_password(string nev); void put_status(int nev); string do_status(string name, string pas); string get_user(); string get_password(); int get_status(); privet();}; #endif#include "privet.h" void privet::put_user(string nev){user=nev;}void privet::put_password(string nev){password=nev;}void privet::put_status(int nev){status=nev;} string privet::do_status(string name, string pas){ if ((name==user)&&(pas==password)) {   put_status(1);   return "teacher"; } else {   put_status(0);   return "student"; }} string privet::get_user(){return user;}string privet::get_password(){return password;}int privet::get_status(){return status;} privet::privet(){ status=-1; user="master"; password="pas";}

 

#ifndef QATION_H#define QATION_H #include <iostream>#include <string>#include <sstream>#include <QMessageBox> using namespace std; class qation{private: string question; double difficalt; public:void set_question (string nev);void set_dif (double nev); string get_question ();double get_dif (); }; #endif // QATION_H#include "qation.h" void qation::set_question (string nev) { question = nev;}void qation::set_dif (double nev){difficalt=nev;} string qation::get_question () { return question; }double qation::get_dif (){return difficalt;}

 

 

#ifndef QATION1_H#define QATION1_H #include "qation.h" class qation1: public qation{private: string variant[4]; int correct;public:  void set_variant(int i,string nev);  void set_correct(int nev);   string get_variant(int i);  int get_correct();}; #endif // QATION1_H#include "qation1.h" void qation1::set_variant(int i, string nev){variant[i]=nev;}  void qation1::set_correct(int nev){correct=nev;}   string qation1::get_variant(int i){return variant[i];}  int qation1::get_correct(){return correct;}

 

#ifndef QATION1F_H#define QATION1F_H #include <QDialog>#include "creatortest.h"#include "qation2f.h"#include "qation3f.h"namespace Ui {class qation1f;} class qation1f : public QDialog{ Q_OBJECT public: explicit qation1f(QWidget *parent = 0, string newname=0); ~qation1f(); private slots: void on_pushButt_clicked(); void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); private: Ui::qation1f *ui; string name;}; #endif // QATION1F_H#include "qation1f.h"#include "ui_qation1f.h" qation1f::qation1f(QWidget *parent, string newname) : QDialog(parent), ui(new Ui::qation1f){ ui->setupUi(this); name = newname;} qation1f::~qation1f(){ delete ui;} void qation1f::on_pushButt_clicked(){ this->close();} void qation1f::on_pushButton_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_a->isChecked())   i=0; else if(ui->radioButton_b->isChecked())   i=1; else if(ui->radioButton_c->isChecked())   i=2; else if(ui->radioButton_d->isChecked())   i=3; ct->set_q1(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i, ui->lineEdit_2->text().toStdString(), ui->lineEdit_3->text().toStdString(), ui->lineEdit_4->text().toStdString(), ui->lineEdit_5->text().toStdString()); ct->add_q1(name);    delete ct; qation1f *q1f=new qation1f(this, name); q1f->show(); this->close();} void qation1f::on_pushButton_2_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_a->isChecked())   i=0; else if(ui->radioButton_b->isChecked())   i=1; else if(ui->radioButton_c->isChecked())   i=2; else if(ui->radioButton_d->isChecked())   i=3; ct->set_q1(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i, ui->lineEdit_2->text().toStdString(), ui->lineEdit_3->text().toStdString(), ui->lineEdit_4->text().toStdString(), ui->lineEdit_5->text().toStdString()); ct->add_q1(name); delete ct; qation2f *q1f=new qation2f(this, name); q1f->show(); this->close();} void qation1f::on_pushButton_3_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_a->isChecked())   i=0; else if(ui->radioButton_b->isChecked())   i=1; else if(ui->radioButton_c->isChecked())   i=2; else if(ui->radioButton_d->isChecked())   i=3; ct->set_q1(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i, ui->lineEdit_2->text().toStdString(), ui->lineEdit_3->text().toStdString(), ui->lineEdit_4->text().toStdString(), ui->lineEdit_5->text().toStdString()); ct->add_q1(name); delete ct; qation3f *q1f=new qation3f(this, name); q1f->show(); this->close();}

 

 

#ifndef QATION2_H#define QATION2_H #include "qation.h" class qation2: public qation {private: int correct;public:  void set_correct(int nev);  int get_correct();}; #endif // QATION2_H#include "qation2.h" void qation2::set_correct(int nev){correct=nev;}  int qation2::get_correct(){return correct;}

 

 

#ifndef QATION2F_H#define QATION2F_H #include <QDialog> #include "qation1f.h"#include "qation3f.h" namespace Ui {class qation2f;} class qation2f : public QDialog{ Q_OBJECT public: explicit qation2f(QWidget *parent = 0, string newname=0); ~qation2f(); private slots: void on_pushButt_clicked(); void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); private: Ui::qation2f *ui; string name;}; #endif // QATION2F_H#include "qation2f.h"#include "ui_qation2f.h" qation2f::qation2f(QWidget *parent, string newname) : QDialog(parent), ui(new Ui::qation2f){ ui->setupUi(this); name = newname;} qation2f::~qation2f(){ delete ui;} void qation2f::on_pushButt_clicked(){ this->close();} void qation2f::on_pushButton_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_yes->isChecked())   i=1; else if(ui->radioButton_no->isChecked())   i=0; ct->set_q2(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i); ct->add_q2(name); delete ct; qation1f *q1f=new qation1f(this, name); q1f->show(); this->close();} void qation2f::on_pushButton_2_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_yes->isChecked())   i=1; else if(ui->radioButton_no->isChecked())   i=0; ct->set_q2(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i); ct->add_q2(name); delete ct; qation2f *q1f=new qation2f(this, name); q1f->show(); this->close();} void qation2f::on_pushButton_3_clicked(){ creator_test *ct = new creator_test; int i; if(ui->radioButton_yes->isChecked())   i=1; else if(ui->radioButton_no->isChecked())   i=0; ct->set_q2(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), i); ct->add_q2(name); delete ct; qation3f *q1f=new qation3f(this, name); q1f->show(); this->close();}

 

 

#ifndef QATION3_H#define QATION3_H #include "qation.h" class qation3: public qation {private: string correct;public:  void set_correct(string nev);  string get_correct();}; #endif // QATION3_H#include "qation3.h" void qation3::set_correct(string nev){correct=nev;}string qation3::get_correct(){return correct;}

 

#ifndef QATION3F_H#define QATION3F_H #include <QDialog> #include "qation2f.h"#include "qation1f.h" namespace Ui {class qation3f;} class qation3f : public QDialog{ Q_OBJECT public: explicit qation3f(QWidget *parent = 0, string newname=0); ~qation3f(); private slots: void on_pushButt_clicked(); void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); private: Ui::qation3f *ui; string name;}; #endif // QATION3F_H#include "qation3f.h"#include "ui_qation3f.h" qation3f::qation3f(QWidget *parent, string newname) : QDialog(parent), ui(new Ui::qation3f){ ui->setupUi(this); name = newname;} qation3f::~qation3f(){ delete ui;} void qation3f::on_pushButt_clicked(){ this->close();} void qation3f::on_pushButton_clicked(){ creator_test *ct = new creator_test; ct->set_q3(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), ui->lineEdit_2->text().toStdString()); ct->add_q3(name); delete ct; qation1f *q1f=new qation1f(this, name); q1f->show(); this->close();} void qation3f::on_pushButton_2_clicked(){ creator_test *ct = new creator_test; ct->set_q3(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), ui->lineEdit_2->text().toStdString()); ct->add_q3(name); delete ct; qation2f *q1f=new qation2f(this, name); q1f->show(); this->close();} void qation3f::on_pushButton_3_clicked(){ creator_test *ct = new creator_test; ct->set_q3(ui->lineEdit->text().toStdString(), (double)ui->spinBox->value(), ui->lineEdit_2->text().toStdString()); ct->add_q3(name); delete ct; qation3f *q1f=new qation3f(this, name); q1f->show(); this->close();}

 

#ifndef RESUSER_H#define RESUSER_H #include <QDialog>#include "creatortest.h"#include <QLabel> namespace Ui {class resuser;} class resuser : public QDialog{ Q_OBJECT public: explicit resuser(QWidget *parent = 0); ~resuser(); private slots: void on_closeButt_clicked(); void on_pushButton_clicked(); signals: void resussig(); private: Ui::resuser *ui;}; #endif // RESUSER_H#include "resuser.h"#include "ui_resuser.h" resuser::resuser(QWidget *parent) : QDialog(parent), ui(new Ui::resuser){ ui->setupUi(this); connect(this, SIGNAL(resussig()), this->parent(), SLOT(resusslot())); creator_test *ct = new creator_test; vector<string> xx = ct->show_all("users"); ui->table->setRowCount(xx.size()/4); QLabel *label; for(int i=0; i < xx.size(); i+=4) {   QString zz = QString::fromStdString(xx[i]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/4, 0, label);    zz = QString::fromStdString(xx[i+1]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/4, 1, label);    zz = QString::fromStdString(xx[i+2]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/4, 2, label);    zz = QString::fromStdString(xx[i+3]);   label = new QLabel;   label->setText(zz);   ui->table->setCellWidget(i/4, 3, label); } delete ct;} resuser::~resuser(){ delete ui;} void resuser::on_closeButt_clicked(){ this->close();} void resuser::on_pushButton_clicked(){ ofstream k("users.txt"); if(!k)   cout<<"ne otkril-"<<"users.txt"; k.close(); this->close(); emit resussig();}

 

 

Ієрархія класів

 

 


Висновок

У даній роботі реалізовано програму «Тестування». Реалізовані такі елементи:

·  Створення тестів.

·  Проходження тесту.

·  Редагування тестів.

· Звіт результатів проходження тесту.

 

Дана програма має зручний інтерфейс, та захист від зміни даних тестів в режимі учня.


 

Список використаної літератури

1. http://qt-project.org

2. http://ru.wikibooks.org/wiki/Qt

3. https://ru.wikipedia.org/wiki/Qt#cite_note-26

4. http://qtdocs.narod.ru/4.1.0/doc/html/index.html

5. https://www.draw.io/


Дата добавления: 2022-11-11; просмотров: 23; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!