Предпроектный анализ

Основные функции ТРИЗ. Обзор аналогов и прототипа TRIZ GB. Оптимизация работы с матрицей Альтшуллера. Сценарий изменения приемов устранения технических противоречий. Диаграмма сущностных классов для реализуемой системы. Логическая структура базы данных.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 08.10.2018
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

6.3. Методика проверки работоспособности программы.

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

Представлено главное окно работы программы. Эксперту необходимо выбрать пункт меню «Работа с задачами по устранению ТП»

После пользователь выбирает пару параметров и нажимает кнопку «Добавить пару противоречий» необходимое количество раз.

Далее пользователь может просмотреть список приемов для выбранных параметров и выставить свои оценки для них в этой задаче.

Чтобы загрузить ранее созданную задачу необходимо нажать кнопку «Загрузить задачу», после чего появится окно, где можно выбрать из выпадающего списка требуемую задачу, либо ввести ее название, затем нажать кнопку «Загрузить».

Проверка считается завершенной в случае соответствия состава и последовательности действий, при выполнении данной проверки, указанному выше подразделу руководства пользователя (Приложение А).

6.4. Методика проверки на сообщение об ошибке.

Проверка на сообщение об ошибке выполняется согласно п. «Аварийные ситуации» руководства пользователя.

Проверка считается завершенной в случае соответствия состава и последовательности действий, при выполнении данной проверки, указанному выше подразделу руководства пользователя.

4.8 Контрольный пример

Для демонстрации работы системы «Поддержки генерирования новых идей на основе энергоинформационного подхода», было проведено ее тестирование. Ниже дано описание контрольного примера.

Рассмотрим задачу о бетонных сваях. Иногда при постройке дома или моста в грунт для создания будущего фундамента во многих местах предварительно забивают многометровые бетонные столбы (сваи). Проблема заключается в том, что верхняя часть почти всех свай, по которой ударяет молот, часто разрушается. Из-за этого многие сваи не удается забить на нужную глубину. Тогда эти сваи отпиливают, а рядом забивают дополнительные, что снижает производительность работ и снижает их стоимость.

Создадим новую задачу (рисунок 18).

Рисунок 18 - Работа с задачами по устранению ТП

В исходной задаче присутствует два противоречия, а именно требуется улучшить скорость, но при этом ухудшаются вредные факторы самого объекта, а так же требуется усилить силу удара, но при этом ухудшаются вредные факторы самого объекта. Добавим оба в список выбранных параметров (рисунок 19).

Рисунок 19 - Работа с задачами по устранению ТП

Ознакомившись со списком приемов воспользуемся приемом 24 - принцип «посредника». Требуется некий посредник между молотом и самой сваей, чтобы устранить разрушение. Одним из лучших решений будет использовать мешок с песком, который будет равномерно распределять силу по поверхности сваи и при этом не допустит разрушения сваи. Решение найдено, теперь можно выставить оценку выбранному приему и сохранить задачу (рисунок 20).

Рисунок 20 - Окно ввода названия задачи

4.9 Руководство пользователя

Руководство пользователя информационной системой для решения транспортных задач разработано для будущих пользователей этой системы. Пользователи должны иметь навыки работы с персональным компьютером. Также ему необходимо быть знакомым с предметной областью и ознакомиться с руководством пользователя. Типовая структура руководства пользователя приведена в ГОСТ РД 50-34.698-90

1. Введение.

2. Назначение и условия применения.

3. Подготовка к работе.

4. Описание операций.

5. Аварийные ситуации.

Полный текст руководства пользователя для разработанной ИС представлен в приложении А.

5. ВНЕДРЕНИЕ И АНАЛИЗ ЭФФЕКТИВНОСТИ

5.1 Описание объекта внедрения

Информационная система поддержки генерирования новых идей на основе энерго-информационного подхода. С самого начала система разрабатывалась в соответствии с требуемыми функциями, утвержденными в техническом задании.

Исходя из обоснования выбора средств разработки, ИС разрабатывалась на языке C++ в Qt creator с использованием методологии UML и представляет собой автономное приложение.

Разработанный модуль отвечает всем поставленным целям и задачам. А именно реализованы следующие функции:

1. Разграничение прав доступа к функционалу системы.

2. Ведение справочников: «Пользователи», «Приемы», «Параметры», «Матрица Альтшуллера».

3. Ввод рейтинга приемов устранения технических противоречий.

4. формировать отчет о наиболее часто используемых параметрах.

5. формировать отчет о средних оценках приемов.

6. выбор параметров технических противоречий.

5.2 Описание хода возможного внедрения

После окончательной разработки модуля, внедряемый программный продукт может быть использован в учебном процессе по курсу «Основы теории управления».

Также программа может быть использована в любых учебных заведениях, где уделяется внимание изучению ТРИЗ.

Для эксплуатации системы должны быть выделены ресурсы:

1. Должен быть проведен инструктаж по использованию системы.

2. Согласно приведенным расчётам требуемых ресурсов внешней и оперативной памяти, для работы с разработанной ИС рекомендуются компьютеры со следующими системными характеристиками:

- оперативная память - 2560 Мб;

- наличие свободного места на жестком диске - не менее 22.01 Гб;

- 128 Мб видеопамяти и больше;

- Процессор с тактовой частотой 2,0 ГГц и выше.

3. На компьютере должны быть установлены следующие компоненты:

- OC Windows 7

- СУБД Microsoft Access 2007

- Программа «Информационная система поддержки генерирования новых идей на основе энерго-информационного подхода» Altshuller.exe

6. ОРГАНИЗАЦИОННАЯ ДЕЯТЕЛЬНОСТЬ И САМОРАЗВИТИЕ

6.1 Перечень выполненных курсовых проектов и работ

В таблице 6 приведен перечень выполненных автором за период обучения курсовых работ, с указанием семестра, курса, дисциплины и названия курсовой работы.

Таблица 6 - Перечень выполненных курсовых работ

№ п/п

Курс

Семестр

Дисциплина

Курсовая работа

1

1

1

Технология профессиональной деятельности. Введение в специальность и научные исследования

Квантовые компьютеры

2

1

2

Технология профессиональной деятельности. Информационный поиск и систематизация знаний

Разработка приложения органайзер

3

1

2

Операционные системы

Модель замещения областей памяти случайным выбором

4

2

3

Технология профессиональной деятельности. Обработка и анализ экспериментальных данных

Ранжирование образовательных организаций по показателям их активности и участия в системе ОДАРМОЛ

5

2

3

Информационные технологии

Синтез конечных автоматов для заданной грамматики

6

2

4

Технология профессиональной деятельности. Моделирование и исследования с использованием прикладных программ

Программа нахождения критического пути в задаче

7

2

4

Технология программирования

Шифрование методом гаммирования

8

3

5

Технология профессиональной деятельности. Математическое моделирование и исследование с разработкой программных продуктов

Алгоритм генерации случайных чисел с приоритетом

9

3

6

Проектирование интерфейсов

Интерактивная кулинарная книга

10

4

7

Технология профессиональной деятельности. Общее проектирование информационных систем и технологий

Создание уточненной таблицы для разрешения технических противоречий

11

4

7

Корпоративные ИС

Разработка АИС портфолио

12

4

8

Технология профессиональной деятельности. Разработка инновационных систем

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

13

4

8

Методы и средства проектирования информационных систем

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

ЗАКЛЮЧЕНИЕ

При написании данной работы была поставлена цель: разработка и практическая реализация информационной системы поддержки генерирования новых идей.

Главным итогом выполненной работы стало создание информационной системы, предлагающей приемы для разрешения технических противоречий, основываясь на оценках, выставленных им при решении других задач. Так же реализована возможность добавлять, обновлять и удалять приемы и параметры при помощи эксперта, что позволит системе иметь актуальную базу данных.

Система реализована при помощи языка программирования С++ с использованием Фреймворка Qt, также была использована база данных Microsoft Access.

Основываясь на слишком низких или же высоких оценках, часто используемых параметрах и нет, можно делать выводы эксперту для более точного редактирования матрицы Альтшуллера.

ПРИЛОЖЕНИЕ А

Руководство пользователя

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АРХИТЕКТУРНО-СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ» (СГАСУ)

