Дипломная работа: Предпроектный анализ

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рисунок А.2 - Главное окно приложения

При нажатии кнопки «Работа с задачами по устранению ТП», открывается окно работы с задачами по устранению ТП (рисунок А.3).

Рисунок А.3 - Окно работы с задачами по устранению ТП

Для получения приемов необходимо выбрать из двух таблиц параметры и добавить их в список выбранных параметров. По мере добавления приемы будут отображены в списке приемов для выбранных параметров (рисунок А.4).

Рисунок А.4 - Текущий набор параметров управляющей функции

Также в данной информационной системе присутствует возможность сохранения задачи в базу данных. Для сохранения задачи пользователю необходимо нажать на кнопку «Сохранить задачу» (рисунок А. 5), ввести название задачи и нажать кнопку «Ок», после чего система сохранит все данные.

Рисунок А.5 - Ввод названия сохраняемой задачи

Таблица А.1 - Описание аварийных ситуаций

Класс ошибки

Ошибка

Описание ошибки

Требуемые действия пользователя при возникновении ошибки

ИС поддержки генерирования новых идей на основе энерго-информационного подхода

Ошибка: Введенные логии и/или пароль неверны

При попытке авторизации в ИС введены несуществующие логин и/или пароль.

Ввести валидные логин и пароль.

Ошибка: К сожалению, для выбранных параметров нет приемов

Пользователь выбрал пару параметров, для которых в БД нет приемов

Выбрать другую пару параметров противоречия

Ошибка: Выберите оба параметра!

Пользователь не выбрал оба параметра противоречия.

Нужно выбрать оба параметра противоречия

Ошибка: Выбранное имя задачи уже существует, попробуйте другое

Пользователь ввел название сохраняемой задачи, которое уже было сохранено системой

Ввести другое название для сохранения задачи

Ошибка: Выбранное имя параметра уже существует, попробуйте другое

Пользователь ввел название параметра, которое уже было сохранено системой

Ввести другое название параметра

Ошибка: Выбранное имя приема уже существует, попробуйте другое

Пользователь ввел название приема, которое уже было сохранено системой

Ввести другое название приема

Ошибка: Все поля обязательны к заполнению

Пользователь ввел не все значения, необходимые для сохранения

Ввести оставшиеся значения

ПРИЛОЖЕНИЕ Б

Листинг программы

Workwithtask.cpp (Работа с задачами)

#include "workwithtask.h"

#include "math.h"

WorkWithTask::WorkWithTask(QWidget *parent, int newUserId, int newUserRights) : BaseWidget(parent)

{

this->setWindowTitle("Работа с задачами по устранению ТП");

this->setUserID(newUserId);this->setUserRights(newUserRights);

list_idparams_left_alreadyintable.clear();

list_idparams_right_alreadyintable.clear();

list_priems_alreadyintable.clear();

list_priems_overallRate_alreadyintable.clear();

QObject::connect(pushbutton_Add,SIGNAL(clicked(bool)),this,SLOT(pushbutton_Add_ok()));

QObject::connect(pushbutton_Load,SIGNAL(clicked(bool)),this,SLOT(pushbutton_Load_ok()));

QObject::connect(pushbutton_New,SIGNAL(clicked(bool)),this,SLOT(pushbutton_New_ok()));

QObject::connect(pushbutton_Save,SIGNAL(clicked(bool)),this,SLOT(pushbutton_Save_ok()));

QObject::connect(pushbutton_give_rates,SIGNAL(clicked(bool)),this,SLOT(pushbutton_give_rates_ok()));

QObject::connect(tablewidget_priems,SIGNAL(cellChanged(int,int)),this,SLOT(tablewidget_priems_data_changed(int,int)));

QObject::connect(pushbutton_sprav_priemov,SIGNAL(clicked(bool)),this,SLOT(pushbutton_sprav_priemov_ok()));

tablewidget_parametres_left->setSelectionMode(QAbstractItemView::SingleSelection);

tablewidget_parametres_left->setSelectionBehavior(QAbstractItemView::SelectItems);

tablewidget_parametres_left->verticalHeader()->hide();

tablewidget_parametres_right->setSelectionMode(QAbstractItemView::SingleSelection);

tablewidget_parametres_right->setSelectionBehavior(QAbstractItemView::SelectItems);

tablewidget_parametres_right->verticalHeader()->hide();

tablewidget_priems->setSelectionMode(QAbstractItemView::SingleSelection);

tablewidget_priems->setSelectionBehavior(QAbstractItemView::SelectItems);

tablewidget_priems->verticalHeader()->hide();

DbConnect db;

QSqlQuery query=db.dbExec("SELECT * FROM Parametres_left");

int size=db.dbSize(query);

tablewidget_parametres_left->setColumnCount(1);

tablewidget_parametres_left->setRowCount(size);

tablewidget_parametres_right->setColumnCount(1);

tablewidget_parametres_right->setRowCount(size);

tablewidget_parametres_left->setMinimumHeight(250);

tablewidget_parametres_right->setMinimumHeight(250);

tablewidget_priems->setColumnCount(3);

tablewidget_priems->setRowCount(0);

tablewidget_parametres_left->setColumnWidth(0,450);

tablewidget_parametres_right->setColumnWidth(0,450);

tablewidget_priems->setColumnWidth(0,300);

tablewidget_priems->setColumnWidth(1,92);

tablewidget_priems->setColumnWidth(2,92);

QStringList strlist;

strlist.append("Прием");strlist.append("Общая оценка");strlist.append("Ваша оценка");

tablewidget_priems->setHorizontalHeaderLabels(strlist);

strlist.clear();

strlist.append("Параметр улучшить");

tablewidget_parametres_left->setHorizontalHeaderLabels(strlist);

strlist.clear();

strlist.append("Параметр при этом ухудшается");

tablewidget_parametres_right->setHorizontalHeaderLabels(strlist);

\

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

query.next();

QTableWidgetItem *item = new QTableWidgetItem;

item->setText(query.value(1).toString());

item->setFlags(item->flags() ^ Qt::ItemIsEditable);//УБИРАЕТ ИЗ ФЛАГОВ ЕДИТАБЛ

QTableWidgetItem *item2 = new QTableWidgetItem;

item2->setText(query.value(1).toString());

item2->setFlags(item2->flags() ^ Qt::ItemIsEditable);//УБИРАЕТ ИЗ ФЛАГОВ ЕДИТАБЛ

tablewidget_parametres_left->setItem(i,0,item);

tablewidget_parametres_right->setItem(i,0,item2);

}

