Разработка программного проекта оптимизации сетевого графика

Понятие сетевого графика как динамической модели производственного процесса. Базовые правила составления сетевого графика, расчет его параметров. Разработка алгоритма программного проекта. Использование объектно-ориентированных сред программирования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.01.2016
Размер файла 847,7 K

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

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

Размещено на http://www.allbest.ru/

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

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

"Норильский Индустриальный институт"

Кафедра Информационных систем и технологий

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

По дисциплине:

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

На тему: "Разработка программного проекта оптимизации сетевого графика"

Разработал студент Диденко М.С.

Группа ИС - 14 (дневн)

Руководитель: к. т. н., доцент, Фомичева С.Г.

Норильск 2015

Индивидуальное задание на курсовую работу

По дисциплине "Высокоуровневые методы информатики и программирования"

Студента 1 курса специальности (бакалавриата) 09.03.02

Диднко Максимом Сергеевичем

ТЕМА: Разработка программного проекта оптимизации сетевого графика функции

_____________________________________________________________

В КУРСОВОЙ РАБОТЕ ДОЛЖНЫ БЫТЬ РЕШЕНЫ СЛЕДУЮЩИЕ ЗАДАЧИ:

1. Проведен этап формализации и математического моделирования

2. Разработана укрупненная блок-схема алгоритма

3. Разработан программный проект с использованием объектно-ориентированных сред программирования (Delphi2010/7.0/6.0, С#,VisualC++,VB6.0)

4. Проведено тестирование программного проекта в различных операционных системах

5. Создана инсталляционная версия приложения

6. Сформирована пояснительная записка

7. Создан электронный пакет (CD-ROM), содержащий пояснительную записку, инсталляционную версию разработанного приложения, руководство пользователя или справочную службу, презентацию проекта, файл readme. txt - поясняющий процесс установки приложения

Программный проект должен осуществлять:

· ввод данных с клавиатуры и из файла

· вывод данных на экран, на принтер, в файл

· защита приложения от неквалифицированных действий пользователя

Контрольные сроки выполнения: 15 мая, 19 мая, 20 июня 2015 г.

Защита курсовой работы - 28.05.2015.

Пояснительная записка к курсовой работе ДОЛЖНА СОДЕРЖАТЬ:

1. Содержание с указанием страниц каждого параграфа

2. Введение (оценка актуальности проекта) (1-1.5 стр.)

3. Назначение и цели создания проекта (1-3 стр.)

4. Формализация задачи (обзор методов решения задачи, их сравнительный анализ, оценка оптимальности выбранного алгоритма) (7-10 стр.)

5. Укрупненная блок-схема алгоритма

6. Листинг программы с подробными комментариями (для каждой подпрограммы указать ее назначение, описать входные и выходные параметры, указать ограничения на параметры)

7. Распечатка результатов работы приложения (файлы результатов и т.п.)

8. Распечатка руководства пользователя или файла-справки.

9. Заключение (характеристика программы, результаты проведения тестирования, ее временные показатели, оценка области применения) (1-2 стр.)

10. Список литературы.

Задание утверждено на заседании кафедры ИСиТ ____________ 2015 г.

Зав. кафедрой ИСиТ Фомичева С.Г.

Содержание

  • Введение
  • Формализация задачи
  • Укрупненная блок-схема алгоритма
  • Исходный код программы и модулей
  • Результаты работы приложения
  • Файл-справка
  • Заключение
  • Список использованной литературы

Введение

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

Методы СПУ были предложены сравнительно недавно. Так как они разрабатывались в разных странах, возникло несколько разновидностей: СПУ = В СССР, PERT и CPM - в США и др.

Метод PERM применяется в планировании научно-исследовательских и опытно-конструкторских разработок, для которых характерная неопределённость в оценке затрат времени, необходимая для выполнения отдельных операция (работ). Метод CPM применяется тогда, когда оценки времени операций детерминированные.

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

В системах СПУ используются следующие наиболее распространенные способы построения сетевых графиков:

1) Сетевые графики в терминах "дуги-операции" (под операцией понимается какая-то работа). В таких графиках вершины, называемые событиями, соответствуют моментам времени начала или окончания одной или нескольких операций, а дуги - операциями;

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

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

Существуют некоторые базовые правила составления сетевого графика:

· Каждая работа должна быть заключена между двумя событиями. В сети не может быть работ, имеющих одинаковые коды;

· В сети не должно быть событий, из которых не выходит ни одной работы, если только это событие не является для данного графика завершающим;

· Соответственно, в сети не должно быть события, в которое не входит ни одной работы, если только это событие не является исходным;

· В сетевом графике не должно быть замкнутых контуров.

Назначение и цели создания проекта

Условие задачи: дан сетевой график. Рассчитать табличным способом его параметры, а именно: время раннего и позднего начала работ, время раннего и позднего окончания работ, полный и частный (свободный) резерв работ. Рассчитать стоимость работ, закрыв частные (свободные) резервы работ.

Назначение проекта:

Программа предназначена для проверки заданий по дискретной математике.

По теме: "Оптимизация систем планирования и управления".

Программа выполняет следующие задачи:

ь Нахождение раннего и позднего начала работ.

ь Подсчет критического пути

ь Оптимизирует сетевой график по критическому пути.

Цели, которые я ставил перед собой, приступая к работе:

Изучить:

1. Определение исходных данных и результатов решения задачи.

2. Алгоритм расчета сетевого графика табличным методом.

3. Описание метода решения задачи на математическом языке.

Поднять уровень владения языком программирования C#.

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

Формализация задачи

Характеризуемый элемент

Наименование параметра

Условное обозначение

Формула для вычисления параметра

Событие i

Ранний срок свершения события

Поздний срок свершения события

Резерв времени события

Работа (i,j)

Продолжительность работы

-

Ранний срок начала работы

Ранний срок окончания работы

Поздний срок начала работы

Поздний срок окончания работы

Полный резерв времени работы

Частный резерв времени работы первого вида

или

Частный резерв времени работы второго вида (свободный резерв времени)

или

Независимый резерв времени

или

Путь L

Продолжительность пути

t (L)

-

Продолжительность критического пути

-

Резерв времени пути

R (L)

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

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