«УТВЕРЖДАЮ»

Зав. кафедрой ИРОСТ

__________ С.А.Пиявский

«____»___________2016 г.

ИНФОРМАЦИОННАЯ СИСТЕМА ПОДДЕРЖКИ ГЕНЕРИРОВАНИЯ НОВЫХ ИДЕЙ НА ОСНОВЕ ЭНЕРГОИНФОРМАЦИОННОГО ПОДХОДА

Руководство пользователя

ЛИСТ УТВЕРЖДЕНИЯ

02068389.40100.016.И3.01.1

Листов 1

Руководитель разработки:

______ Радомский В.М.

Разработчик:

Студент группы ГИП-112

__________Туркин С.А.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АРХИТЕКТУРНО-СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ» (СГАСУ)

УТВЕРЖДЕНО

02068389.40100.016.И3.01.1

ИНФОРМАЦИОННАЯ СИСТЕМА ПОДДЕРЖКИ ГЕНЕРИРОВАНИЯ НОВЫХ ИДЕЙ НА ОСНОВЕ ЭНЕРГОИНФОРМАЦИОННОГО ПОДХОДА

Руководство пользователя

02068389.40100.016.И3.01.1

Листов 1

А.1 Введение

Требования настоящего документа применяются при предварительных комплексных испытаниях, приемочных испытаниях и эксплуатации системы.

Руководство пользователя информационной системы «Поддержки генерирования новых идей на основе энергоинформационного подхода», разрабатывалось в соответствии с РД 50-34.698-90. В нем регламентировались правила оформления руководства пользователя, порядок и расположение пунктов в тексте, описывающем работу с информационной системой, размеры и положение рисунков.

Данное руководство предназначено для сотрудников и студентов кафедры ИРОСТ СГАСУ и предполагает у пользователей системы наличие элементарных навыков работы с информационными системами.

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

А.2 Назначение и условия применения

ИС предназначена для автоматизации процесса генерирования новых идей на основе энергоинформационного подхода.

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

Минимальные требования к техническому и программному обеспечению. Требования к процессору определяются требованиями ОС.

Минимальные требования:

- процессор класса Pentium с тактовой частотой 2 ГГц и выше;

- объем свободного дискового пространства не менее 22.01 Гб;

- объем оперативной памяти не менее 2560 Мб;

- любая ОС (для примера требования написаны для ОС Windows 7);

- манипулятор типа «мышь»;

- монитор с разрешением 1280x1024.

Условия работы.

- температура окружающего воздуха -15 - +25 °С;

- относительная влажность - 45-75%.

- содержание вредных веществ, пыли и подвижного воздуха в рабочей зоне соответствует нормам ГОСТ 12.1.005, 12.1.007; комплекс должен удовлетворять санитарным правилам и нормам СанПиН 2.2.2/2.4.1340-03.

А3. Подготовка к работе

Руководство пользователя информационной системы «Поддержка генерирования новых идей на основе энергоинформационного подхода разрабатывалось в соответствии с РД 50-34.698- 90. В нем регламентировались правила оформления руководства пользователя, порядок и расположение пунктов в тексте, описывающем работу с информационной системой, размеры и положение рисунков.

Данное руководство предназначено для сотрудников и студентов кафедры ИРОСТ СГАСУ и предполагает у пользователей системы наличие элементарных навыков работы с информационными системами.

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

Для запуска системы необходимо запустить приложение Idea.exe.

А4 Описание операций

Задача: «Получить список приемов для устранения технических противоречий поставленной изобретательской задачи»

Основные действия в требуемой последовательности:

Запустить «Altshuller.exe».

На экране появится форма авторизации ИС (Рисунок А. 1). Если форма авторизации не была открыта, следует обратиться в службу технической поддержки.

Рисунок А.1 - Окно авторизации

После прохождения авторизации открывается главное окно программы, в котором необходимо выбрать дальнейшие действия (рисунок А.2).

Рисунок А.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;

QSqlQuery qwerty;

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

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

qwerty.next();

item->setText(QString::number(qwerty.value(2).toInt()));

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

}

}

}

}

void WorkWithTask::pushbutton_Add_ok() //добавление параметров пары

