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));
}
…
}