Предшествующий событию путь - это путь от исходного события до данного.

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

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

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

Предположим, что продолжительность t (i. j), i,j = 1. n, выполнения операций (i. j) известны и обозначены у соответствующих дуг графика (рис. 1)

оптимизация сетевой график программный

Рис. 1

Определим прежде всего ожидаемые (ранние) сроки совершения событий (i) сетевого графика. Исходное событие означает момент начала выполнения комплекса операций следовательно, . Событие (2) совершиться, очевидно, спустя 2 единицы времени после свершения события (1), так как время выполнения операции (1,2) равно 1. Следовательно, =>. Событию (3) предшествуют два пути: и . Продолжительность первого пути равна 1 единицы времени, а второго - 2 единицам времени, так как . Продолжительность второго пути можно найти добавлением к ожидаемому сроку свершения (2) времени выполнения операции (2,3), т. е . Поскольку событие (3) может совершится не раньше момента окончания всех входящих в него операций, то

В событие (4) входят две дуги, исходящие из событий (1) и (3), для которых ожидаемые сроки свершения найдены. Следовательно, ожидаемый срок свершения события (4) .

Аналогично находятся ожидаемые сроки событий (5), (6) и (7). Значения , , приписаны соответствующим событиям (рис.1).

Общую формулу для нахождения ожидаемых сроков свершения событий можно записать так:

,

Где - подмножество дуг сети, входящих в событие (j).

Ожидаемый срок свершения события (7) совпадает с критическим временем (суммарной продолжительностью операций, принадлежащих критическому пути). Возвращаясь теперь от завершающего события к исходному, выделим операции, принадлежащие критическому пути. Из трех операций, входящих в событие (7), определила операция (5,7), выполнение которой начинается после свершения события (5) и продолжается 3 единицы времени (. Момент свершения события (5) определила операция (3,5), так как . В свою очередь момент свершения события (3,5) определила операция (2,3), а события (2) - операция (1,2). Эти операции (рис 1) выделены жирной линией. Таким образом, критический путь равен . Увеличение времени выполнения любой операции, принадлежащей критическому пути, ведет к увеличению времени выполнения комплекса операций. Увеличение же времени выполнения или задержка с выполнением некритических операций может не отразится на сроке свершения завершающего события.

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

,

Где - подмножество дуг сети, исходящих из события (i). Определим этот показатель для оставшихся событий. Из события (5) исходит она операция, следовательно, . Аналогично для остальных. Из события (4) исходят три операции, поэтому

Некритические события имеют резервы времени, которые показывают, на какой предельно допустимый срок может задержаться свершение событий без срока свершения завершающего события. Резерв времени события (i) равен разности между предельным и ожидаемым сроками его свершения:

Ожидаемые и предельные сроки свершения события находятся в диалектическом единстве со сроками начала и окончания операций:

Ш ранний срок начала выполнения операции (i,j) равен ожидаемому сроку свершения события (i) (;

Ш поздний срок окончания операции совпадает с сроком свершения ее конечного события (

Ш поздний срок начала выполнения равен ();

Ш ранний срок окончания равен ();

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

Свободный резерв времени операции показывает, на сколько можно увеличить продолжительность или отсрочить начало выполнения операции (i. j), при условии что начальное и конечное ее события свершаются в ожидаемое время:

Частный резерв времени первого вида - это запас времени, которым можно располагать при выполнении операции (i,j) в предположении, что начальное и конечное ее события свершаются в предельные сроки

Независимый резерв времени - это запас времени, которым можно располагать при выполнении операции (i. j) в предположении, что ее начальное событие свершиться в предельное, а конечное - в ожидаемое время.

Выписываем все операции, которые имеют свободный резерв времени

Для вычисления новой стоимости операций воспользуемся формулой:

Укрупненная блок-схема алгоритма

Исходный код программы и модулей

v Модуль SPU - MAIN. cs

using System;

using System. Collections. Generic;

using System.componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Threading. Tasks;

using System. Windows. Forms;

using ModulesGraph. Construct;

using ModulesGraph. Abstract;

namespace SPU

{

publicpartialclassForm1: Form

{

FormPaint_Graph Form_Graph = newFormPaint_Graph ();

graph_tab Form_Graph_tab = newgraph_tab ();

public Form1 ()

{

InitializeComponent ();

}

publicvoid Open ()

{

this. Show ();

}

privatevoid button2_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. about ();

}

privatevoid module_SPU_Grahp_Click (object sender, EventArgs e)

{

Hide ();

Form_Graph. ShowDialog ();

Show ();

}

privatevoid module_SPU_table_Click (object sender, EventArgs e)

{

Hide ();

Form_Graph_tab. ShowDialog ();

Show ();

}

privatevoid button1_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. helper ();

}

}

}

v Модуль SPU - SplashScreen. cs

using System;

using System. Collections. Generic;

using System.componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Threading. Tasks;

using System. Windows. Forms;

namespace SPU

{

publicpartialclassSplashScreen: Form

{

public SplashScreen ()

{

InitializeComponent ();

Timer t = newTimer ();

t. Interval = 10000;

t. Start ();

t. Tick += newEventHandler (t_Tick);

timer1. Start ();

Opacity = 0;

Timer timer = newTimer ();

timer. Tick += newEventHandler ( (sender, e) =>

{

if ( (Opacity += 0.01d) == 1) timer. Stop ();

});

timer. Interval = 1;

timer. Start ();

}

void t_Tick (object sender, EventArgs e)

{

Close ();

}

}

}

v МодульSPU - graph_tab. cs

using System;

using System. IO;

using System. Collections. Generic;

using System.componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Diagnostics;

using System. Threading;

using System. Threading. Tasks;

using System. Windows. Forms;

using ModulesGraph. Abstract;

using ModulesGraph. Construct;

using Excel = Microsoft. Office. Interop. Excel;

namespace SPU

{

publicpartialclassgraph_tab: Form

{

publicList<WorkMy> ListsWork = newList<WorkMy> ();

// Определение собственного исключения

publicclassMyException: Exception

{

// Рекомендуется, помимо специфичных, опрелять все

// конструкторы, имеющиеся у базового класса Exception.

// Тем самым, вы можете быть уверены, что ваш класс

// можно будет использовать в любых ситуациях.

public MyException ()

: base () { }

public MyException (string message)

: base (message) { }

public MyException (string message, Exception innerException)

: base (message, innerException) { }

public MyException (System.runtime. Serialization. SerializationInfo info,

System.runtime. Serialization. StreamingContext context)

: base (info, context) { }

}

public graph_tab ()

{

InitializeComponent ();

}

privatevoid button1_Click (object sender, EventArgs e)

{

Close ();

}

privatevoid button2_Click (object sender, EventArgs e)

{

int k = 0;

bool tmp = true;

WorkMy tmp_work;

ListsWork. Clear ();

for (int i = 0; i < dg. RowCount - 1; i++)

{

try

{

// КРАСИМ СТРОКУ В БЕЛЫЙ ЦВЕТ

dg. Rows [i]. DefaultCellStyle. BackColor = Color. White;

// СОБЫТИЕ 1

if (string. IsNullOrWhiteSpace (Convert. ToString (dg. Rows [i]. Cells [0]. Value)))

thrownewMyException ("Пустаяячейка");

else

tmp_work. g1 = Convert. ToInt32 (dg. Rows [i]. Cells [0]. Value);

// СОБЫТИЕ 2

if (string. IsNullOrWhiteSpace (Convert. ToString (dg. Rows [i]. Cells [1]. Value)))

thrownewMyException ("Пустаяячейка");

else

tmp_work. g2 = Convert. ToInt32 (dg. Rows [i]. Cells [1]. Value);

// ВРЕМЯ

if (string. IsNullOrWhiteSpace (Convert. ToString (dg. Rows [i]. Cells [2]. Value)))

thrownewMyException ("Пустаяячейка");

else

tmp_work. time = Convert. ToDouble (dg. Rows [i]. Cells [2]. Value);

// СТОИМОСТЬ

if (string. IsNullOrWhiteSpace (Convert. ToString (dg. Rows [i]. Cells [3]. Value)))

thrownewMyException ("Пустаяячейка");

else

tmp_work. cost = Convert. ToDouble (dg. Rows [i]. Cells [3]. Value);

ListsWork. Add (tmp_work);

}

catch (FormatException)

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. Red;

tmp = false;

k++;

}

catch (MyException)

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. Red;

tmp = false;

k++;

}

catch

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. Chocolate;

tmp = false;

k++;

}

}

if (k! = 0) return;

for (int i = 0; i < dg. RowCount - 1; i++)

{

int K_L = 0;

if (Convert. ToInt32 (dg. Rows [i]. Cells [0]. Value) == 1)

K_L++;

else

{

for (int j = 0; j < i; j++)

if (Convert. ToInt32 (dg. Rows [i]. Cells [0]. Value) == Convert. ToInt32 (dg. Rows [j]. Cells [1]. Value))

K_L++;

if (K_L == 0)

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. DarkRed;

k++;

}

}

}

