Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Трухачев И В.docx
Скачиваний:
7
Добавлен:
22.03.2016
Размер:
1.35 Mб
Скачать

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 Функции программы

Описание:

  1. Считывание номера из 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));

}

}