Разработка электронного учебного методического комплекса по изучению раздела "Симплексный метод решения задачи линейного программирования" дисциплины "Математические методы"

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

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

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

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

3. В случае возникновения пожара действовать в соответствии с Инструкцией по мерам пожарной безопасности, для тушения пожара в электроустановках (ПЭВМ и её составных частях) допускается использовать только углекислотные огнетушители типа ОУ.

9.5 Требования безопасности по окончании работ

1. Выключить ПЭВМ, ее составные части и затем вынуть вилку из сетевой розетки или отключить автомат на щите питания.

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

3. Уходя из помещения выключить освещение.

10. ЭКОНОМИЧЕСКАЯ ЧАСТЬ

10.1 Расчет экономической эффективности применения ПЭВМ для решения задачи

10.1.1 Расчет стоимости одного часа работы ПЭВМ

Расчет стоимости одного часа работы ПЭВМ производится по формуле:

, где

- затраты на содержание и обслуживание ПЭВМ;

- полезный фонд времени работы ПЭВМ;

- количество машин;

Затраты на содержание и обслуживание ПЭВМ рассчитываются по формуле:

, где

- зарплата обслуживающего персонала;

- взност, зачисляемый в государственные внебюджетные фонды;

- накладные расходы;

- амортизационные отчисления;

- затраты на ремонт оборудования;

- затраты на электроэнергию;

- затраты на материалы;

10.1.2 Расчет зарплаты обслуживающего персонала

Таблица 2 Обслуживающий персонал

Обслуживающий персонал

Заработная плата в месяц (руб.)

Количество работников (чел.)

Фонд заработной платы (руб.)

1

Начальник УВЦ

5440

1

5440

2

Инженер - программист

5040

1

5040

3

Оператор ЭВМ

4430

1

4430

Итого

14910

; , где

- заработная плата работника в месяц, данные приведены в таблице;

- количество машин, обслуживаемых работником;

- количество машин, на которых установлена программа;

;

;

;

;

;

;

Так как отсутствует дополнительная зарплата, .

10.1.3 Расчет взноса, зачисляемого в государственные внебюджетные фонды

Таблица 3 Ставка взноса, зачисляемого в государственные внебюджетные фонды

Государственные внебюджетные фонды

Ставка налога (%)

Пенсионный фонд РФ

20,0

Фонд социального страхования РФ

2,9

Фонд обязательного медицинского страхования РФ

3,1

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

0,2

Итого

26,2

, где

- ставка взноса, зачисляемого в государственные внебюджетные фонды;

;

10.1.4 Расчет накладных расходов

, где

- ставка накладных расходов (%);

;

;

10.1.5 Расчет амортизационных отчислений

, где

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

- ставка годовой нормы амортизации;

;

;

Таблица 4 Состав оборудования

Наименование оборудования

Цена за единицу (руб.)

Количество

Стоимость

Процессор

6000

3

18000

Материнская плата

4500

3

13500

Модуль памяти

1500

6

9000

Жесткий диск

5000

3

15000

Мышь

250

3

750

Устройство чтения CD - дисков

2000

3

6000

Накопитель на гибких дисках

300

3

900

Клавиатура

600

3

1800

Корпус

3000

3

9000

Монитор

5000

3

15000

Принтер лазерный

8550

1

8550

Итого

97500

10.1.6 Расчет затрат на ремонт оборудования

, где

- ставка годовых плановых затрат на ремонт оборудования (%);

;

;

10.1.7 Расчет затрат на электроэнергию

, где

- общая мощность оборудования;

- полезный фонд времени работы оборудования (час.)

- цена одного кВт/ч (руб.)

, где

- режимный фонд работы оборудования (час.);

- плановые затраты времени на профилактику и ремонт оборудования;

, где

- ставка плановых потерь на профилактику и ремонт оборудования (%);

;

, где

- количество календарных дней за период;

- количество выходных дней за период;

- количество праздничных дней за период;

- количество предпраздничных дней, в которые сокращается рабочий день;

- длительность смены;

- количество смен;

- количество часов, на которые сокращается рабочий день в предпраздничный день;

Таблица 5 Общая мощность оборудования

Наименование оборудования

Мощность единицы оборудования (кВт/ч)

Количество единиц оборудования

Суммарная мощность (кВт/ч)

Системный блок и монитор

0,48

3

1,29

Принтер

0,31

1

0,31

Итого

1,6

Расчетный месяц: апрель;

;

;

;

;

;

;

;

;

;

;

;

;

;

10.1.8 Расчет затрат на материалы

По данным бухгалтерии затраты на материалы в месяц составили 670 рублей. ( руб.)

10.2 Расчет стоимости одного часа работы ПЭВМ

;

;

Структура стоимости одного часа работы ПЭВМ

Таблица 6 Структура стоимости одного часа работы ПЭВМ

Элементы затрат

Сумма (руб.)

Удельный вес (%)

1

Заработная плата обслуживающему персоналу

2982

30,47%

2

Взнос, зачисляемый в государственные внебюджетные фонды

781,284

7,98%

3

Накладные расходы

2564,52

26,20%

4

Амортизационные отчисления

812,5

8,30%

5

Затраты на ремонт оборудования

975

9,96%

6

Затраты на электроэнергию

1001,8406

10,24%

7

Затраты на материалы

670

6,85%

Итого

9787,144

100%

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

10.3.1 Расчет стоимости решения задачи на ПЭВМ

Стоимость решения задачи на ПЭВМ рассчитывается по формуле:

, где

- заработная плата руководителя;

- заработная плата студента;

- взнос, зачисляемый в государственные внебюджетные фонды;

- накладные расходы;

- затраты на материалы, используемые при составлении и отладке программы;

- затраты времени на отладку программы и решения её на ПЭВМ;

10.3.2 Расчет заработной платы руководителя

, где

- время, отводимое на консультации по курсовому проектированию;

- часовая тарифная ставка руководителя;

- количество студентов в группе;

;

;

;

;

10.3.3 Расчет заработной платы студента

, где

- стипендия студента;

- количество учебных часов в месяц;

- затраты времени на отладку программы и решения ее на ПЭВМ;

, где

- средняя занятость в течение дня;