int sob = 0;

bool sob_in_j = true;

for (int i = 0; i < dg. RowCount; i++)

if (sob <Convert. ToInt32 (dg. Rows [i]. Cells [1]. Value))

sob = Convert. ToInt32 (dg. Rows [i]. Cells [1]. Value);

for (int i = 0; i < dg. RowCount; i++)

if (sob <Convert. ToInt32 (dg. Rows [i]. Cells [0]. Value))

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. Blue;

sob_in_j = false;

}

for (int i = dg. RowCount - 2; i > 0; i--)

{

int K_L = 0;

if (Convert. ToInt32 (dg. Rows [i]. Cells [1]. Value) == sob)

K_L++;

else

{

for (int j = 0; j < dg. RowCount - 1; j++)

if (Convert. ToInt32 (dg. Rows [i]. Cells [1]. Value) == Convert. ToInt32 (dg. Rows [j]. Cells [0]. Value))

K_L++;

if (K_L == 0)

{

dg. Rows [i]. DefaultCellStyle. BackColor = Color. Orange;

k++;

}

}

}

if (tmp && k == 0 && sob_in_j)

{

tables_full full_tab = newtables_full (null, ListsWork);

Hide ();

full_tab. ShowDialog ();

Show ();

full_tab. Close ();

}

}

privatevoid graph_tab_Resize (object sender, EventArgs e)

{

dg. Width = this. Width - 28 - 12;

dg. Height = this. Height - 100;

}

privatevoid graph_tab_Load (object sender, EventArgs e)

{

dg. Width = this. Width - 28 - 12;

dg. Height = this. Height - 100;

}

privatevoid exitToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. exit_prog ();

}

privatevoid uploadExcelToolStripMenuItem_Click (object sender, EventArgs e)

{

OpenFileDialog openFileDialog1 = newOpenFileDialog ();

openFileDialog1. InitialDirectory = Environment. CurrentDirectory;

openFileDialog1. Filter = "Книга Excel (*. xlsx,*xls) |*. xls?";

openFileDialog1. FilterIndex = 1;

openFileDialog1. RestoreDirectory = true;

// openFileDialog1. OpenFile ();

if (openFileDialog1. ShowDialog () == DialogResult. OK)

{

dg. Rows. Clear ();

try

{

if ( (openFileDialog1. OpenFile ())! = null)

{

Excel. Range excelcells;

int work_num;

string myStream = openFileDialog1. FileName;

Excel. Application ObjWorkExcel = new Excel. Application ();

Excel. Workbook ObjWorkBook = ObjWorkExcel. Workbooks. Open (Convert. ToString (myStream),

Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing,

Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

Excel. Worksheet ObjWorkSheet = ObjWorkBook. Worksheets [1];

excelcells = ObjWorkSheet. get_Range ("B1", Type. Missing);

work_num = Convert. ToInt32 (excelcells. Value2);

try

{

for (int i = 0; i < work_num; i++)

{

dg. RowCount++;

excelcells = ObjWorkSheet. get_Range ("A" + Convert. ToString (i + 3), Type. Missing);

dg. Rows [i]. Cells [0]. Value = Convert. ToString (excelcells. Value2);

excelcells = ObjWorkSheet. get_Range ("B" + Convert. ToString (i + 3), Type. Missing);

dg. Rows [i]. Cells [1]. Value = Convert. ToString (excelcells. Value2);

excelcells = ObjWorkSheet. get_Range ("C" + Convert. ToString (i + 3), Type. Missing);

dg. Rows [i]. Cells [2]. Value = Convert. ToString (excelcells. Value2);

excelcells = ObjWorkSheet. get_Range ("D" + Convert. ToString (i + 3), Type. Missing);

dg. Rows [i]. Cells [3]. Value = Convert. ToString (excelcells. Value2);

}

}

catch

{

MessageBox. Show ("Не верное оформление файла или формат");

}

ObjWorkExcel. Quit ();

}

}

catch (Exception ex)

{

MessageBox. Show ("Ошибка: Нет доступа до фалйа. Оригинальнаяошибка: " + ex. Message);

}

}

}

privatevoid aboutToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. about ();

}

