1.2.4 Требования к информационной и программной совместимости
Установленный QT-creator версии 2.4.1
Установленный QT версии 4.7.4
- Программное обеспечение: Windows Installer 4.5 и Internet Explorer 5.01 или более поздние версии.
-Язык программирования: C++.
1.3. Требование к программной документации
В данной работе разрабатывается Техническое Задание
1.4. Входные/выходные данные
1.5.1 Входные данные
Номер задания
Решение выбранного задания
Ввод PIN для входа под учетной записью администратора (не обязательно)
1.5.2 Описание структуры данных, размещаемых в файле
В файле, название которого вводится пользователем, содержатся слова и описание их значений. Этот файл нужен для того, чтобы с него считывать слова, которые можно использовать в кроссворде.
1.5.3 Выходные данные:
Сообщение об ошибке или правильности
Шкала процесса выполнения заданий
Пройденные задания
Указание на место ошибки
Переключение на администратора(при вводе ПИН)
2.Условие задачи
Программа должна иметь теоретическую часть
Программа должна иметь несколько заданий
Программа должна искать ошибки пользователя
3.Постановка задачи
Дано:
10 встроенных матриц: 2х2 – 3шт, 3х3 – 3шт, 4х4 – 3 шт, 10х10 – 1шт.
Результат: Сообщение об ошибке или правильности выполнения, указание на место ошибки, если таковая имеется. Изменение шкалы прогресса. Указание на пройденные задания.
При: Вводе по строго указанным в программе алгоритмам.
Связь: сообщение ошибки и указание на место и причину при несоответствии в решении. Изменение шкалы прогресса при правильном выполнении.
4. Внешняя спецификация
Ниже приведена внешняя спецификация для программы «Вычисляем определитель»

Рис. 1 Исходная страница программы.

Рис. 2 Выбор задания, правильное выполнение.

Рис.3 Сообщения об ошибке

Рис. 4 Под учетной записью администратора
5. Метод решения задачи
Считываем номер задания, программа выводит матрицу.
Считываем выражение пользователя и ответ. Сравниваем со встроенным решением и ответом посимвольно в программе. Как только находится несоответствие, программа выдает сообщение об ошибке и указывает на ее место в решении пользователя. Как только пользователь находит ошибку и исправляет ее, программа
Повторяет подобную процедуру.
6.Описание алгоритма
Структуры:
QLabel: Для хранения или вывода сообщений.
QPlainTextEdit: Для расширенного ввода данных.
QPushButton: Для выполнения определенных операций при нажатии.
QTextBrowser: Для хранения или вывода данных.
QTextEdit: Для ввода данных.
QProgressBar: Для вывода прогресса выполнения заданий
Основные переменные:
Num – номер выполняемого задания.
Z1p,…,z10p– вводимые пользователем решения.
Z1,…z10 – встроенные решения матриц.
S– ответы.
Pin– ПИН-код для режима Администратора.
Функции:

Рис. 5 Функции программы
Описание:
Считывание номера из plainTextEdit_2; проверка на проходимость задания; Проверка на правильность ввода задания;
void MainWindow::on_pushButton_2_clicked()
{
int num = ui->plainTextEdit_2->toPlainText().toInt();
if(num==1)
{
if(ui->pz1->toPlainText()=="+")
ui->textBrowser->setText("3 15\n2 1\n You've' already done this.");
else
ui->textBrowser->setText("3 15\n2 1");
}
...
if(num>10)
ui->textBrowser->setText("No such nomber");
if(!(ui->plainTextEdit_2->toPlainText().toInt())||num<1)
ui->textBrowser->setText("Something wrong");
}
2)Считывание решения пользователя из plainTextEdit; Сравнение соответствующих решений; Вывод сообщений; Изменение параметра progressBar; Запись о проходимости и количества пройденных заданий.
void MainWindow::on_pushButton_clicked()
{
QString z1p,z3p,z2p,z4p,z5p,z6p,z7p,z8p,z9p,z10p;
int i=0,s;
bool f=true;
int prog=ui->textBrowser_2->toPlainText().toInt();
int num = ui->plainTextEdit_2->toPlainText().toInt();
ui->textBrowser_3->hide();
ui->label_2->setText(" ");
ui->label_3->setText(" ");
ui->label_4->setText(" ");
ui->label_5->setText(" ");
ui->label_6->setText(" ");
if (num==1)
{
z1p=ui->plainTextEdit->toPlainText();
QString z1="3*1-15*2";
s=3*1-15*2;
for (i=0;i<=z1p.size()&&f==true;i++)
if(z1p[i]!=z1[i])
{
ui->label_2->setText("Mistake after");
ui->label_4->setText(QString::number(i));
ui->label_5->setText("element!");
f=false;
}
if (s!=ui->textEdit_2->toPlainText().toInt())
{
ui->label_6->setText("Wrong answer. Check again");
f=false;
}
if (z1p.size()<z1.size())
{
ui->label_6->setText("You missed something or didn't finish term");
f=false;
}
if (z1p.size()>z1.size())
{
ui->label_6->setText("You wrote more then need. Check your derivation");
f=false;
}
if (z1p.size()==0)
{
ui->label_6->setText("You didn't write anything.");
f=false;
}
if(f==true)
{
ui->label_2->setText("Good job!");
if(ui->pz1->toPlainText()!="+")
{
prog++;
ui->textBrowser_2->setText(QString::number(prog));
ui->progressBar->setValue(prog*10);
ui->pz1->setText("+");
}
}
}
…
if(prog==10)
ui->label_10->setText("Congratulations! You know how to find the determinant of matrix. Good luck!");
}
3) Проверка ПИН-кода
void MainWindow::on_pushButton_pin_clicked()
{
int i;
bool prpin=true;
QString pin="2036", pinp;
pinp=ui->textEdit_pin->toPlainText();
for(i=0;i<4;i++)
if(pin[i]!=pinp[i])
{
ui->label_pin->setText("Wrong PIN! Try again.");
prpin=false;
}
if(prpin==true)
{
ui->pushButton_ans->show();
ui->pushButton_user->show();
ui->label_pin->setText(" ");
ui->pushButton_admin->hide();
ui->pushButton_pin->hide();
ui->label_11->hide();
ui->textEdit_pin->hide();
ui->textEdit_pin->setText("");
}
}
4)Вход под администратора.(Доступ к кнопкам)
void MainWindow::on_pushButton_admin_clicked()
{
ui->pushButton_pin->show();
ui->textEdit_pin->show();
ui->label_11->show();
}
5)Вход под пользователя.(Лишение доступа к кнопкам)
void MainWindow::on_pushButton_user_clicked()
{
ui->pushButton_ans->hide();
ui->pushButton_user->hide();
ui->plainTextEdit->clear();
ui->pushButton_admin->show();
}
6)Вывод решения на plainTextEdit_2; Показывает ответ. Доступно только администратору.
void MainWindow::on_pushButton_ans_clicked()
{
int s;
int num = ui->plainTextEdit_2->toPlainText().toInt();
if (num==1)
{
ui->plainTextEdit->setPlainText("3*1-15*2");
s=3*1-15*2;
ui->label_3->setText(QString::number(s));
}
…
}