- количество дней для отладки программы;

;

;

- количество рабочих дней в месяце;

;

;

;

;

10.3.4 Расчет взноса, зачисляемого в государственные внебюджетные фонды

, где

- ставка взноса, зачисляемого в государственные внебюджетные фонды;

;

;

10.3.5 Расчет накладных расходов

, где

- ставка накладных расходов;

;

;

10.3.6 Расчет затрат на материалы, используемые при составлении и отладке программы

Таблица 7 материалы, используемые при составлении и отладке программы

Наименования материалов

Цена за единицу (руб.)

Количество

Стоимость (руб.)

Бумага

0,4

35

14

Ручка

10

1

10

Диск

15

1

15

Картридж

1

35

35

Итого

74

;

;

10.4 Расчет стоимости решения задачи вручную

Стоимость решения задачи вручную рассчитывается по формуле:

, где

- затраты времени на решение задачи вручную;

- часовая ставка решающего задачи (руб.);

;

;

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

10.5 Расчет показателей экономической эффективности

10.5.1 Расчет экономии труда за счет применения ПЭВМ

, где

- предлагаемое число обращений к программе;

- затраты времени на составление и отладку программы на ПЭВМ;

- время решения задачи на ПЭВМ;

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

, где

- средняя занятость в течение дня;

- количество дней на составление и отладку программы на ПЭВМ;

;

;

10.5.3 Расчет времени решения задачи на ПЭВМ

, где

- время ввода исходной информации;

- машинное время;

- время вывода информации на печать;

;

;

;

;

10.5.4 Расчет предполагаемого числа обращений к программе

10.6 Расчет денежной экономической эффективности применения ПЭВМ

, где

- стоимость решения задачи вручную;

- стоимость решения задачи на ПЭВМ;

- затраты на работу программы;

10.6.1 Расчет затрат на работу программы

, где

- стоимость одного часа работы ПЭВМ;

- время решения задачи на ПЭВМ;

;

;

10.6.2 Расчет роста производительности труда от применения ПЭВМ

, где

- показатель экономии труда за счет применения ПЭВМ;

- затраты времени на решение задачи вручную;

- предлагаемое число обращений к программе;

;

ЗАКЛЮЧЕНИЕ

В данной дипломной работе я реализовал решение задачи линейного программирования Симплекс - методом в программе. Программа была написана на языке C++ в среде Borland C++ Builder 6.0. Программа предусматривает решение задач Симплекс - методом, условие которых приведено к стандартному виду.

Программа состоит из двух независимых модулей: модуля решения задачи «Symplex» и модуля системы тестового контроля знаний студентов «eTest».

Модуль «Symplex» представляет собой окно с элементами интерфейса, в которые вводятся исходные данные, с которыми производится решение задачи в данном модуле.

Модуль «eTest» представляет собой систему таблиц, организованных в базу данных. Это необходимо для организации хранения информации о пользователях, о тестировании и для разграничения прав доступа к данному модулю.

Ввод вопрос в базу данных вопросов тестирования обеспечивается внутренним юнитом модуля «Конструктор вопросов».

Достоинства программы:

· Не требует установки, что обеспечивает меньше затрат времени на подготовку к использованию;

· Простой интуитивно понятный интерфейс;

· Возможность изменять количество коэффициентов функции и количества ограничений системы ограничений при вводе исходных данных;

· Проверка правильности ввода всех данных сразу и вывод полной информации об ошибках, если такие обнаружены;

· Возможность вывода полноценного, отформатированного и понятного пользователю, отчета, содержащего все промежуточные расчеты;

· Возможность распечатки отчета;

· Возможность проводить тестовый контроль знаний;

· Возможность формировать банк тестовых заданий из двух типов вопросов;

· Возможность задавать «неограниченное» число вопросов с «неограниченным» количеством вариантов ответа;

· Возможность загрузки графических элементов, сопровождающих вопрос;

· Расширенная система управления модулем тестирования и формирования отчетности о проведении тестирования;

· Защищенность базы данных;

Недостатки программы:

· Возможность решения задач только одного типа;

· Работа только в одной операционной системе;

· Нет многопользовательского режима работы с базой;

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Волков И.К., Загоруйко Е.А., Исследование операций, Москва, издательство МГТУ им. Н.Э. Баумана, 2000

2. Кофман А., Анри-Лабордер А., Методы и модели исследования операций. Том3. Целочисленное программирование, изд. «МИР», Москва, 1977

3. Культин Н. Б. Самоучитель C++ Builder. - Санкт-Петербург.: БХВ -Петербург , 2004

4. Архангельский А.Я., С++ Builder 6, «БИНОМ», 2002

5. Пахомов Б.И., Borland C++ Builder для начинающих, Санкт-Петербург.: БХВ -Петербург , 2007

6. Материалы с сайта http://simplex-metod.narod.ru/

ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ

Модуль Symplex

Unit1

//---------------------------------------------------------------------------

#include <vcl.h>

#include <vcl\math.hpp>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

int i;

StringGrid1->ColCount=CSpinEdit1->Value;

for(i=1;i<=StringGrid1->ColCount;i++)

{

StringGrid1->Cells[i-1][0]="X"+AnsiString(i);

}

for(i=1;i<=StringGrid2->ColCount-3;i++)

{

StringGrid2->Cells[i][0]="X"+AnsiString(i);

}

StringGrid2->Cells[StringGrid2->ColCount-2][0]="Знак";

StringGrid2->Cells[StringGrid2->ColCount-1][0]="Своб.член";

for(i=1;i<=StringGrid2->RowCount;i++)

{

StringGrid2->Cells[0][i]=AnsiString(i);

}

for(i=1;i<=StringGrid2->RowCount-1;i++)

{

StringGrid2->Cells[StringGrid2->ColCount-2][i]="<=";

}

ComboBox1->ItemIndex=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int i;

StringGrid1->ColCount=CSpinEdit1->Value;

for(i=1;i<=StringGrid1->ColCount;i++)

{

StringGrid1->Cells[i-1][0]="X"+AnsiString(i);

}

StringGrid2->ColCount=CSpinEdit1->Value+3;

for(i=1;i<=StringGrid2->ColCount-3;i++)