privatevoid helpToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. helper ();

}

}

}

v МодульSPU - tables_full. cs

using System;

using System. Collections. Generic;

using System.componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Diagnostics;

using System. Threading;

using System. Threading. Tasks;

using System. Windows. Forms;

using ModulesGraph. Construct;

using ModulesGraph. Abstract;

using Excel = Microsoft. Office. Interop. Excel;

using ProjectMS = Microsoft. Office. Interop. MSProject;

using System. Reflection;

namespace SPU

{

publicpartialclasstables_full: Form

{

List<GraphMy> Lists_Graph;

List<WorkMy> Lists_Work;

int sob = 0;

bool results = false;

public tables_full (List<GraphMy> Lists_MyGraph = null, List<WorkMy> Lists_MyWork = null)

{

InitializeComponent ();

Lists_Graph = Lists_MyGraph;

Lists_Work = Lists_MyWork;

dataGridView1. Visible = false;

dataGridView2. Visible = false;

dataGridView2. Width = this. Width - 35;

dataGridView2. Height = this. Height - 100 - 35;

}

privatevoid tables_full_Load (object sender, EventArgs e)

{

if (Lists_Graph! = null)

{

dataGridView1. Visible = true;

dataGridView1. Rows. Clear ();

dataGridView1. Rows. Add (Lists_Graph. Count-1);

for (int i = 0; i < Lists_Graph. Count; i++)

{

dataGridView1. Rows [i]. Cells [0]. Value =

Lists_Graph. ElementAt (i). id;

dataGridView1. Rows [i]. Cells [1]. Value =

Lists_Graph. ElementAt (i). x;

dataGridView1. Rows [i]. Cells [2]. Value =

Lists_Graph. ElementAt (i). y;

}

}

// else MessageBox. Show ("NULL GRAPH");

if (Lists_Work! = null)

{

dataGridView2. Visible = true;

dataGridView2. Rows. Clear ();

if ( (Lists_Work. Count - 1) <= 0)

this. Close ();

else

{

dataGridView2. Rows. Add (Lists_Work. Count - 1);

for (int i = 0; i < Lists_Work. Count; i++)

{

dataGridView2. Rows [i]. Cells [0]. Value =

Lists_Work. ElementAt (i). g1;

dataGridView2. Rows [i]. Cells [1]. Value =

Lists_Work. ElementAt (i). g2;

dataGridView2. Rows [i]. Cells [2]. Value =

Lists_Work. ElementAt (i). time;

dataGridView2. Rows [i]. Cells [3]. Value =

Lists_Work. ElementAt (i). cost;

}

}

bool k = false, u = false;

if (u&&k) u = true;

// errors = "";

// Проверкасобытий

for (int i=0; i < Lists_Work. Count; i++)

{

if (Lists_Work. ElementAt (i). g2 > sob)

sob = Lists_Work. ElementAt (i). g2;

}

for (int j = 1, i = 0; i < Lists_Work. Count; i++)

{

if (Lists_Work. ElementAt (i). g1! = j)

j++;

if (Lists_Work. ElementAt (i). g1 == Lists_Work. ElementAt (i). g2 - 1)

break;

}

// MessageBox. Show (Convert. ToString (sob));

}

// else MessageBox. Show ("NULL WORK");

}

privatevoid button1_Click (object sender, EventArgs e)

{

// СОБИТИЕ i

// Ранний срок свершения события tr (i)

for (int i = 0; i < dataGridView2. RowCount; i++)

{

dataGridView2. Rows [i]. Cells [6]. Value = null;

}

string maxt = "";

for (int i = 0; i < dataGridView2. RowCount; i++)

{

maxt = "";

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [0]. Value) == 1)

dataGridView2. Rows [i]. Cells [6]. Value = 0;

else

{

for (int j = 0; j < i; j++)

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [0]. Value) == Convert. ToInt32 (dataGridView2. Rows [j]. Cells [1]. Value))

maxt += Convert. ToInt32 (dataGridView2. Rows [j]. Cells [2]. Value) + Convert. ToInt32 (dataGridView2. Rows [j]. Cells [6]. Value) + "; ";

dataGridView2. Rows [i]. Cells [6]. Value = max (maxt);

}

}

progressBar1. Value = 10;

// Критическийпуть

for (int j = dataGridView2. RowCount - 1, ifer; j > 0; j--)

{

if (Convert. ToInt32 (dataGridView2. Rows [j]. Cells [1]. Value) == sob)

{

ifer = Convert. ToInt32 (dataGridView2. Rows [j]. Cells [2]. Value) + Convert. ToInt32 (dataGridView2. Rows [j]. Cells [6]. Value);

if (ifer >= Convert. ToInt32 (label2. Text))

{

label2. Text = Convert. ToString (Convert. ToInt32 (dataGridView2. Rows [j]. Cells [2]. Value) + Convert. ToInt32 (dataGridView2. Rows [j]. Cells [6]. Value));

dataGridView2. Rows [dataGridView2. RowCount - 1]. Cells [9]. Value = label2. Text;

}

}

}

progressBar1. Value += 5;

// Поздний срок совершения события tp (i)

for (int i = 0; i < dataGridView2. RowCount; i++)

{

dataGridView2. Rows [i]. Cells [9]. Value = null;

}

string mint = "";

for (int i = dataGridView2. RowCount-1; i >= 0; i--)

{

mint = "";

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [1]. Value) == sob)