//вывод на виджет

layout_main->addWidget(pushbutton_New,0,0,1,2);

layout_main->addWidget(pushbutton_Save,0,2,1,2);

layout_main->addWidget(pushbutton_Load,0,4,1,2);

layout_main->addWidget(label_task_name,1,0,1,3);

layout_main->addWidget(tablewidget_parametres_left,2,0,1,3);

layout_main->addWidget(tablewidget_parametres_right,2,3,1,3);

layout_main->addWidget(pushbutton_Add,3,0,1,2);

layout_main->addWidget(pushbutton_sprav_priemov,3,4,1,2);

layout_main->addWidget(label_spisok_paramov,4,0,1,3);

layout_main->addWidget(listwidget_params,5,0,1,3);

layout_main->addWidget(label_spisok_priemov,4,3,1,3);

layout_main->addWidget(tablewidget_priems,5,3,1,3);

// layout_main->addWidget(pushbutton_give_rates,6,0,1,3);

this->setLayout(layout_main);

}

void WorkWithTask::pushbutton_New_ok()

{

listwidget_params->clear();

tablewidget_priems->clear();

list_idparams_left_alreadyintable.clear();

list_idparams_right_alreadyintable.clear();

list_priems_alreadyintable.clear();

list_priems_overallRate_alreadyintable.clear();

label_task_name->setText("Имя задачи: Новая");

QStringList strlist;

strlist.append("Прием");strlist.append("Общая оценка");strlist.append("Ваша оценка");

tablewidget_priems->setHorizontalHeaderLabels(strlist);

tablewidget_priems->setRowCount(0);

}

void WorkWithTask::pushbutton_Save_ok()