{

StringGrid2->Cells[i][0]="X"+AnsiString(i);

}

StringGrid2->Cells[StringGrid2->ColCount-2][0]="Знак";

StringGrid2->Cells[StringGrid2->ColCount-1][0]="Своб.член";

for(i=1;i<=StringGrid2->RowCount-1;i++)

{

StringGrid2->Cells[StringGrid2->ColCount-2][i]="<=";

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinEdit1KeyPress(TObject *Sender, char &Key)

{

if(((Key >= '0')&&(Key <= '9'))||(Key == VK_CLEAR)||(Key == VK_BACK))return;

Key = 0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinEdit2KeyPress(TObject *Sender, char &Key)

{

if(((Key >= '0')&&(Key <= '9'))||(Key == VK_CLEAR)||(Key == VK_BACK))return;

Key = 0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int i;

StringGrid2->RowCount=CSpinEdit2->Value+1;

for(i=1;i<=StringGrid2->RowCount;i++)

{

StringGrid2->Cells[0][i]=AnsiString(i);

}

for(i=1;i<=StringGrid2->RowCount-1;i++)

{

StringGrid2->Cells[StringGrid2->ColCount-2][i]="<=";

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)

{

if(((Key >= '0')&&(Key <= '9'))||(Key == ',')||(Key == '-')||(Key == VK_CLEAR)||(Key == VK_BACK))return;

Key = 0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid2KeyPress(TObject *Sender, char &Key)

{

if(((Key >= '0')&&(Key <= '9'))||(Key == ',')||(Key == '-')||(Key == VK_CLEAR)||(Key == VK_BACK))return;

Key = 0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

int i,j;

for(i=0;i<StringGrid1->ColCount;i++)

{

StringGrid1->Cells[i][1]="";

}

for(j=1;j<=StringGrid2->RowCount-1;j++)

{

for(i=1;i<=StringGrid2->ColCount-3;i++)

{

StringGrid2->Cells[i][j]="";

}

}

for(i=1;i<=StringGrid2->RowCount-1;i++)

{

StringGrid2->Cells[StringGrid2->ColCount-1][i]="";

}

Button6->Enabled=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid2SelectCell(TObject *Sender, int ACol,

int ARow, bool &CanSelect)

{

if(ACol==StringGrid2->ColCount-2)

{

CanSelect=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

//Проверка правильности ввода исходных данных

int i,j;

AnsiString Err, err1,err2;

int e1,e2;

e1=0;

e2=0;

Err="Не введены исходные данные:\n\n";

for(i=0;i<=StringGrid1->ColCount-1;i++)

{

if(StringGrid1->Cells[i][1]=="")

{

e1=1;

}

}

if(e1==1)

{

err1="в таблице коэффициентов,соответствующие полям:\n";

for(i=0;i<=StringGrid1->ColCount-1;i++)

if(StringGrid1->Cells[i][1]=="")

{

err1=err1+StringGrid1->Cells[i][0]+";\n";

}

Err=Err+err1;

}

for(i=0;i<=StringGrid2->ColCount-1;i++)

{

for(j=1;j<=StringGrid2->RowCount-1;j++)

if(StringGrid2->Cells[i][j]=="")

{

e2=1;

}

}

if(e2==1)

{

err2="\nв таблице системы ограничений, соответствующие полям:\n";

for(i=0;i<=StringGrid2->ColCount-1;i++)

{

for(j=1;j<=StringGrid2->RowCount-1;j++)

{

if(StringGrid2->Cells[i][j]=="")

{

err2=err2+StringGrid2->Cells[i][0]+" на строке № "+IntToStr(j)+";\n";

}

}

}

Err=Err+err2;

}

if(e1==1 || e2==1)

{

ShowMessage(Err);return;

}

if(ComboBox1->ItemIndex==-1)

{

ShowMessage("Не выбрано, к чему стремится функция");

return;

}

Memo1->Clear();

Memo1->Lines->SaveToFile("Report.html");

Memo1->Lines->Add("<html>");

Memo1->Lines->Add("<head>");

Memo1->Lines->Add("<title>Отчет</title>");

Memo1->Lines->Add("<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>");

Memo1->Lines->Add("</head>");

Memo1->Lines->Add("<body>");

Memo1->Lines->Add("<center><h2><u>Отчет по решению</u></h2></center></br>");

Memo1->Lines->Add("<center><b><u>Условия задачи:</u></b></center></br>");

Memo1->Lines->Add("<left><b>Целевая функция:</b></left></br>");

Memo1->Lines->Add("<I>f</I>=");

for(i=0;i<StringGrid1->ColCount;i++)

{

if(StrToFloat(StringGrid1->Cells[i][1])>0)

{

if(i==0)

{

Memo1->Lines->Add(StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

else

{

Memo1->Lines->Add("+"+StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

}

else

{

Memo1->Lines->Add(StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

}

Memo1->Lines->Add("<th>&rarr;</th>");

Memo1->Lines->Add(ComboBox1->Text);

Memo1->Lines->Add("</left></br></br>");

Memo1->Lines->Add("<left><b>Система ограничений:</b></left></br>");

for(j=1;j<=StringGrid2->RowCount-1;j++)

{

for(i=1;i<=StringGrid2->ColCount-3;i++)

{

if(StrToFloat(StringGrid2->Cells[i-1][j])>0)

{

if(i==1)

{

Memo1->Lines->Add(StringGrid2->Cells[i][j]+"x<sub>"+i+"</sub>");

}

else

{

Memo1->Lines->Add("+"+StringGrid2->Cells[i][j]+"x<sub>"+i+"</sub>");

}

}

else

{

Memo1->Lines->Add(StringGrid2->Cells[i-1][j]+"x<sub>"+i+"</sub>");

}

}

Memo1->Lines->Add(StringGrid2->Cells[StringGrid2->ColCount-2][j]);

Memo1->Lines->Add(StringGrid2->Cells[StringGrid2->ColCount-1][j]);

Memo1->Lines->Add("</br>");

}

Memo1->Lines->Add("<center><b><u>Решение:</u></b></center></br></br>");

Memo1->Lines->Add("Задача представленна в общем виде. Необходимо преобразовать ее в вид ОЗЛП</br>");

double convert;//Переменная для конвертирования//

//если функция стремится к минимуму

Memo1->Lines->Add("В этом случае функция примет вид:</br>");

if(ComboBox1->Text=="Min")

{

for(i=0;i<StringGrid1->ColCount;i++)

{

convert=StrToFloat(StringGrid1->Cells[i][1]);

convert=convert*(-1);

StringGrid1->Cells[i][1]=convert;

}

ComboBox1->Text="Max";

}

Memo1->Lines->Add("<I>f</I>=");

for(i=0;i<StringGrid1->ColCount;i++)

{

if(StrToFloat(StringGrid1->Cells[i][1])>0)

{

if(i==0)

{

Memo1->Lines->Add(StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

else

{

Memo1->Lines->Add("+"+StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

}

else

{

Memo1->Lines->Add(StringGrid1->Cells[i][1]+"x<sub>"+(i+1)+"</sub>");

}

}

Memo1->Lines->Add("<th>&rarr;</th>");

Memo1->Lines->Add(ComboBox1->Text+"</br>");

Memo1->Lines->Add("А система ограничений примет вид:</br>");

//Формирование матрицы 3

StringGrid3->ColCount=CSpinEdit1->Value+2+CSpinEdit2->Value;

StringGrid3->RowCount=StringGrid2->RowCount+1;

//Заполнение статических ячеек

StringGrid3->Cells[0][0]="Базис";

StringGrid3->Cells[1][0]="План";

for(i=2;i<=StringGrid3->ColCount;i++)

{

StringGrid3->Cells[i][0]="X"+AnsiString(i-1);

}

for(i=1;i<=StringGrid3->RowCount-2;i++)

{

StringGrid3->Cells[0][i]="X"+AnsiString(i+StringGrid1->ColCount);

}

StringGrid3->Cells[0][StringGrid3->RowCount-1]="F'";

//Перенос из матрицы 2 в матрицу 3

for(j=1;j<=StringGrid2->RowCount-1;j++)

{

for(i=1;i<=StringGrid2->ColCount-3;i++)

{

StringGrid3->Cells[i+1][j]=StringGrid2->Cells[i][j];

}

}

//Добавление единичной матрицы

for(j=1;j<=StringGrid3->RowCount-2;j++)

{

for(i=1;i<=StringGrid3->ColCount-1;i++)

{

if(i==j)

{

StringGrid3->Cells[i+1+StringGrid1->ColCount][j]=1;

}

else

{

StringGrid3->Cells[i+1+StringGrid1->ColCount][j]=0;

}

}

}

//Добавление столбца свободных членов

for(i=1;i<=StringGrid2->RowCount-1;i++)

{

StringGrid3->Cells[1][i]=StringGrid2->Cells[StringGrid2->ColCount-1][i];

}

for(j=1;j<=StringGrid3->RowCount-2;j++)

{

for(i=2;i<=StringGrid3->ColCount-1;i++)

{

if(StrToFloat(StringGrid3->Cells[i][j])>0)

{

if(i==2)

{

Memo1->Lines->Add(StringGrid3->Cells[i][j]+"x<sub>"+(i-1)+"</sub>");

}

else

{

Memo1->Lines->Add("+"+StringGrid3->Cells[i][j]+"x<sub>"+(i-1)+"</sub>");

}

}

else

{

Memo1->Lines->Add(StringGrid3->Cells[i][j]+"x<sub>"+(i-1)+"</sub>");

}

}

Memo1->Lines->Add("=");

Memo1->Lines->Add(StringGrid3->Cells[1][j]);

Memo1->Lines->Add("</br>");

}

//заполнение нулями нижней строки

for(i=1;i<=StringGrid3->ColCount-1;i++)

{

StringGrid3->Cells[i][StringGrid3->RowCount-1]=0;

}

//Заполнение нижней строки

for(i=1;i<=StringGrid1->ColCount;i++)

{

convert=StrToFloat(StringGrid1->Cells[i-1][1]);

convert=convert*(-1);

StringGrid3->Cells[i+1][StringGrid3->RowCount-1]=convert;

}

int NCC=0;

Memo1->Lines->Add("После всех преобразований можно стоставить Симплекс таблицу.</br>Исходная Симплекс - таблица:");

cc:;//Поиск отрицательных элементов в нижней строке

int OtrStr=0;

for(i=2;i<=StringGrid3->ColCount-1;i++)

{

if(StrToFloat(StringGrid3->Cells[i][StringGrid3->RowCount-1])<0)

{

OtrStr++;

}

}

if(OtrStr!=0)

{NCC++;

//Поиск минимального элемента в нижней строке

double MinStlb;

int NomStlb;

MinStlb=StrToFloat(StringGrid3->Cells[2][StringGrid3->RowCount-1]);

NomStlb=2;

for(i=2;i<=StringGrid3->ColCount-1;i++)

{

if(MinStlb>StrToFloat(StringGrid3->Cells[i][StringGrid3->RowCount-1]))

{

MinStlb=StrToFloat(StringGrid3->Cells[i][StringGrid3->RowCount-1]);

NomStlb=i;

}

}

//Поиск положительных элементов в минимальном столбце

int PolStlb=0;

for(i=1;i<=StringGrid3->RowCount-2;i++)

{

if(StrToFloat(StringGrid3->Cells[NomStlb][i])>0)

{

PolStlb++;

}

}

if(PolStlb!=0)

{

//Поиск минимального отношения в столбце

struct MinOt { double Val; int Numb;}; MinOt *Mss = new MinOt [10];

int k=1;

int NomStr;

double MinStr;

for(i=1;i<=StringGrid3->RowCount-2;i++)

{

if(StrToFloat(StringGrid3->Cells[NomStlb][i])>0)

{

Mss[k].Val=StrToFloat(StringGrid3->Cells[1][i])/StrToFloat(StringGrid3->Cells[NomStlb][i]);

Mss[k].Numb=i;

k++;

}

}

MinStlb=Mss[1].Val;

NomStr=Mss[1].Numb;

for(i=1;i<=PolStlb;i++)

{

if(MinStlb>Mss[i].Val)

{

MinStlb=Mss[i].Val;

NomStr=Mss[i].Numb;

}

}

Memo1->Lines->Add("</br>Цикл "+AnsiString(NCC));

Memo1->Lines->Add("<table border='1'>");

for(j=0;j<=StringGrid3->RowCount-1;j++)

{

Memo1->Lines->Add("<tr align='center'>");

for(i=0;i<=StringGrid3->ColCount-1;i++)

{

if(i==0 || j==0)

{

Memo1->Lines->Add("<td bgcolor='#d3d3d3'>"+StringGrid3->Cells[i][j]+"</td>");

}

else

{

if(i==NomStlb && j==NomStr)

{

Memo1->Lines->Add("<td bgcolor='#ff0000'><b>"+StringGrid3->Cells[i][j]+"</b></td>");

}

else

{

if(j==NomStr)

{

Memo1->Lines->Add("<td bgcolor='#ddadaf'>"+StringGrid3->Cells[i][j]+"</td>");

}

else

{

if(i==NomStlb)

{

Memo1->Lines->Add("<td bgcolor='#ccff00'>"+StringGrid3->Cells[i][j]+"</td>");

}

else

{

Memo1->Lines->Add("<td bgcolor='#ffffff'>"+StringGrid3->Cells[i][j]+"</td>");

}

}

}

}

}

Memo1->Lines->Add("</tr>");

}

Memo1->Lines->Add("</table>");

Memo1->Lines->Add("</br>");

Memo1->Lines->Add("Из базиса выводится переменная "+StringGrid3->Cells[0][NomStr]+", а вводится - "+StringGrid3->Cells[NomStlb][0]+"</br>");

Memo1->Lines->Add("Новое значение: F="+StringGrid3->Cells[1][StringGrid3->RowCount-1]+";</br>");

Memo1->Lines->Add("Новый опорный план: ");

for(i=1;i<=StringGrid3->RowCount-2;i++)

{

Memo1->Lines->Add(StringGrid3->Cells[0][i]+"="+StringGrid3->Cells[1][i]+"; ");

}

//Замена строки /-/ столбца

StringGrid3->Cells[0][NomStr]=StringGrid3->Cells[NomStlb][0];

//Деление всех элементов разрешающей строки на разрешающий элемент

double Rest;

double RazEl;

RazEl=StrToFloat(StringGrid3->Cells[NomStlb][NomStr]);

for(i=1;i<=StringGrid3->ColCount-1;i++)

{

convert=StrToFloat(StringGrid3->Cells[i][NomStr]);

Rest=convert/RazEl;

StringGrid3->Cells[i][NomStr]=RoundTo(Rest,-2);

}

//Преобразование столбца свободных счленов

double TekZn, RazZn, KonZn;

for(i=1;i<=StringGrid3->RowCount-1;i++)

{

if(i!=NomStr)

{

TekZn=StrToFloat(StringGrid3->Cells[1][i]);

RazZn=StrToFloat(StringGrid3->Cells[NomStlb][i]);

KonZn=StrToFloat(StringGrid3->Cells[1][NomStr]);

Rest=TekZn-RazZn*KonZn;

StringGrid3->Cells[1][i]=RoundTo(Rest,-2);

}

}

//Преобразование основного массива

for(j=1;j<=StringGrid3->RowCount-1;j++)

{

for(i=2;i<=StringGrid3->ColCount-1;i++)

{

if(j!=NomStr && i!=NomStlb)

{

TekZn=StrToFloat(StringGrid3->Cells[i][j]);

RazZn=StrToFloat(StringGrid3->Cells[NomStlb][j]);

KonZn=StrToFloat(StringGrid3->Cells[i][NomStr]);

Rest=TekZn-RazZn*KonZn;

StringGrid3->Cells[i][j]=RoundTo(Rest,-2);

}

}

}

//Преобразование разрешающего столбца

for(i=1;i<=StringGrid3->RowCount-1;i++)

{

if(i!=NomStr)

{

TekZn=StrToFloat(StringGrid3->Cells[NomStlb][i]);

RazZn=StrToFloat(StringGrid3->Cells[NomStlb][i]);

KonZn=StrToFloat(StringGrid3->Cells[NomStlb][NomStr]);

Rest=TekZn-RazZn*KonZn;

StringGrid3->Cells[NomStlb][i]=RoundTo(Rest,-2);

}

}

goto cc;

}

else

{

Memo1->Lines->Add("</br>Цикл "+AnsiString(NCC));

Memo1->Lines->Add("<table border='1'>");

for(j=0;j<=StringGrid3->RowCount-1;j++)

{

Memo1->Lines->Add("<tr align='center'>");

for(i=0;i<=StringGrid3->ColCount-1;i++)

{

if(i==0 || j==0)

{

Memo1->Lines->Add("<td bgcolor='#d3d3d3'>"+StringGrid3->Cells[i][j]+"</td>");

}

else

{

Memo1->Lines->Add("<td bgcolor='#ffffff'>"+StringGrid3->Cells[i][j]+"</td>");

}

}

Memo1->Lines->Add("</tr>");

}

Memo1->Lines->Add("</table>");

Memo1->Lines->Add("</br>");

Memo1->Lines->Add("</br>Нет решения</br>");

ShowMessage("Нет решения");

Memo1->Lines->SaveToFile("Report.html");

Button6->Enabled=true;

}

}

else

{

Memo1->Lines->Add("</br>Цикл "+AnsiString(NCC));

Memo1->Lines->Add("<table border='1'>");

for(j=0;j<=StringGrid3->RowCount-1;j++)

{

Memo1->Lines->Add("<tr align='center'>");

for(i=0;i<=StringGrid3->ColCount-1;i++)

{

if(i==0 || j==0)

{

Memo1->Lines->Add("<td bgcolor='#d3d3d3'>"+StringGrid3->Cells[i][j]+"</td>");

}

else

{

Memo1->Lines->Add("<td bgcolor='#ffffff'>"+StringGrid3->Cells[i][j]+"</td>");

}

}

Memo1->Lines->Add("</tr>");

}

Memo1->Lines->Add("</table>");

Memo1->Lines->Add("</br>");

Memo1->Lines->Add("Найден оптимальный план</br>");

Memo1->Lines->Add("Итоговое значение: F="+StringGrid3->Cells[1][StringGrid3->RowCount-1]+";</br>");

Memo1->Lines->Add("Итоговый опорный план: ");

for(i=1;i<=StringGrid3->RowCount-2;i++)

{

Memo1->Lines->Add(StringGrid3->Cells[0][i]+"="+StringGrid3->Cells[1][i]+"; ");

}

ShowMessage("Найден оптимальный план");

Memo1->Lines->SaveToFile("Report.html");

Button6->Enabled=true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

ShellExecute(Handle,0,"eTest.exe",0,0,0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

Unit2

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "SHDocVw_OCX"

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button2Click(TObject *Sender)

{

Form2->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

CppWebBrowser1->ExecWB(::OLECMDID_PRINT, ::OLECMDEXECOPT_DONTPROMPTUSER);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)

{

TCHAR buffer[MAX_PATH];

GetCurrentDirectory(sizeof(buffer),buffer);

String dir=AnsiString(buffer);

CppWebBrowser1->Navigate(WideString(dir+"/Report.html"));

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormActivate(TObject *Sender)

{

TCHAR buffer[MAX_PATH];

GetCurrentDirectory(sizeof(buffer),buffer);

String dir=AnsiString(buffer);

CppWebBrowser1->Navigate(WideString(dir+"/Report.html"));

}

Модуль eTest

Unit1

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

#include "Unit7.h"

#include "Unit8.h"

#include "Unit9.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int ID;

AnsiString Login;

AnsiString sName;

AnsiString SurName;

AnsiString Group;

AnsiString Status;

AnsiString DateOfRegist;

AnsiString TimeOfRegist;

AnsiString Lock;

AnsiString AVTORIZ="NO";

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N8Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N6Click(TObject *Sender)

{

if(MessageDlg("Завершить сеанс ?", mtWarning, TMsgDlgButtons() <<mbYes << mbNo, 0)==mrYes)

{

ID=0;

Login="";

sName="";

SurName="";

Group="";

Status="";

DateOfRegist="";

TimeOfRegist="";

Lock=0;

AVTORIZ="NO";

Form1->N4->Enabled=true;

Form1->N5->Enabled=true;

Form1->N6->Enabled=false;

Form1->N7->Enabled=false;

Form1->N9->Enabled=false;

Form1->N10->Enabled=false;

}

else

{return;}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N7Click(TObject *Sender)

{

Form6->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N10Click(TObject *Sender)

{

Form4->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Form4->Show();

Form9->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

AnsiString Type;

if(AVTORIZ=="NO")

{

ShowMessage("Пройдите процедуру авторизации");

Form5->Show();

}

else

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select Type From Questions Where ID=1";

DM3->ADOQuery1->Active=true;

if(Form4->DBGrid1->Columns->Items[0]->Field->Value.IsNull())

{

ShowMessage("Нет вопросов в базе");

}

else

{

Type=Form4->DBGrid1->Columns->Items[0]->Field->Value;

}

Form9->Show();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N9Click(TObject *Sender)

{

Form9->Show();

}

//---------------------------------------------------------------------------

Unit2

//---------------------------------------------------------------------------

#include <vcl.h>

#include <md5.h>

#include <md5.cpp>

#include <DateUtils.hpp>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button2Click(TObject *Sender)

{

Form2->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button3Click(TObject *Sender)

{

Edit1->Text="";

Edit2->Text="";

Edit3->Text="";

Edit4->Text="";

Edit5->Text="";

Edit6->Text="";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

//Проверка правильности заполнения полей

AnsiString Error="Регистрация не может бытьпроизведена:";

int err=0;

if(Edit1->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Логин'";

}

if(Edit2->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Пароль'";

}

if(Edit3->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Подтверждение пароля'";

}

if(Edit4->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Имя'";

}

if(Edit5->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Фамилия'";

}

if(Edit6->Text=="")

{

err++;

Error=Error+"\nНе заполнено поле 'Группа'";

}

if(Edit2->Text!=Edit3->Text)

{

err++;

Error=Error+"\nВведенные пароли не совпадают";

}

if(err!=0)

{

ShowMessage(Error);

return;

}

//Проверка повтора логина

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="SELECT * FROM Users Where Login='"+Edit1->Text+"'";

DM3->ADOQuery1->Active=true;

//Определение текущих даты / времени

TDateTime DATE;

DATE=Now();

int MaxIDU;

if(Form4->DBGrid1->Columns->Items[1]->Field->Value.IsNull())

{

//Получаем максимальный ID пользователя

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select Max(ID) From Users";

DM3->ADOQuery1->Active=true;

if(Form4->DBGrid1->Columns->Items[0]->Field->Value.IsNull())

{

MaxIDU=1;

}

else

{

MaxIDU=Form4->DBGrid1->Columns->Items[0]->Field->Value;

MaxIDU++;

}

DM3->ADOCommand1->CommandText="INSERT INTO Users VALUES("+IntToStr(MaxIDU)+",'"+Edit1->Text+"','"+MD5(Edit2->Text)+"','"+Edit4->Text+"','"+Edit5->Text+"','"+Edit6->Text+"','Student','"+DateToStr(DATE)+"','"+TimeToStr(DATE)+"','0')";

DM3->ADOCommand1->Execute();

}

else

{

ShowMessage("Логин "+Edit1->Text+" уже используется.\nПожалуйста, введите другой Логин.");

Edit1->Text="";

return;

}

ShowMessage("Регистрация успешно произведена.\nЛогин: "+Edit1->Text+"\nИмя: "+Edit4->Text+"\nФамилия: "+Edit5->Text+"\nГруппа: "+Edit6->Text);

Edit1->Text="";

Edit2->Text="";

Edit3->Text="";

Edit4->Text="";

Edit5->Text="";

Edit6->Text="";

Form2->Close();

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)

{

}

//---------------------------------------------------------------------------

Unit4

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

#include "Unit7.h"

#include "Unit8.h"

#include "Unit9.h"

#include "Unit10.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

//---------------------------------------------------------------------------

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm4::RadioButton4Click(TObject *Sender)

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select * From Users";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

DBGrid1->Columns->Items[4]->Width=90;

DBGrid1->Columns->Items[5]->Width=90;

DBGrid1->Columns->Items[6]->Width=90;

DBGrid1->Columns->Items[7]->Width=90;

DBGrid1->Columns->Items[8]->Width=90;

DBGrid1->Columns->Items[9]->Width=90;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::RadioButton3Click(TObject *Sender)

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select * From Questions";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::RadioButton2Click(TObject *Sender)

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="SELECT Questions.ID, Questions.Question, Ansvers.ID, Ansvers.IDQ, Ansvers.Ansver, Ansvers.[True] FROM Questions INNER JOIN Ansvers ON Questions.ID = Ansvers.IDQ;";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

DBGrid1->Columns->Items[4]->Width=90;

DBGrid1->Columns->Items[5]->Width=90;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::RadioButton1Click(TObject *Sender)

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="SELECT * FROM TestResult";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

DBGrid1->Columns->Items[4]->Width=90;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button2Click(TObject *Sender)

{

int i;

AnsiString D;

if(MaskEdit1->Text==" . . ")

{

ShowMessage("Введите дату");

return;

}

D=MaskEdit1->Text;

D[3]='/';

D[6]='/';

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="SELECT Users.ID, Users.Login, Users.sName, Users.Surname, Users.Group, Users.Status, TestResult.DateOfTest, TestResult.OTC, TestResult.FileName FROM Users INNER JOIN TestResult ON Users.ID = TestResult.IDS Where DateOfTest = #"+D+"#";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

DBGrid1->Columns->Items[4]->Width=90;

DBGrid1->Columns->Items[5]->Width=90;

DBGrid1->Columns->Items[6]->Width=90;

DBGrid1->Columns->Items[7]->Width=90;

DBGrid1->Columns->Items[8]->Width=90;

Memo1->Clear();

Memo1->Lines->SaveToFile("AdminReport.html");

Memo1->Lines->Add("<html>");

Memo1->Lines->Add("<head>");

Memo1->Lines->Add("<title>Быстрый отчет</title>");

Memo1->Lines->Add("<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>");

Memo1->Lines->Add("</head>");

Memo1->Lines->Add("<body>");

Memo1->Lines->Add("<center><h2>Отчет за "+MaskEdit1->Text+"</h2></center>");

Memo1->Lines->Add("<table border='1'>");

Memo1->Lines->Add("<tr bgcolor='#d3d3d3' align='center'><td>ID Пользователя</td><td>Логин</td><td>Имя</td><td>Фамилия</td><td>Группа</td><td>Статус</td><td>Дата тестирования</td><td>Оценка</td><td>Файл отчета</td></tr>");

DBGrid1->DataSource->DataSet->First();

while(!DBGrid1->DataSource->DataSet->Eof)

{

Memo1->Lines->Add("<tr align='center'><td>"+DBGrid1->Columns->Items[0]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[1]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[2]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[3]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[4]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[5]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[6]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[7]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[8]->Field->Value+"</td></tr>");

DBGrid1->DataSource->DataSet->Next();

}

Memo1->Lines->Add("</table>");

Memo1->Lines->SaveToFile("AdminReport.html");

Form10->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button3Click(TObject *Sender)

{

int i;

AnsiString D1, D2;

if(MaskEdit2->Text==" . . ")

{

ShowMessage("Введите дату 'C'");

return;

}

if(MaskEdit3->Text==" . . ")

{

ShowMessage("Введите дату 'По'");

return;

}

D1=MaskEdit2->Text;

D1[3]='/';

D1[6]='/';

D2=MaskEdit3->Text;

D2[3]='/';

D2[6]='/';

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="SELECT Users.ID, Users.Login, Users.sName, Users.Surname, Users.Group, Users.Status, TestResult.DateOfTest, TestResult.OTC, TestResult.FileName FROM Users INNER JOIN TestResult ON Users.ID = TestResult.IDS Where DateOfTest Between #"+D1+"# and #"+D2+"#";

DM3->ADOQuery1->Active=true;

DBGrid1->Columns->Items[0]->Width=90;

DBGrid1->Columns->Items[1]->Width=90;

DBGrid1->Columns->Items[2]->Width=90;

DBGrid1->Columns->Items[3]->Width=90;

DBGrid1->Columns->Items[4]->Width=90;

DBGrid1->Columns->Items[5]->Width=90;

DBGrid1->Columns->Items[6]->Width=90;

DBGrid1->Columns->Items[7]->Width=90;

DBGrid1->Columns->Items[8]->Width=90;

Memo1->Clear();

Memo1->Lines->SaveToFile("AdminReport.html");

Memo1->Lines->Add("<html>");

Memo1->Lines->Add("<head>");

Memo1->Lines->Add("<title>Быстрый отчет</title>");

Memo1->Lines->Add("<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>");

Memo1->Lines->Add("</head>");

Memo1->Lines->Add("<body>");

Memo1->Lines->Add("<center><h2>Отчет за период с "+MaskEdit2->Text+" по "+MaskEdit3->Text+"</h2></center>");

Memo1->Lines->Add("<table border='1'>");

Memo1->Lines->Add("<tr bgcolor='#d3d3d3' align='center'><td>ID Пользователя</td><td>Логин</td><td>Имя</td><td>Фамилия</td><td>Группа</td><td>Статус</td><td>Дата тестирования</td><td>Оценка</td><td>Файл отчета</td></tr>");

DBGrid1->DataSource->DataSet->First();

while(!DBGrid1->DataSource->DataSet->Eof)

{

Memo1->Lines->Add("<tr align='center'><td>"+DBGrid1->Columns->Items[0]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[1]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[2]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[3]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[4]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[5]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[6]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[7]->Field->Value+"</td><td>"+DBGrid1->Columns->Items[8]->Field->Value+"</td></tr>");

DBGrid1->DataSource->DataSet->Next();

}

Memo1->Lines->Add("</table>");

Memo1->Lines->SaveToFile("AdminReport.html");

Form10->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button1Click(TObject *Sender)

{

Form7->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button4Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button5Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button6Click(TObject *Sender)

{

Form6->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button7Click(TObject *Sender)

{

Form9->Show();

}

//---------------------------------------------------------------------------

Unit5

//---------------------------------------------------------------------------

#include <vcl.h>

#include <md5.h>

#include <md5.cpp>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm5 *Form5;

extern int ID;

extern AnsiString Login;

extern AnsiString sName;

extern AnsiString SurName;

extern AnsiString Group;

extern AnsiString Status;

extern AnsiString DateOfRegist;

extern AnsiString TimeOfRegist;

extern AnsiString Lock;

extern AnsiString AVTORIZ;

//---------------------------------------------------------------------------

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm5::Button2Click(TObject *Sender)

{

Form5->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::Button1Click(TObject *Sender)

{

AnsiString Error;

int err=0;

if(Edit1->Text=="")

{

err++;

Error=Error+"Вы не ввели Логин";

}

if(Edit2->Text=="")

{

err++;

Error=Error+"\nВы не ввели Пароль";

}

if(err!=0)

{

ShowMessage(Error);

return;

}

//Проверка наличия Логина в базе

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select * From Users Where Login='"+Edit1->Text+"'";

DM3->ADOQuery1->Active=true;

if(Form4->DBGrid1->Columns->Items[1]->Field->Value.IsNull())

{

ShowMessage("Пользователь с таким логином в базе не зарегистрирован");

Form2->Show();

}

else

{

DM3->ADOQuery1->Active=false;

DM3->ADOQuery1->SQL->Text="Select * From Users Where Login='"+Edit1->Text+"'";

DM3->ADOQuery1->Active=true;

if(MD5(Edit2->Text)==Form4->DBGrid1->Columns->Items[2]->Field->Value)

{

ID=Form4->DBGrid1->Columns->Items[0]->Field->Value;

Login=Form4->DBGrid1->Columns->Items[1]->Field->Value;

sName=Form4->DBGrid1->Columns->Items[3]->Field->Value;

SurName=Form4->DBGrid1->Columns->Items[4]->Field->Value;

Group=Form4->DBGrid1->Columns->Items[5]->Field->Value;

Status=Form4->DBGrid1->Columns->Items[6]->Field->Value;

DateOfRegist=Form4->DBGrid1->Columns->Items[7]->Field->Value;

TimeOfRegist=Form4->DBGrid1->Columns->Items[8]->Field->Value;

Lock=Form4->DBGrid1->Columns->Items[9]->Field->Value;

AVTORIZ="YES";

ShowMessage("Вход успешно выполнен \nID: "+AnsiString(ID)+"\nЛогин: "+Login+"\nИмя: "+sName+"\nФамилия: "+SurName+"\nГруппа: "+Group+"\nСтатус: "+Status+"\nАктивен: "+AVTORIZ);

Form1->N4->Enabled=false;

Form1->N5->Enabled=false;

Form1->N6->Enabled=true;

Form1->N7->Enabled=true;

Form1->N9->Enabled=true;

if(Status=="Admin")

{

Form1->N10->Enabled=true;

}

else

{

Form1->N10->Enabled=false;

}

Form6->Label10->Caption=AnsiString(ID);

Form6->Label11->Caption=sName;

Form6->Label12->Caption=SurName;

Form6->Label13->Caption=Group;

Form6->Label14->Caption=Status;

Form6->Label15->Caption=DateOfRegist;

Form6->Label16->Caption=TimeOfRegist;

if(Lock!=0){Form6->Label17->Caption="Незаблокирован";Form6->Label17->Color=clLime;}else{Form6->Label17->Caption="Заблокирован"; Form6->Label17->Color=clRed;};

if(AVTORIZ=="YES"){Form6->Label18->Caption="Активен";Form6->Label18->Color=clLime;}else{Form6->Label18->Caption="Неактивен";Form6->Label18->Color=clRed;}

}

else

{

ShowMessage("Введенные Логин и Пароль не соппадают");

return;

}

}

//ShowMessage(ID);ShowMessage(Login);ShowMessage(sName);ShowMessage(SurName);ShowMessage(Group);ShowMessage(DateOfRegist);ShowMessage(TimeOfRegist);ShowMessage(Lock);ShowMessage(AVTORIZ);

Edit1->Text="";

Edit2->Text="";

Form5->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::FormCreate(TObject *Sender)

{

}

//---------------------------------------------------------------------------

Unit7

//---------------------------------------------------------------------------


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

  • Анализ решения задачи линейного программирования. Симплексный метод с использованием симплекс-таблиц. Моделирование и решение задач ЛП на ЭВМ. Экономическая интерпретация оптимального решения задачи. Математическая формулировка транспортной задачи.

    контрольная работа [196,1 K], добавлен 15.01.2009

  • Анализ метода линейного программирования для решения оптимизационных управленческих задач. Графический метод решения задачи линейного программирования. Проверка оптимального решения в среде MS Excel с использованием программной надстройки "Поиск решения".

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

  • Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.

    курсовая работа [132,0 K], добавлен 09.12.2008

  • Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции.

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

  • Применение методов линейного программирования для решения оптимизационных задач. Основные понятия линейного программирования, свойства транспортной задачи и теоремы, применяемые для ее решения. Построение первичного опорного плана и системы потенциалов.

    курсовая работа [280,8 K], добавлен 17.11.2011

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

    методичка [366,8 K], добавлен 16.01.2010

  • Математическое программирование. Линейное программирование. Задачи линейного программирования. Графический метод решения задачи линейного программирования. Экономическая постановка задачи линейного программирования. Построение математической модели.

    курсовая работа [581,5 K], добавлен 13.10.2008

  • Расчет производства необходимого количества продукции для получения максимальной прибыли предприятия. Математическая модель для решения задач линейного программирования. Построение ограничений и целевых функций. Исследование чувствительности модели.

    задача [74,7 K], добавлен 21.08.2010

  • Сущность линейного программирования. Математическая формулировка задачи ЛП и алгоритм ее решения с помощью симплекс-метода. Разработка программы для планирования производства с целью обеспечения максимальной прибыли: блок-схема, листинг, результаты.

    курсовая работа [88,9 K], добавлен 11.02.2011

  • Особенности метода ветвей и границ как одного из распространенных методов решения целочисленных задач. Декомпозиция задачи линейного программирования в алгоритме метода ветвей и границ. Графический, симплекс-метод решения задач линейного программирования.

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

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