dataGridView2. Rows [i]. Cells [9]. Value = label2. Text;

else

{

for (int j = dataGridView2. RowCount - 1; j >= 0; j--)

if (Convert. ToInt32 (dataGridView2. Rows [j]. Cells [0]. Value) == Convert. ToInt32 (dataGridView2. Rows [i]. Cells [1]. Value))

mint += Convert. ToInt32 (dataGridView2. Rows [j]. Cells [9]. Value) - Convert. ToInt32 (dataGridView2. Rows [j]. Cells [2]. Value) + "; ";

dataGridView2. Rows [i]. Cells [9]. Value = min (mint);

}

}

progressBar1. Value += 10;

// Ранний срок начала работы trn (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

dataGridView2. Rows [i]. Cells [7]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [6]. Value) + Convert. ToInt32 (dataGridView2. Rows [i]. Cells [2]. Value);

progressBar1. Value += 5;

// Резерввременисобытия R (i)

for (int i = 0; i < dataGridView2. RowCount; i++)

{

string tmp ="";

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [0]. Value) == 1)

dataGridView2. Rows [i]. Cells [4]. Value = 0;

else

{

for (int j = 0; j < i; j++)

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [0]. Value) == Convert. ToInt32 (dataGridView2. Rows [j]. Cells [1]. Value))

tmp += Convert. ToString (Convert. ToInt32 (dataGridView2. Rows [j]. Cells [9]. Value) - Convert. ToInt32 (dataGridView2. Rows [j]. Cells [7]. Value)) +"; ";

dataGridView2. Rows [i]. Cells [4]. Value = min (tmp);

}

}

progressBar1. Value += 5;

// Ранний срок окончания работы R [j]

for (int i = 0; i < dataGridView2. RowCount; i++)

{

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [1]. Value) == sob)

dataGridView2. Rows [i]. Cells [5]. Value = 0;

else

{

string tmp = "";

for (int j = 0; j < dataGridView2. RowCount; j++)

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [1]. Value) == Convert. ToInt32 (dataGridView2. Rows [j]. Cells [0]. Value))

tmp += dataGridView2. Rows [j]. Cells [4]. Value + "; ";

dataGridView2. Rows [i]. Cells [5]. Value = min (tmp);

}

}

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

// Поздний срок начала работы tpn (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

dataGridView2. Rows [i]. Cells [8]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [9]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [2]. Value);

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

// Полный резерв времени работы Rn (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

dataGridView2. Rows [i]. Cells [10]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [9]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [6]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [2]. Value);

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

// Частный резерв времени работы первого вида R1 (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

dataGridView2. Rows [i]. Cells [11]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [10]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [4]. Value);

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

// Частный резерв времени работы второго вида (свободный резерв времени работы) Rc (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

dataGridView2. Rows [i]. Cells [12]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [10]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [5]. Value);

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

// Независимый резерв времени работы Rn (i,j)

for (int i = 0; i < dataGridView2. RowCount; i++)

{

dataGridView2. Rows [i]. Cells [13]. Value = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [11]. Value) - Convert. ToInt32 (dataGridView2. Rows [i]. Cells [5]. Value);

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [13]. Value) < 0)

dataGridView2. Rows [i]. Cells [13]. Value = "-";

}

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

List<Cmins> cmini = newList<Cmins> ();

// Cmin

for (int i =0; i<dataGridView2. RowCount; i++)

{

Cmins tmp;

if (Convert. ToInt32 (dataGridView2. Rows [i]. Cells [12]. Value) > 0)

{

tmp. g1 = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [0]. Value);

tmp. g2 = Convert. ToInt32 (dataGridView2. Rows [i]. Cells [1]. Value);

tmp. t = Convert. ToDouble (dataGridView2. Rows [i]. Cells [2]. Value);

Double tR = Convert. ToDouble (dataGridView2. Rows [i]. Cells [2]. Value) + Convert. ToDouble (dataGridView2. Rows [i]. Cells [12]. Value);

tmp. tR = tR;

tmp. Rc = Convert. ToDouble (dataGridView2. Rows [i]. Cells [12]. Value);

tmp. C = Convert. ToDouble (dataGridView2. Rows [i]. Cells [3]. Value);

Double Cmin = (Convert. ToDouble (tmp. t) * Convert. ToDouble (tmp. C)) / tR;

tmp. Cmin = Cmin;

cmini. Add (tmp);

}

}

progressBar1. Value += 30;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

cost_opt optimize = newcost_opt (cmini);

progressBar1. Value += 5;

label3. Text = Convert. ToString (progressBar1. Value) + "%";

results = true;

}

privateDouble max (string max_el)

{

List<Double> tmp = newList<double> ();

int el;

Double tmp_max = 0;

string [] all = max_el. Split (newChar [] {'; '});

el = all. Count ();

foreach (string s in all)

{

if (s. Trim ()! = "")

if (tmp_max <Convert. ToDouble (s))

tmp_max = Convert. ToDouble (s);

}

return tmp_max;

}

privateDouble min (string min_el)

{

List<Double> tmp = newList<double> ();

int el;

Double tmp_min = 1000000;

string [] all = min_el. Split (newChar [] { '; ' });

el = all. Count ();

foreach (string s in all)

{

if (s. Trim ()! = "")

if (tmp_min >= Convert. ToDouble (s))

tmp_min = Convert. ToDouble (s);

}

return tmp_min;

}

privatevoid tables_full_Resize (object sender, EventArgs e)

{

dataGridView2. Width = this. Width - 35;

dataGridView2. Height = this. Height - 100 - 35;

}

privatevoid exitToolStripMenuItem_Click_1 (object sender, EventArgs e)

{

menu men = newmenu ();

men. exit_prog ();

}

privatevoid saveinExcel201ХToolStripMenuItem_Click (object sender, EventArgs e)