{

DbConnect db;//ПОД СЕБЯ СТРОЙ!!!!!!!!!!!

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

int size=db.dbSize(query);

int row_choosen_left=-1;

int row_choosen_right=-1;

int flag=1;

int flag_right=1;

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

if(tablewidget_parametres_left->item(i,0)->isSelected()){flag=0;row_choosen_left=i;}

if(tablewidget_parametres_right->item(i,0)->isSelected()){flag_right=0;row_choosen_right=i;}

}

if(((flag==1)||(flag_right==1))){

QMessageBox::information(this,"Ошибка","Сначала выберите оба параметра!");

return;

}

query.seek(-1);

int id_left; int id_right;

QString left_name;

QString right_name;

while(query.next()){

if(query.value(1).toString()==tablewidget_parametres_left->item(row_choosen_left,0)->text()){

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

left_name=tablewidget_parametres_left->item(row_choosen_left,0)->text();

}

if(query.value(1).toString()==tablewidget_parametres_right->item(row_choosen_right,0)->text()){

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

right_name=tablewidget_parametres_right->item(row_choosen_right,0)->text();

}

}

//будем добавлять в список пар-ов

bool flagbool=true;

for(int i=0;i<list_idparams_left_alreadyintable.size();i++){//проверка на уже выбранные пары параметров

if((id_left==list_idparams_left_alreadyintable.at(i))&&(id_right==list_idparams_right_alreadyintable.at(i))){

flagbool=false;

break;

}

}

if(!flagbool){

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

return;

}

query.clear();

query.exec("SELECT * FROM Altshuller WHERE id_parametr_left="+QString::number(id_left)

+" AND id_parametr_right="+QString::number(id_right));

size=db.dbSize(query);//теперь в сайзе приемы из альтшуллера

if(size==0){

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

return;

}

list_idparams_left_alreadyintable.append(id_left);

list_idparams_right_alreadyintable.append(id_right);

QListWidgetItem *item = new QListWidgetItem;

item->setText(left_name+" - "+right_name);

listwidget_params->addItem(item);

//теперь надо добавлять приемы к существующим(или не существующим)

query.seek(-1);

for(int i=0;i<size;i++){//добавляем только новые

query.next();

bool flag2=true;

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

if(query.value(2).toInt()==list_priems_alreadyintable.at(k)){

flag2=false;

break;

}

}

if(flag2){

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

QSqlQuery query_task_list;

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

float sum=0;float amount=0;

while(query_task_list.next()){

int id_task=query_task_list.value(0).toInt();

QSqlQuery query_task_inside;

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

+" AND id_priem="+QString::number(list_priems_alreadyintable.at(list_priems_alreadyintable.size()-1)));

while(query_task_inside.next()){//тут имеем все оценки конкретного приема конкретного юзера, в теории

QSqlQuery query_rates;

query_rates.exec("SELECT * FROM Rates WHERE id_rate="+QString::number(query_task_inside.value(2).toInt()));

query_rates.next();

if(query_rates.value(2).toInt()==0){

continue;

}

amount++;

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

}

}

float overallRate;

if(amount==0){

overallRate=0;

}else{

overallRate=round((sum/amount)*100)/100;

}

list_priems_overallRate_alreadyintable.append(overallRate);

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

}

}

tablewidget_priems->clear();//чистим значения из табл приемов и вставляем по новой

tablewidget_priems->setRowCount(0);

QStringList strlist;

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

tablewidget_priems->setHorizontalHeaderLabels(strlist);

//сортируем для начала по хай рейту

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;

QSqlQuery query_tooltip;

query_tooltip.exec("SELECT * FROM Rates");QString str_tooltip=("");

while(query_tooltip.next()){

str_tooltip.append(QString::number(query_tooltip.value(2).toInt())+" - "+query_tooltip.value(1).toString()+"\n");

}

item->setToolTip(str_tooltip);

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

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

QSqlQuery query_priem;

query_priem.exec("SELECT * FROM Task_inside_priems WHERE id_priem="+QString::number(list_priems_alreadyintable.at(i))

+" AND id_task="+QString::number(id_task_chosen));