{

QStringList strlist=label_task_name->text().split(": ");

if(strlist.at(1)=="Новая"){

bool ok;

QString text = QInputDialog::getText(this,

QString::fromUtf8("Введите название задачи"),

QString::fromUtf8("Название:"),

QLineEdit::Normal,

"", &ok);

if (ok && !text.isEmpty()){

if((text.toLower()=="новая")){

QMessageBox::information(this,"Ошибка","'новая' является зарезервированным словом, попробуйте другое");

return;

}

QSqlQuery query;

query.exec("SELECT * FROM Task_list WHERE id_user="+QString::number(this->getUserID())+" AND name_task="+text);

int size=0;

while(query.next()){

size++;

}

if(size!=0){

QMessageBox::information(this,"Ошибка","Выбранное имя уже существует, попробуйте другое");

return;

}

//стартуем процесс сохранения, а это сложно!

query.clear();

if(listwidget_params->count()==0){

QMessageBox::information(this,"Ошибка","Добавьте хотя бы один прием");

return;

}

query.exec("SELECT * FROM Task_list");

int last_id_taskList=0;

while(query.next()){

last_id_taskList=query.value(0).toInt();

}

query.clear();

query.prepare("INSERT INTO Task_list (id_task, name_task, id_user)"

" VALUES (:id_task, :name_task, :id_user)");

query.bindValue(":id_task",last_id_taskList+1);

query.bindValue(":name_task",text);

query.bindValue(":id_user",this->getUserID());

query.exec();

for(int i=0;i<listwidget_params->count();i++){

query.clear();//вставляем параметры

query.prepare("INSERT INTO Task_inside_parametres (id_task, id_parametr_left, id_parametr_right)"

" VALUES (:id_task, :id_parametr_left, :id_parametr_right)");

QStringList strlist=listwidget_params->item(i)->text().split(" - ");

query.bindValue(":id_task",last_id_taskList+1);

query.bindValue(":id_parametr_left",list_idparams_left_alreadyintable.at(i));

query.bindValue(":id_parametr_right",list_idparams_right_alreadyintable.at(i));

query.exec();

}

for(int i=0;i<list_priems_alreadyintable.size();i++){ //вставляем приемы

query.clear();

query.prepare("INSERT INTO Task_inside_priems (id_task, id_priem, id_rate)"

" VALUES (:id_task, :id_priem, :id_rate)");

query.bindValue(":id_task",last_id_taskList+1);

query.bindValue(":id_priem",list_priems_alreadyintable.at(i));

query.bindValue(":id_rate",tablewidget_priems->item(i,2)->text().toInt());

query.exec();

}

query.clear();

label_task_name->setText("Имя задачи: "+text);

}

}else{ //при работе с неновой надо просто обновить все значения! А это непросто!

QSqlQuery query;

//сначала проверяем все ли осталось на месте, если нет - то надо удалить

//да не, даже просто все проверяем по нашим текущим

// сначала по приемам проедемся

//тут сначала удаляем лишнее

// query.exec("SELECT * FROM Task_inside_parametres WHERE id_task="+QString::number(id_task_chosen));

//тут теперь вставляем новье

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

query.exec("SELECT * FROM Task_inside_parametres WHERE id_task="+QString::number(id_task_chosen)

+" AND id_parametr_left="+QString::number(list_idparams_left_alreadyintable.at(i))

+" AND id_parametr_right="+QString::number(list_idparams_right_alreadyintable.at(i)));

int size=0;

while(query.next()){

size++;

}

// QMessageBox::information(this,"size, if size then exist",QString::number(size));//отлично пашет 1 - есть, 0 - нет

if(size==0){//если нуль, значит такого еще нет, срочно добавить!

query.clear();

query.prepare("INSERT INTO Task_inside_parametres (id_task, id_parametr_left, id_parametr_right)"

" VALUES (:id_task, :id_parametr_left, :id_parametr_right)");

query.bindValue(":id_task",id_task_chosen);

query.bindValue(":id_parametr_left",list_idparams_left_alreadyintable.at(i));

query.bindValue(":id_parametr_right",list_idparams_right_alreadyintable.at(i));

query.exec();

}

}

//теперь втыкаем оценки для всех приемов без исключения, ибо проще

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

query.clear();

query.exec("SELECT * FROM Task_inside_priems WHERE id_task="+QString::number(id_task_chosen)

+" AND id_priem="+QString::number(list_priems_alreadyintable.at(i)));

int size=0;

while(query.next()){

size++;

}

if(size==0){//значит нет - инсерти

query.clear();

query.prepare("INSERT INTO Task_inside_priems (id_task, id_priem, id_rate)"

" VALUES (:id_task, :id_priem, :id_rate)");

query.bindValue(":id_task",id_task_chosen);

query.bindValue(":id_priem",list_priems_alreadyintable.at(i));

query.bindValue(":id_rate",tablewidget_priems->item(i,2)->text().toInt());

query.exec();

}else{//значит есть - апдейтим

query.clear();

query.prepare("UPDATE Task_inside_priems SET id_rate="+QString::number(tablewidget_priems->item(i,2)->text().toInt())

+" WHERE id_task="+QString::number(id_task_chosen)

+" AND id_priem="+QString::number(list_priems_alreadyintable.at(i)));

query.exec();

}

}

}

}

void WorkWithTask::pushbutton_Load_ok()