{

SaveFileDialog savefile = newSaveFileDialog

{

InitialDirectory = Environment. CurrentDirectory,

Filter = "Книга Excel (*. xls,*xlsx) |*. xls?"

};

// OpenFileDialog savefile2 = new OpenFileDialog

// {

// Filter = "Книга Excel (*. xls,*xlsx) |*. xls?"

// };

try

{

if (savefile. ShowDialog () == DialogResult. OK)

{

Excel. Application appExcel = new Excel. Application ();

// appExcel. Workbooks.

// string dir =

// appExcel. Workbooks. Open (@". /1. xls");

Excel. Workbook bookExcel = appExcel. Workbooks. Add (System. Reflection. Missing. Value);

// bookExcel. SaveAs (savefile. FileName, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Excel. XlSaveAsAccessMode. xlNoChange, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

Excel. Worksheet sheet = bookExcel. Worksheets [1];

sheet. Cells [1, 1] = "Кол-во работ";

sheet. Cells [1, 2] = dataGridView2. RowCount;

sheet. Cells [2, 1] = "Собитие i";

sheet. Cells [2, 2] = "Собитие j";

sheet. Cells [2, 3] = "Продолжительность";

sheet. Cells [2, 4] = "Стоимость";

sheet. Cells [2, 5] = "R (i)";

sheet. Cells [2, 6] = "R (j)";

sheet. Cells [2, 7] = "tрн (i,j)";

sheet. Cells [2, 8] = "tро (i,j)";

sheet. Cells [2, 9] = "tпн (i,j)";

sheet. Cells [2, 10] = "tпо (i,j)";

sheet. Cells [2, 11] = "Rn (i,j)";

sheet. Cells [2, 12] = "R1 (i,j)";

sheet. Cells [2, 13] = "Rc (i,j)";

sheet. Cells [2, 14] = "Rн (i,j)";

for (int i = 0; i < dataGridView2. RowCount; i++)

{

sheet. Cells [i + 3, 1] = dataGridView2. Rows [i]. Cells [0]. Value;

sheet. Cells [i + 3, 2] = dataGridView2. Rows [i]. Cells [1]. Value;

sheet. Cells [i + 3, 3] = dataGridView2. Rows [i]. Cells [2]. Value;

sheet. Cells [i + 3, 4] = dataGridView2. Rows [i]. Cells [3]. Value;

sheet. Cells [i + 3, 5] = dataGridView2. Rows [i]. Cells [4]. Value;

sheet. Cells [i + 3, 6] = dataGridView2. Rows [i]. Cells [5]. Value;

sheet. Cells [i + 3, 7] = dataGridView2. Rows [i]. Cells [6]. Value;

sheet. Cells [i + 3, 8] = dataGridView2. Rows [i]. Cells [7]. Value;

sheet. Cells [i + 3, 9] = dataGridView2. Rows [i]. Cells [8]. Value;

sheet. Cells [i + 3, 10] = dataGridView2. Rows [i]. Cells [9]. Value;

sheet. Cells [i + 3, 11] = dataGridView2. Rows [i]. Cells [10]. Value;

sheet. Cells [i + 3, 12] = dataGridView2. Rows [i]. Cells [11]. Value;

sheet. Cells [i + 3, 13] = dataGridView2. Rows [i]. Cells [12]. Value;

sheet. Cells [i + 3, 14] = dataGridView2. Rows [i]. Cells [13]. Value;

}

// bookExcel. Save ();

bookExcel. SaveAs (savefile. FileName, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Excel. XlSaveAsAccessMode. xlExclusive, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

appExcel. Quit ();

}

}

catch (Exception ex)

{

MessageBox. Show ("Ошибкапрограммы (tables_full:: savefile). Ошибкадляразработчика (" + ex. Message + ")");

}

}

privatevoid aboutToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. about ();

}

privatevoidдиаToolStripMenuItem_Click (object sender, EventArgs e)

{

if (results! = true)

{

MessageBox. Show ("Выполните расчет графика, перед получение диаграммы Ганта. ");

return;

}

SaveFileDialog savefile = newSaveFileDialog

{

InitialDirectory = Environment. CurrentDirectory,

Filter = "Книга Excel (*. xls,*xlsx) |*. xls?"

};

try

{

if (savefile. ShowDialog () == DialogResult. OK)

{

Excel. Application appExcel = new Excel. Application ();

Excel. Workbook bookExcel = appExcel. Workbooks. Add (System. Reflection. Missing. Value);

Excel. Worksheet sheet = bookExcel. Worksheets [1];

sheet. Cells [1, 1] = "Кол-во работ";

sheet. Cells [1, 2] = dataGridView2. RowCount;

sheet. Cells [2, 1] = "Собитие i";

sheet. Cells [2, 2] = "Собитие j";

sheet. Cells [2, 3] = "Начало";

sheet. Cells [2, 4] = "Продолжительность";

for (int i = 0; i < dataGridView2. RowCount; i++)

{

sheet. Cells [i + 3, 1] = dataGridView2. Rows [i]. Cells [0]. Value;

sheet. Cells [i + 3, 2] = dataGridView2. Rows [i]. Cells [1]. Value;

sheet. Cells [i + 3, 3] = dataGridView2. Rows [i]. Cells [6]. Value;

sheet. Cells [i + 3, 4] = dataGridView2. Rows [i]. Cells [2]. Value;

}

Excel. ChartObjects xlCharts = (Excel. ChartObjects) sheet. ChartObjects (Type. Missing);

Excel. ChartObject myChart = (Excel. ChartObject) xlCharts. Add (110, 0, 350, 250);

Excel. Chart chart = myChart. Chart;

Excel. SeriesCollection seriesCollection = (Excel. SeriesCollection) chart. SeriesCollection (Type. Missing);

Excel. Series series = seriesCollection. NewSeries ();

Excel. Range chartRange1;

chart. ChartType = Excel. XlChartType. xlBarStacked;

// chart. ApplyChartTemplate (Environment. CurrentDirectory + @"/gantt. crtx");

// chartRange1 = sheet. get_Range ("$G$3: $G$" + (dataGridView2. RowCount + 2), Missing. Value);

chartRange1 = sheet. get_Range ("$C$3: $C$" + (dataGridView2. RowCount + 2) + "; $D$3: $D$" + (dataGridView2. RowCount + 2), Missing. Value);

chart. Legend. Delete ();

chart. SetSourceData (chartRange1, Excel. XlRowCol. xlColumns);

chart. Location (Excel. XlChartLocation. xlLocationAsNewSheet, "Gantt");

// chartRange2 = sheet. get_Range ("$C$3: $C$" + (dataGridView2. RowCount + 2), Missing. Value);

// chart. SetSourceData (chartRange2, Missing. Value);

// series. XValues = sheet. get_Range ("A1", "A10");

// series. Values = sheet. get_Range ("B1", "B10");

appExcel. Visible = true;

bookExcel. SaveAs (savefile. FileName, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Excel. XlSaveAsAccessMode. xlExclusive, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

}

}

catch (Exception ex)

{

MessageBox. Show ("Ошибкапрограммы (tables_full:: savefile). Ошибкадляразработчика (" + ex. Message + ")");

}

}

privatevoid helpToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. helper ();

}

}

}