int size=0;int rate;

while(query_priem.next()){

size++;

rate=query_priem.value(2).toInt();

}

if(size==0){

item->setText("0");

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

}else{

item->setText(QString::number(rate));

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

}

}else{

item->setText("0");

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

}

}

}

}

}

void WorkWithTask::pushbutton_give_rates_ok()

{

}

void WorkWithTask::tablewidget_priems_data_changed(int row, int col)

{

if(col==2){

// DbConnect db;

QSqlQuery query;

query.exec("SELECT * FROM RATES WHERE which_rate="+tablewidget_priems->item(row,col)->text());

int size=0;

while(query.next()){

size++;

}

if(size==0){

QMessageBox::information(this,"Ошибка","Выставленной оценки не существует\nБудет установлено стандартное значение 0\nДля просмотра существующих оценок посмотрите подсказку при наведении на ячейку");

tablewidget_priems->item(row,col)->setText("0");

}

}

}

void WorkWithTask::pushbutton_sprav_priemov_ok()

{

}

Размещено на Allbest.ru


Подобные документы

  • Анализ аналогов и выбор прототипа, разработка алгоритма и графического интерфейса, кодирование и тестирование. Логическая модель данных "Нотариальная контора". Особенности реализации в MS SQL. Требования к функциональным характеристикам базы данных.

    курсовая работа [1,3 M], добавлен 12.01.2013

  • Логическая модель и диаграмма потоков данных при моделировании информационной системы управления учебным процессом, ее надежность. Диаграмма прецедентов, классов концептуального уровня, компонентов и пакетов. Сетевой план выполнения проектных работ.

    дипломная работа [6,8 M], добавлен 15.05.2012

  • Контекстная диаграмма системы обслуживания и диаграмма декомпозиции. Обоснование необходимости внедрения информационной системы. Обзор существующих программных продуктов. ER-диаграмма системы, описание таблиц базы данных. Используемые системы кодирования.

    дипломная работа [577,2 K], добавлен 27.01.2014

  • Проектирование модели информационной системы "Склад" с помощью AllFusion Process Modeler 4.1 (Bpwin4.1). Диаграмма дерева узлов AS-TO-BE и AS-IS. ER-диаграмма потоков данных "Сущность-связь". Физическо-логическая модель базы данных в нотации IDEF1X.

    курсовая работа [2,4 M], добавлен 25.06.2014

  • Характеристика и принцип работы подсистемы-инсталлятора Windows Installer, ее структура и назначение. Порядок и варианты установки программ в ОС Linux, их преимущества и недостатки. Методика и основные этапы составления базы данных программ-аналогов.

    курсовая работа [369,2 K], добавлен 24.08.2009

  • Разработка модели информационной системы "Рыболовный магазин" с помощью СУБД Firebird. Компоненты программного продукта. Физическая диаграмма базы данных, обзор функций добавления, изменения, удаления и сортировки данных. Руководство администратора.

    курсовая работа [406,2 K], добавлен 21.02.2016

  • Назначение программы "Учёт пациентов" и её подсистемы. Диаграмма классов предметной области, диаграмма последовательностей, описание автоматизируемых функций и характеристика функциональной структуры. Физическая схема и описание таблиц базы данных.

    дипломная работа [3,3 M], добавлен 15.11.2016

  • Проектирование базы данных "Менеджер". Выбор системы проектирования и реализации. Задачи, выполняемые приложением. Технические требования, предъявляемые к базе данных. Ее информационно-логическая структура. Основные принципы работы с приложением.

    дипломная работа [2,5 M], добавлен 20.05.2013

  • Выбор средств разработки базы данных для информационного функционирования аэропорта. Выделение и нормализация сущностей. Логическая схема и физическая структура базы данных. Спецификация и тестирование функций, процедур, триггеров, представлений.

    курсовая работа [1,5 M], добавлен 07.06.2013

  • Системы автоматизированной обработки информации. Хранение большого объема информации. Понятие базы данных (БД). Обеспечение секретности данных. Уровни представления данных в БД. Логическая структура данных. Ограничения, накладываемые на данные.

    реферат [65,2 K], добавлен 26.11.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.