{

QDialog *dialog = new QDialog;

QGridLayout *layout_dialog = new QGridLayout;

load_dialog = new WorkWithTaskLoadDialog(0,this->getUserID());

load_dialog->setWindowFlags(Qt::Window | Qt::WindowTitleHint);

load_dialog->exec();

if(load_dialog->id_task==-1){return;}

id_task_chosen = load_dialog->id_task;

// QMessageBox::information(this,"!!!",QString::number(id_task_chosen));

listwidget_params->clear();

tablewidget_priems->clear();

list_idparams_left_alreadyintable.clear();

list_idparams_right_alreadyintable.clear();

list_priems_alreadyintable.clear();

list_priems_overallRate_alreadyintable.clear();

label_task_name->setText("Имя задачи: Новая");

tablewidget_priems->setRowCount(0);

QStringList strlist;

strlist.append("Прием");strlist.append("Общая оценка");strlist.append("Ваша оценка");

tablewidget_priems->setHorizontalHeaderLabels(strlist);

QSqlQuery query;

query.exec("SELECT * FROM Task_list WHERE id_task="+QString::number(id_task_chosen));

query.next();

label_task_name->setText("Имя задачи: "+query.value(1).toString());

query.clear();

//грузим параметры

query.exec("SELECT * FROM Task_inside_parametres WHERE id_task="+QString::number(id_task_chosen));

QSqlQuery query_inside;

QString str_params;

while(query.next()){

query_inside.clear();

str_params.clear();

list_idparams_left_alreadyintable.append(query.value(1).toInt());

query_inside.exec("SELECT * FROM Parametres_left WHERE id_parametr="+query.value(1).toString());

query_inside.next();

str_params.append(query_inside.value(1).toString()+" - ");

query_inside.clear();

list_idparams_right_alreadyintable.append(query.value(2).toInt());

query_inside.exec("SELECT * FROM Parametres_left WHERE id_parametr="+query.value(2).toString());

query_inside.next();

str_params.append(query_inside.value(1).toString());

QListWidgetItem *item = new QListWidgetItem;

item->setText(str_params);

listwidget_params->addItem(item);

}

query.clear();

query.exec("SELECT * FROM Task_inside_priems WHERE id_task="+QString::number(id_task_chosen));

int row=-1;

while(query.next()){

row++;

list_priems_alreadyintable.append(query.value(1).toInt());

query_inside.clear();

query_inside.exec("SELECT * FROM Task_list WHERE id_user="+QString::number(this->getUserID()));

float sum=0; float amount=0;

QSqlQuery query_task;

while(query_inside.next()){//внутри таск листа бежим по всем задачам и считаем рейтинг конкретного приема

query_task.clear();

query_task.exec("SELECT * FROM Task_inside_priems WHERE id_task="+QString::number(query_inside.value(0).toInt()));

while(query_task.next()){

if(query_task.value(1).toInt()==list_priems_alreadyintable.at(list_priems_alreadyintable.size()-1)){

sum+=query_task.value(2).toInt();

amount++;

}

}

}

if(amount!=0){

list_priems_overallRate_alreadyintable.append(round((sum/amount)*100)/100);

}else{

list_priems_overallRate_alreadyintable.append(0);

}

// QMessageBox::information(this,"",QString::number(list_priems_overallRate_alreadyintable.at(list_priems_overallRate_alreadyintable.size()-1)));

}

for(int i=0; i<list_priems_overallRate_alreadyintable.size()-1;i++){ //сортируем по убыванию

for(int j=0;j<list_priems_overallRate_alreadyintable.size()-i-1;j++){

if(list_priems_overallRate_alreadyintable[j]<list_priems_overallRate_alreadyintable[j+1]){

float b=list_priems_overallRate_alreadyintable[j];

list_priems_overallRate_alreadyintable[j]=list_priems_overallRate_alreadyintable[j+1];

list_priems_overallRate_alreadyintable[j+1]=b;

int b1=list_priems_alreadyintable[j];

list_priems_alreadyintable[j]=list_priems_alreadyintable[j+1];

list_priems_alreadyintable[j+1]=b1;

}

}

}

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

tablewidget_priems->insertRow(i);

for(int k=0;k<3;k++){

if(k==0){

QSqlQuery query_output;

query_output.exec("SELECT * FROM Priems WHERE id_priem="+QString::number(list_priems_alreadyintable.at(i)));

query_output.next();

QTableWidgetItem *item = new QTableWidgetItem;

item->setFlags(item->flags() ^ Qt::ItemIsEditable);//УБИРАЕТ ИЗ ФЛАГОВ ЕДИТАБЛ

item->setText(query_output.value(0).toString()+" - "+query_output.value(1).toString());

tablewidget_priems->setItem(i,k,item);

}

if(k==1){

QTableWidgetItem *item = new QTableWidgetItem;

item->setFlags(item->flags() ^ Qt::ItemIsEditable);//УБИРАЕТ ИЗ ФЛАГОВ ЕДИТАБЛ

item->setText(QString::number(list_priems_overallRate_alreadyintable.at(i)));

tablewidget_priems->setItem(i,k,item);

}

if(k==2){

QTableWidgetItem *item = new QTableWidgetItem;