v МодульSPU - cost_opt. cs

using System;

using System. Collections. Generic;

using System.componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Threading. Tasks;

using System. Windows. Forms;

using ModulesGraph. Construct;

using ModulesGraph. Abstract;

using Excel = Microsoft. Office. Interop. Excel;

namespace SPU

{

publicpartialclasscost_opt: Form

{

public cost_opt (List<Cmins> cmini)

{

InitializeComponent ();

for (int i = 0; i < cmini. Count; i++)

{

dataGridView1. RowCount++;

dataGridView1. Rows [i]. Cells [0]. Value = Convert. ToString (cmini. ElementAt (i). g1);

dataGridView1. Rows [i]. Cells [1]. Value = Convert. ToString (cmini. ElementAt (i). g2);

dataGridView1. Rows [i]. Cells [2]. Value = Convert. ToString (cmini. ElementAt (i). t);

dataGridView1. Rows [i]. Cells [3]. Value = Convert. ToString (cmini. ElementAt (i). tR);

dataGridView1. Rows [i]. Cells [4]. Value = Convert. ToString (cmini. ElementAt (i). Rc);

dataGridView1. Rows [i]. Cells [5]. Value = Convert. ToString (cmini. ElementAt (i). C);

dataGridView1. Rows [i]. Cells [6]. Value = Convert. ToString (cmini. ElementAt (i). Cmin);

label3. Text = Convert. ToString (Convert. ToDouble (label3. Text) + cmini. ElementAt (i). C);

label5. Text = Convert. ToString (Convert. ToDouble (label5. Text) + cmini. ElementAt (i). Cmin);

}

this. Show ();

}

privatevoid cost_opt_Load (object sender, EventArgs e)

{

dataGridView1. Width = this. Width - 35;

dataGridView1. Height = this. Height - 100 - 35;

}

privatevoid cost_opt_Resize (object sender, EventArgs e)

{

dataGridView1. Width = this. Width - 35;

dataGridView1. Height = this. Height - 100 - 35;

}

privatevoid saveinExcel201ХToolStripMenuItem_Click (object sender, EventArgs e)

{

SaveFileDialog savefile = newSaveFileDialog

{

InitialDirectory = Environment. CurrentDirectory,

FileName = "Список работ с резервом. xlsx",

Filter = "Книга Excel (*. xls,*xlsx) |*. xls?"

};

// OpenFileDialog savefile2 = new OpenFileDialog

// {

// Filter = "Книга Excel (*. xls,*xlsx) |*. xls?"

// };

try

{

if (savefile. ShowDialog () == DialogResult. OK)

{

Excel. Application appExcel = new Excel. Application ();

// appExcel. Workbooks.

// string dir =

// appExcel. Workbooks. Open (@". /1. xls");

Excel. Workbook bookExcel = appExcel. Workbooks. Add (System. Reflection. Missing. Value);

// bookExcel. SaveAs (savefile. FileName, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Excel. XlSaveAsAccessMode. xlNoChange, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

Excel. Worksheet sheet = bookExcel. Worksheets [1];

sheet. Cells. NumberFormat = "# ##0.00";

sheet. Cells [1, 1] = "Собитие i";

sheet. Cells [1, 2] = "Собитие j";

sheet. Cells [1, 3] = "Продолжительность";

sheet. Cells [1, 4] = "Стоимость";

sheet. Cells [1, 5] = "R (i)";

sheet. Cells [1, 6] = "R (j)";

sheet. Cells [1, 7] = "tрн (i,j)";

sheet. Cells [2, 8] = "C до";

sheet. Cells [2, 9] = Convert. ToDouble (label3. Text);

sheet. Cells [3, 8] = "C после";

sheet. Cells [3, 9] = Convert. ToDouble (label5. Text);

for (int i = 0; i < dataGridView1. RowCount; i++)

{

sheet. Cells [i + 2, 1] = Convert. ToInt32 (dataGridView1. Rows [i]. Cells [0]. Value);

sheet. Cells [i + 2, 2] = Convert. ToInt32 (dataGridView1. Rows [i]. Cells [1]. Value);

sheet. Cells [i + 2, 3] = Convert. ToDouble (dataGridView1. Rows [i]. Cells [2]. Value);

sheet. Cells [i + 2, 4] = Convert. ToDouble (dataGridView1. Rows [i]. Cells [3]. Value);

sheet. Cells [i + 2, 5] = Convert. ToDouble (dataGridView1. Rows [i]. Cells [4]. Value);

sheet. Cells [i + 2, 6] = Convert. ToDouble (dataGridView1. Rows [i]. Cells [5]. Value);

sheet. Cells [i + 2, 7] = Convert. ToDouble (dataGridView1. Rows [i]. Cells [6]. Value);

}

// bookExcel. Save ();

bookExcel. SaveAs (savefile. FileName, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Type. Missing, Excel. XlSaveAsAccessMode. xlExclusive, Type. Missing, Type. Missing, Type. Missing, Type. Missing);

appExcel. Quit ();

}

}

catch (Exception ex)

{

MessageBox. Show ("Ошибкапрограммы (tables_full:: savefile). Ошибкадляразрабочика (" + ex. Message + ")");

}

}

privatevoid aboutToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. about ();

}

privatevoid helpToolStripMenuItem_Click (object sender, EventArgs e)

{

menu men = newmenu ();

men. helper ();

}

privatevoid exitToolStripMenuItem_Click (object sender, EventArgs e)

{

Close ();

}

}

}

v Модуль ModulesGraph - IGraphWork. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

using System. Threading. Tasks;

using ModulesGraph. Construct;

namespace ModulesGraph. Abstract

{

publicstructGraphMy

{

publicInt32 id, x, y;

}

publicstructCmins

{

publicInt32 g1, g2;

publicDouble t, tR, Rc, C, Cmin;

}

publicstructWorkMy

{

publicInt32 g1, g2;

publicDouble time, cost;

}

publicinterfaceIGraphWork

{

List<GraphMy> graph_add (List<GraphMy> all_graph, GraphMy graph);

List<GraphMy> graph_del (List<GraphMy> all_graph, GraphMy graph);

}

}

v Модуль ModulesGraph - GraphWork. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

using System. Threading. Tasks;

using ModulesGraph. Abstract;

namespace ModulesGraph. Construct

{

publicclassGraphWork: IGraphWork

{

publicList<GraphMy> graph_add (List<GraphMy> all_graph, GraphMy graph)

{

all_graph. Add (graph);

return all_graph;

}

publicList<GraphMy> graph_del (List<GraphMy> all_graph, GraphMy graph)

{

all_graph. RemoveAt (graph. id);

return all_graph;

}

}

}

Заключение

Характеристика программы.

Наименование

Обозначение

SPU. exe

Исполняемый файл (объем 350 КБ).

ModulesGraph. dll

Файл динамической библиотеки (объем 5 КБ).

Параметры работ. xlsx

Этот демо-файл содержит используемую проектом информацию.

Список работ с резервом. xlsx

Демо-файл содержащий демо-информацию оптимизации сетевой модели.

AboutBox. cs,

Cost_opt. cs,

Graph_tab. cs,

MAIN. cs,

SplashSrceen. cs,

tables_full. cs,

IGraphWork. cs,

GraphWork. cs

Текстовые файлы с исходным кодом.

Программа работает под управлением операционной системы MicrosoftWindowsXP/7/8/8.1 Тестирование программой пройдено успешно, т.е. изменений в работе не наблюдалось. Для её корректной работы и установки требуется не менее 30мегабайт свободной оперативной памяти и не более 1 Мб. свободного дискового пространства.

Временные показатели программы неплохие, а именно для расчета оптимизации на 6-21 операций необходимо 1 - 5 секунд.

Программа узконаправленная. Расчет оптимизации производит только по одному методу, который в основном используют студенты на дисциплине "Дискретна математика"

Программа работает успешно.

Список использованной литературы

1. Круценюк К.Ю. Численные методы решения уравнений (Excel, Turbo Pascal, Delphi) [Текст]: учеб. пособие / К.Ю. Круценюк; Норильский индустр. ин-т. - Норильск: НИИ, 2010. - 76 с. - Библиогр.: с.73-74 (24 назв.).

2. ВоиноваО.И. Дискретная математика. [Текст]: Учеб. пособие / О.И. Воинова; Норильский индустр. ин-т. - Норильск: НИИ 2013. - 132 c.

3. КостевичЛ.С. Математическое программирование: Информ. технологии оптимальных решений [Текст]: учеб. пособие / Л.С. Костевич - Мн.: Новое знание, 2003. - 424 с.

4. Куперштейн В.И. Microsoft® Project 2013 в управлении проектами. - СПб.: БХВ-Петербург, 2014. - 432 с.: ил. + FTP - (Самоучитель)

5. Осипов Н.А. Разработка приложений на C# - СПб: НИУ ИТМО, 2012. - 118 с.

6. Ляхович В.Ф. Руководство к решению задач по основам информатики и вычислительной техники. - М.: Высшая школа, 1994.

7. Евстигнеев В.А., Касьянов В.Н. Теория графов: алгоритмы обработки деревьев. - Новосибирск: Наука, 1994.

8. Уилсон Р. Введение в теорию графов. - М.: Мир, 1977.

9. Браверман Э.М. Математические модели планирования и управления в экономических системах. М.: Наука, 2009. - 366 с.

10. Кук Д., Бейз Г. Компьютерная математика: Пер. с англ. М.: Наука, 2009. - 384 с.

11. Голубков Е.П. Использование системного анализа в принятии плановых решений. М.: Экономика, 2009. - 160 с.

12. Зыков А.А. Основы теории графов. М.: Наука, 2009. - 384с.

13. http://bibliofond.ru/detail. aspx? id=701898

14. https: // msdn. microsoft.com/ru-ru/library/

15. http://helpiks.org/1-107739.html

16. http://studopedia. info/1-116654.html

17. http://habrahabr.ru/post/45459/

18. http://kovalenko-taras. blogspot.ru/2012/06/c.html

19. http://vscode.ru/articles/sozdanie-installyatora-v-visual-studio.html

20. http://zavyalov. blogspot.ru/2010/11/c.html

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


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

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

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

  • Расчет времени раннего и позднего начала работ, раннего и позднего окончания работ, полного и частного резерва работ. Разработка сетевого и календарного графиков табличным способом для составления периодических отчетов о ходе выполнения проекта.

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

  • Расчет табличным способом параметров сетевого графика: время раннего и позднего начала и окончания работ, полный и частный (свободный) резерв работ. Определение траектории и длины критического пути. Описание метода решения задачи на математическом языке.

    курсовая работа [710,6 K], добавлен 18.05.2013

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

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

  • Составление списка закупок активного и пассивного сетевого оборудования, программного обеспечения, их установки. Расчет затрат, количества дней на установку сетевого оборудования и настройку программного обеспечения. Описание базы данных в программе 1С.

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

  • Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.

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

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

    лабораторная работа [70,9 K], добавлен 15.03.2009

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

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

  • Разработка проекта корпоративной ЛВС. Реализация схемы IP-адресации с помощью сервисов DHCP и технологии NAT. Настройка сетевого оборудования (коммутаторов, маршрутизаторов, DNS, HTTP-серверов), динамической маршрутизации при помощи протоколов RIP и OSPF.

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

  • Основные характеристики графики в операционной системе Windows, реализация объектно-ориентированной идеологии. Специфика и этапы разработки программного продукта, описывающего графический объект, на 32-битном ассемблере с использованием API-функции.

    курсовая работа [82,3 K], добавлен 18.05.2014

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