- •Оглавление
- •Введение
- •Понятие бизнес-процессов и их роль в современном управлении
- •1.1 Структура и классификация бизнес-процессов
- •Инструменты бизнес-моделирования и особенности его применения
- •Модель бизнес-процессов
- •Проектирования бизнес-процесса
- •Разработка инструментария планирования бизнес-процесса и его применение деятельности предприятия “Холдинг Афанасий”
- •Среда разработки
- •R3 как инструментария для планирования бизнес-процессов в “Холдинг Афанасий”
- •Разработка программного продукта
- •Заключение
- •Список использованной литературы и источники
- •Приложение
Приложение
BussinesProcess.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing.Drawing2D;
using System.Drawing;
namespace Диплом
{
public struct Job
{
public String namePeople;
public String nameOffice;
public IList<String> funktion;
}
public class BussinesProcess
{
public String nameProcess;
public bool PrOrJob;
public Job funk;
public IList<BussinesProcess> neiboor;
public bool fun;
public BussinesProcess funktion;
public Point m;
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Диплом
{
public partial class Form1 : Form
{
bool fl;/////////////////выбор диаграмм
Graphics graphics;
Bitmap B_map;
IList<String> именаБлоковБизнесФункций = new List<String>();
IList<String> именаОтделов = new List<String>();
Rectangle[] Отделы = new Rectangle[4];
public int kef = 10;
Rectangle[] бизнесФункции = new Rectangle[7];
Rectangle[] началоКонец = new Rectangle[2];
Rectangle[] бизнесФункции1 = new Rectangle[7];
public Form1()
{
InitializeComponent();
B_map = new Bitmap(900, 700);
graphics = Graphics.FromImage(B_map);
graphics.Clear(Color.White);
pictureBox1.Image = B_map;
именаБлоковБизнесФункций.Add("Принятие заявок");
именаБлоковБизнесФункций.Add("Формирование задания для отгрузки");
именаБлоковБизнесФункций.Add("Распределение транспортных средств");
именаБлоковБизнесФункций.Add("Отгрузка");
именаБлоковБизнесФункций.Add("Подготовка документов");
именаБлоковБизнесФункций.Add("Экспедирование");
именаБлоковБизнесФункций.Add("Контроль и анализ договоров");
именаОтделов.Add("Логистика");
именаОтделов.Add("Транспортная\nкомпания");
именаОтделов.Add("Отдел обра-\nботки доку-\nментов");
именаОтделов.Add("Склад");
richTextBox1.ReadOnly = true;
button2.Enabled = false;
for (int i = 0; i < 2; i++)
{
Point P1;
if (i < 1)
{
P1 = new Point((900 / 2) + 30, 5);
началоКонец[i].Location = P1;
началоКонец[i].Width = 30;
началоКонец[i].Height = 30;
}
else
{
P1 = new Point((900 / 2) + (900 / 3) + 30, 640);
началоКонец[i].Location = P1;
началоКонец[i].Width = 30;
началоКонец[i].Height = 30;
}
}
for (int i = 0; i < 7; i++)
{
Point P1 = new Point((900 / 2) + (900 / 4) - 30, i * 100 + 5);
бизнесФункции1[i].Location = P1;
бизнесФункции1[i].Width = 30;
бизнесФункции1[i].Height = 30;
}
for (int i = 0; i < 7; i++)
{
Point P1 = new Point(900 / 4 - 30, i * 100 + 5);
бизнесФункции[i].Location = P1;
бизнесФункции[i].Width = 30;
бизнесФункции[i].Height = 30;
}
for (int i = 0; i < 4; i++)
{
Point P1;
if (i < 2)
{
P1 = new Point(20, 250 + i * 250);
}
else
{
P1 = new Point((900 / 3) + 30, 250 + (i - 2) * 250);
}
Отделы[i].Location = P1;
Отделы[i].Width = 100;
Отделы[i].Height = 50;
}
}
public void RisArrow(Point X, Point Y)
{
Pen penLINE = new Pen(Color.Black, 2);
graphics.DrawLine(penLINE, X, Y);
double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));
pictureBox1.Image = B_map;
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
for (int i = 0; i < именаБлоковБизнесФункций.Count; i++)
{
richTextBox1.Text += Convert.ToString(i + 1) + " - " + именаБлоковБизнесФункций[i] + "\n";
}
Pen pen = new Pen(Color.Black,2);
Point p1 = new Point(900/2,0);
Point p2 = new Point(900/2,700);
graphics.DrawLine(pen,p1,p2);
pen.Color = Color.Red;
pen.Width = 3;
graphics.DrawRectangles(pen, бизнесФункции);
graphics.DrawRectangles(pen, бизнесФункции1);
pen.Color = Color.Green;
pen.Width = 3;
graphics.DrawRectangles(pen, Отделы);
graphics.DrawRectangles(pen, началоКонец);
for (int i = 0; i < 7; i++)
{
String Text = String.Format("{0}", Convert.ToString(i+1));
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции[i].Location.X + kef, бизнесФункции[i].Location.Y + kef);
}
for (int i = 0; i < 2; i++)
{
if (i < 1)
{
String Text = String.Format("{0}", "Nо");
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);
}
else
{
String Text = String.Format("{0}", "Nф");
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);
}
}
for (int i = 0; i < 7; i++)
{
String Text = String.Format("{0}", Convert.ToString(i + 1));
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции1[i].Location.X + kef, бизнесФункции1[i].Location.Y + kef);
}
for (int i = 0; i < 4; i++)
{
String Text = String.Format("{0}", именаОтделов[i]);
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, Отделы[i].Location.X + kef, Отделы[i].Location.Y + kef);
}
///////////////////////////////////////////Стрелки для 2 диаграммы
for (int i = 0; i < 6; i++)
{
Point X = new Point(бизнесФункции1[i].Location.X + 30 / 2, бизнесФункции1[i].Location.Y + 30);
Point Y = new Point(бизнесФункции1[i + 1].Location.X + 30 / 2, бизнесФункции1[i + 1].Location.Y);
RisArrow(X, Y);
}
for (int i = 0; i < 2; i++)
{
Point X;
Point Y;
if (i < 1)
{
X = new Point(началоКонец[i].Location.X + 30, началоКонец[i].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[i].Location.X, бизнесФункции1[i].Location.Y + 30 / 2);
RisArrow(X, Y);
}
else
{
X = new Point(бизнесФункции1[бизнесФункции1.Length - 1].Location.X + 30, бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2);
Y = new Point(началоКонец[i].Location.X, началоКонец[i].Location.Y + 30 / 2);
RisArrow(X, Y);
}
}
for (int i = 0; i < 3; i++)
{
pen.Width = 2;
pen.Color = Color.Black;
Point X;
Point Y;
switch (i)
{
case 0: {
X = new Point(бизнесФункции1[1].Location.X, бизнесФункции1[1].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[1].Location.X - 60, бизнесФункции1[1].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X - 60;
Y.Y = бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X;
RisArrow(X, Y);
break; }
case 1:
{
X = new Point(бизнесФункции1[2].Location.X + 30, бизнесФункции1[2].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[2].Location.X + 60, бизнесФункции1[2].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X + 60;
Y.Y = бизнесФункции1[1].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X + 30;
RisArrow(X, Y);
break;
}
case 2: {
X = new Point(бизнесФункции1[3].Location.X, бизнесФункции1[3].Location.Y + 30 / 2);
Y = new Point(бизнесФункции1[3].Location.X - 30, бизнесФункции1[3].Location.Y + 30 / 2);
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[2].Location.X - 30;
Y.Y = бизнесФункции1[2].Location.Y + 30 / 2;
graphics.DrawLine(pen, X, Y);
X = Y;
Y.X = бизнесФункции1[1].Location.X;
RisArrow(X, Y);
break;
}
}
}
///////////////////////////////////////////Стрелки для 1 диаграммы
Point X1 = new Point(бизнесФункции[0].Location.X,бизнесФункции[0].Location.Y + 30/2);
Point Y1 = new Point(Отделы[0].Location.X + 100 / 4, Отделы[0].Location.Y);
RisArrow(X1, Y1);
X1.X += 30;
Y1.X = Отделы[2].Location.X + 100 / 4;
Y1.Y = Отделы[2].Location.Y;
RisArrow(X1, Y1);
X1.X -= 30;
X1.Y = бизнесФункции[1].Location.Y + 30 / 2;
Y1.X = Отделы[0].Location.X + (100/4) * 3;
Y1.Y = Отделы[0].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[2].Location.Y + 30 / 2;
Y1.X = Отделы[1].Location.X + 100 / 4;
Y1.Y = Отделы[1].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[3].Location.Y + 30 / 2;
Y1.X = Отделы[1].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[1].Location.Y;
RisArrow(X1, Y1);
X1.X += 30;
Y1.X = Отделы[3].Location.X + 100 / 4;
Y1.Y = Отделы[3].Location.Y;
RisArrow(X1, Y1);
X1.Y = бизнесФункции[4].Location.Y + 30 / 2;
Y1.X = Отделы[2].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[2].Location.Y + 50;
RisArrow(X1, Y1);
X1.X -= 30;
X1.Y = бизнесФункции[5].Location.Y + 30 / 2;
Y1.X = Отделы[0].Location.X + (100 / 4) * 3;
Y1.Y = Отделы[0].Location.Y + 50;
RisArrow(X1, Y1);
Y1.X = Отделы[1].Location.X + 100;
Y1.Y = Отделы[1].Location.Y + 50 / 2;
RisArrow(X1, Y1);
X1.X += 30;
X1.Y = бизнесФункции[6].Location.Y + 30 / 2;
Y1.X = Отделы[2].Location.X + 100 / 4;
Y1.Y = Отделы[2].Location.Y + 50;
RisArrow(X1, Y1);
pictureBox1.Image = B_map;
fl = true;
button2.Enabled = true;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (fl == true)
{
int k = -1;
for (int i = 0; i < Отделы.Length; i++)
{
if (e.Location.X >= Отделы[i].Location.X && e.Location.X <= Отделы[i].Location.X + 100 && e.Location.Y >= Отделы[i].Location.Y && e.Location.Y <= Отделы[i].Location.Y + 50)
k = i;
}
switch (k)
{
case 0:
{
Form2 f2 = new Form2();
f2.ShowDialog();
break;
}
case 1:
{
MessageBox.Show("Форма ТК");
break;
}
case 2:
{
MessageBox.Show("Форма ООД");
break;
}
case 3:
{
MessageBox.Show("Форма Склад");
break;
}
default: break;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f = new Form3();
f.ShowDialog();
}
}
}
Form1.Designer.cs
namespace Диплом
{
partial class Form1
{
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(13, 13);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(900, 700);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(919, 224);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(419, 494);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "";
//
// button1
//
this.button1.Location = new System.Drawing.Point(919, 179);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(116, 39);
this.button1.TabIndex = 2;
this.button1.Text = "Нарисовать диаграммы";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(919, 12);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(116, 39);
this.button2.TabIndex = 3;
this.button2.Text = "Построить бизнес-процесс";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1350, 730);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.pictureBox1);
this.Name = "Form1";
this.Text = "Диплом";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Диплом
{
public partial class Form2 : Form
{
BussinesProcess BP;
Graphics graphics;
Bitmap B_map;
public int kef = 10;
public int kefX = 50 + 90;
public int kefY = 50 + 40;
public int W = 90;
public int H = 40;
public Form2()
{
int K = 10;
BP = new BussinesProcess();
String NM;
InitializeComponent();
B_map = new Bitmap(900, 700);
graphics = Graphics.FromImage(B_map);
graphics.Clear(Color.White);
pictureBox1.Image = B_map;
BP.funk = new Job();
BP.neiboor = new List<BussinesProcess>();
BP.nameProcess = "Логистика";
BP.PrOrJob = false;
BP.fun = false;
/////////////////////////////////////////////////////////////////////
BussinesProcess b = new BussinesProcess();
b.PrOrJob = true;
b.fun = false;
b.funk = new Job();
b.funk.funktion = new List<String>();
b.neiboor = new List<BussinesProcess>();
b.nameProcess = "Начальник от-\nдела логистики";
//////////////////////////////////////////////////////////////////////
b.funk.namePeople = "Марья Ивановна";
b.funk.nameOffice = "Начальник отдела логистики";
NM = "Найм новых сотрудников";
b.funk.funktion.Add(NM);
NM = "Распределение ресурсов";
b.funk.funktion.Add(NM);
NM = "Контроль качества";
b.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
BussinesProcess b1 = new BussinesProcess();
b1.PrOrJob = true;
b1.fun = false;
b1.funk = new Job();
b1.funk.funktion = new List<String>();
b1.nameProcess = "Логист";
/////////////////////////////////////////////////////////////////////
b1.funk.nameOffice = "Логист";
b1.funk.namePeople = "Сидоров Петя";
NM = "Выбор типа транспортного средства.";
b1.funk.funktion.Add(NM);
NM = "Выбор вида транспортного средства.";
b1.funk.funktion.Add(NM);
NM = "Совместное планирование транспортных процессов со складскими и производственными операциями.";
b1.funk.funktion.Add(NM);
NM = "Совместное планирование транспортных процессов на различных видах транспорта.";
b1.funk.funktion.Add(NM);
NM = "Обеспечение технологического единства транспортно-складского процесса.";
b1.funk.funktion.Add(NM);
NM = "Определение рациональных маршрутов поставки.";
b1.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
b.neiboor.Add(b1);
/////////////////////////////////////////////////////////////////////
b1 = new BussinesProcess();
b1.PrOrJob = true;
b1.fun = false;
b1.funk = new Job();
b1.funk.funktion = new List<String>();
b1.nameProcess = "Отдел экспе-\nдирования";
/////////////////////////////////////////////////////////////////////
b1.funk.nameOffice = "Экспедитор";
b1.funk.namePeople = "Иванов Федька";
NM = "Доставка товара.";
b1.funk.funktion.Add(NM);
NM = "Получение денежных средств.";
b1.funk.funktion.Add(NM);
NM = "Доставка денежных средств на базу.";
b1.funk.funktion.Add(NM);
/////////////////////////////////////////////////////////////////////
b.neiboor.Add(b1);
BP.neiboor.Add(b);
}
public IList<Point> raspredY(int size, int Y)
{
IList<Point> arr = new List<Point>(size);
for (int i = 0; i < size; i++)
{
Point xy = new Point();
xy.Y = Y;
xy.X = kefX + (i+1) * 500 / (size + 1);
arr.Add(xy);
}
return arr;
}
public void RisArrow(Point X, Point Y)
{
Pen penLINE = new Pen(Color.Black, 2);
graphics.DrawLine(penLINE, X, Y);
double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));
graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));
pictureBox1.Image = B_map;
}
public void RisBlock(BussinesProcess a)
{
Pen pen = new Pen(Color.Red, 3);
graphics.DrawRectangle(pen, a.m.X, a.m.Y, W, H);
String Text = String.Format("{0}", a.nameProcess);
Brush Кисть = new SolidBrush(Color.Black);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, a.m.X + kef, a.m.Y + kef);
pictureBox1.Image = B_map;
}
private void Form2_Load(object sender, EventArgs e)
{
BP.m.Y = 10;
int Y = kefY + BP.m.Y;
BP.m.X = kefX + 500 / (1 + 1);
IList<Point> arr = new List<Point>();
arr = raspredY(BP.neiboor.Count, Y);
for (int i = 0; i < BP.neiboor.Count; i++)
{
BP.neiboor[i].m = arr[i];
}
Y = Y + kefY;
RisBlock(BP);
for (int i = 0; i < BP.neiboor.Count; i++)
{
RisBlock(BP.neiboor[i]);
}
for (int i = 0; i < BP.neiboor.Count; i++)
{
arr = raspredY(BP.neiboor[i].neiboor.Count, Y);
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
BP.neiboor[i].neiboor[j].m = arr[j];
RisBlock(BP.neiboor[i].neiboor[j]);
}
}
Point XX = new Point();
XX.X = BP.m.X + W / 2;
XX.Y = BP.m.Y + H;
for (int i = 0; i < BP.neiboor.Count; i++)
{
Point YY = new Point();
YY.Y = BP.neiboor[i].m.Y;
YY.X = BP.neiboor[i].m.X + W / 2;
RisArrow(XX, YY);
Point XYY = new Point();
XYY.X = YY.X;
XYY.Y = YY.Y + H;
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
Point YYY = new Point();
YYY.Y = BP.neiboor[i].neiboor[j].m.Y;
YYY.X = BP.neiboor[i].neiboor[j].m.X + W / 2;
RisArrow(XYY, YYY);
}
}
}
private void pictureBox1_MouseClick(object sender, EventArgs e)
{
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
for (int i = 0; i < BP.neiboor.Count; i++)
{
if (BP.neiboor[i].PrOrJob == true && BP.neiboor[i].m.X <= e.Location.X
&& BP.neiboor[i].m.X + W >= e.Location.X
&& BP.neiboor[i].m.Y <= e.Location.Y
&& BP.neiboor[i].m.Y + H >= e.Location.Y)
{
String Str = "";
Str = BP.neiboor[i].funk.nameOffice + "\n";
for (int j = 0; j < BP.neiboor[i].funk.funktion.Count; j++)
{
Str += Convert.ToString(j + 1) + " - " + BP.neiboor[i].funk.funktion[j] + "\n";
}
MessageBox.Show(Str);
}
else
{
for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)
{
if (BP.neiboor[i].neiboor[j].PrOrJob == true && BP.neiboor[i].neiboor[j].m.X <= e.Location.X
&& BP.neiboor[i].neiboor[j].m.X + W >= e.Location.X
&& BP.neiboor[i].neiboor[j].m.Y <= e.Location.Y
&& BP.neiboor[i].neiboor[j].m.Y + H >= e.Location.Y)
{
String Str = "";
Str = BP.neiboor[i].neiboor[j].funk.nameOffice + "\n";
for (int j1 = 0; j1 < BP.neiboor[i].neiboor[j].funk.funktion.Count; j1++)
{
Str += Convert.ToString(j1 + 1) + " - " + BP.neiboor[i].neiboor[j].funk.funktion[j1] + "\n";
}
MessageBox.Show(Str);
}
}
}
}
}
}
}
Form2.Designer.cs
namespace Диплом
{
partial class Form2
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(900, 700);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
//
// Form2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(924, 725);
this.Controls.Add(this.pictureBox1);
this.Name = "Form2";
this.Text = "Логистика";
this.Load += new System.EventHandler(this.Form2_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
}
}
Form3.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Диплом
{
public partial class Form3 : Form
{
public struct El
{
public int numBP;
public String nameBL;
public bool fl;
public bool Start;
public int t;
public int n;
public int s;
}
public struct StrGr
{
public El A;
public IList<El> B;
}
public struct Variant
{
public IList<El> var;
}
public struct Znach
{
public int t;
public int n;
public int s;
}
IList<Znach> znach = new List<Znach>();
IList<Variant> varianty = new List<Variant>();
IList<StrGr> grammatik= new List<StrGr>();
public Form3()
{
InitializeComponent();
richTextBox2.ReadOnly = true;
richTextBox1.ReadOnly = true;
El Start = new El();
Start.fl = false;
Start.Start = true;
Start.nameBL = "";
Start.numBP = -1;
Start.n = 0;
Start.s = Start.t = -1;
El Finish = new El();
Finish.fl = false;
Finish.Start = false;
Finish.nameBL = "";
Finish.numBP = -1;
Finish.n = 0;
Finish.s = Finish.t = -1;
El l1 = new El();
l1.fl = true;
l1.Start = true;
l1.numBP = 1;
l1.nameBL = "Логистика";
l1.n = 0;
l1.s = l1.t = -1;
El o1 = new El();
o1.fl = true;
o1.Start = true;
o1.numBP = 1;
o1.nameBL = "Отдел обработки документов";
o1.n = 0;
o1.s = o1.t = -1;
El l2 = new El();
l2.fl = true;
l2.Start = true;
l2.numBP = 2;
l2.nameBL = "Логистика";
l2.n = 0;
l2.s = l2.t = -1;
El t3 = new El();
t3.fl = true;
t3.Start = true;
t3.numBP = 3;
t3.nameBL = "Транспортная компания";
t3.n = 0;
t3.s = t3.t = -1;
El t4 = new El();
t4.fl = true;
t4.Start = true;
t4.numBP = 4;
t4.nameBL = "Транспортная компания";
t4.n = 0;
t4.s = t4.t = -1;
El s4 = new El();
s4.fl = true;
s4.Start = true;
s4.numBP = 4;
s4.nameBL = "Склад";
s4.n = 0;
s4.s = s4.t = -1;
El o5 = new El();
o5.fl = true;
o5.Start = true;
o5.numBP = 5;
o5.nameBL = "Отдел обработки документов";
o5.n = 0;
o5.s = o5.t = -1;
El t6 = new El();
t6.fl = true;
t6.Start = true;
t6.numBP = 6;
t6.nameBL = "Транспортная компания";
t6.n = 0;
t6.s = t6.t = -1;
El l6 = new El();
l6.fl = true;
l6.Start = true;
l6.numBP = 6;
l6.nameBL = "Логистика";
l6.n = 0;
l6.s = l6.t = -1;
El o7 = new El();
o7.fl = true;
o7.Start = true;
o7.numBP = 7;
o7.nameBL = "Отдел обработки документов";
o7.n = 0;
o7.s = o7.t = -1;
StrGr g1 = new StrGr();
g1.A = Start;
g1.B = new List<El>();
g1.B.Add(l1);
g1.B.Add(o1);
StrGr g2 = new StrGr();
g2.A = l1;
g2.B = new List<El>();
g2.B.Add(l2);
StrGr g3 = new StrGr();
g3.A = o1;
g3.B = new List<El>();
g3.B.Add(l2);
StrGr g4 = new StrGr();
g4.A = l2;
g4.B = new List<El>();
g4.B.Add(t3);
g4.B.Add(o7);
StrGr g5 = new StrGr();
g5.A = t3;
g5.B = new List<El>();
g5.B.Add(l2);
g5.B.Add(t4);
g5.B.Add(s4);
StrGr g6 = new StrGr();
g6.A = t4;
g6.B = new List<El>();
g6.B.Add(t3);
g6.B.Add(o5);
StrGr g7 = new StrGr();
g7.A = s4;
g7.B = new List<El>();
g7.B.Add(t3);
g7.B.Add(o5);
StrGr g8 = new StrGr();
g8.A = o5;
g8.B = new List<El>();
g8.B.Add(t6);
g8.B.Add(l6);
StrGr g9 = new StrGr();
g9.A = t6;
g9.B = new List<El>();
g9.B.Add(o7);
StrGr g10 = new StrGr();
g10.A = l6;
g10.B = new List<El>();
g10.B.Add(o7);
StrGr g11 = new StrGr();
g11.A = o7;
g11.B = new List<El>();
g11.B.Add(Finish);
grammatik.Add(g1);
grammatik.Add(g2);
grammatik.Add(g3);
grammatik.Add(g4);
grammatik.Add(g5);
grammatik.Add(g6);
grammatik.Add(g7);
grammatik.Add(g8);
grammatik.Add(g9);
grammatik.Add(g10);
grammatik.Add(g11);
}
private void Form3_Load(object sender, EventArgs e)
{
PrintGrammatik();
}
void PrintGrammatikResurs()
{
richTextBox1.Text = "";
for (int i = 0; i < grammatik.Count; i++)
{
if (!grammatik[i].A.fl)
{
if (grammatik[i].A.Start)
richTextBox1.Text += "No -> ";
else
richTextBox1.Text += "Nф -> ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";
}
for (int j = 0; j < grammatik[i].B.Count - 1; j++)
{
if (!grammatik[i].B[j].fl)
{
if (grammatik[i].B[j].Start)
richTextBox1.Text += "No | ";
else
richTextBox1.Text += "Nф | ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} t = " + grammatik[i].B[j].t + " n = " + grammatik[i].B[j].n + " s = " + grammatik[i].B[j].s + " | ";
}
}
if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)
{
if (grammatik[i].B[grammatik[i].B.Count - 1].Start)
richTextBox1.Text += "No \n";
else
richTextBox1.Text += "Nф \n";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} t = " + grammatik[i].B[grammatik[i].B.Count - 1].t + " n = " + grammatik[i].B[grammatik[i].B.Count - 1].n + " s = " + grammatik[i].B[grammatik[i].B.Count - 1].s + "\n";
}
}
}
void PrintGrammatik()
{
richTextBox1.Text = "";
for (int i = 0; i < grammatik.Count; i++)
{
if (!grammatik[i].A.fl)
{
if (grammatik[i].A.Start)
richTextBox1.Text += "No -> ";
else
richTextBox1.Text += "Nф -> ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";
}
for (int j = 0; j < grammatik[i].B.Count - 1; j++)
{
if (!grammatik[i].B[j].fl)
{
if (grammatik[i].B[j].Start)
richTextBox1.Text += "No | ";
else
richTextBox1.Text += "Nф | ";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} | ";
}
}
if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)
{
if (grammatik[i].B[grammatik[i].B.Count - 1].Start)
richTextBox1.Text += "No \n";
else
richTextBox1.Text += "Nф \n";
}
else
{
richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} \n";
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Random rnd = new Random();
if (textBox34.Text == "" || textBox34.Text == " " ||
textBox35.Text == "" || textBox35.Text == " " ||
textBox36.Text == "" || textBox36.Text == " ")
{
MessageBox.Show("Незаполнены диапазоны");
return;
}
int t = Convert.ToInt32(textBox34.Text);
int n = Convert.ToInt32(textBox35.Text);
int s = Convert.ToInt32(textBox36.Text);
for (int i = 0; i < grammatik.Count; i++)
{
switch (i)
{
case 0:
{
textBox1.Text = Convert.ToString(rnd.Next(1,t));
textBox11.Text = Convert.ToString(rnd.Next(1, n));
textBox21.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 1:
{
textBox2.Text = Convert.ToString(rnd.Next(1, t));
textBox12.Text = Convert.ToString(rnd.Next(1, n));
textBox22.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 2:
{
textBox3.Text = Convert.ToString(rnd.Next(1, t));
textBox13.Text = Convert.ToString(rnd.Next(1, n));
textBox23.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 3:
{
textBox4.Text = Convert.ToString(rnd.Next(1, t));
textBox14.Text = Convert.ToString(rnd.Next(1, n));
textBox24.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 4:
{
textBox5.Text = Convert.ToString(rnd.Next(1, t));
textBox15.Text = Convert.ToString(rnd.Next(1, n));
textBox25.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 5:
{
textBox6.Text = Convert.ToString(rnd.Next(1, t));
textBox16.Text = Convert.ToString(rnd.Next(1, n));
textBox26.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 6:
{
textBox7.Text = Convert.ToString(rnd.Next(1, t));
textBox17.Text = Convert.ToString(rnd.Next(1, n));
textBox27.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 7:
{
textBox8.Text = Convert.ToString(rnd.Next(1, t));
textBox18.Text = Convert.ToString(rnd.Next(1, n));
textBox28.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 8:
{
textBox9.Text = Convert.ToString(rnd.Next(1, t));
textBox19.Text = Convert.ToString(rnd.Next(1, n));
textBox29.Text = Convert.ToString(rnd.Next(1, s));
break;
}
case 9:
{
textBox10.Text = Convert.ToString(rnd.Next(1, t));
textBox20.Text = Convert.ToString(rnd.Next(1, n));
textBox30.Text = Convert.ToString(rnd.Next(1, s));
break;
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
int maxT;
int maxN;
int maxS;
if (textBox31.Text == "" || textBox31.Text == " " ||
textBox32.Text == "" || textBox32.Text == " " ||
textBox33.Text == "" || textBox33.Text == " ")
{
MessageBox.Show("Незаполнены предпочтения по ресурсам");
return;
}
maxT = Convert.ToInt32(textBox31.Text);
maxN = Convert.ToInt32(textBox32.Text);
maxS = Convert.ToInt32(textBox33.Text);
for (int i = 0; i < grammatik.Count; i++)
{
for (int j = 0; j < grammatik[i].B.Count; j++)
{
if(grammatik[i].B[j].fl)
{
switch (grammatik[i].B[j].numBP)
{
case 1:
{
switch(grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox2.Text);
a.n = Convert.ToInt32(textBox12.Text);
a.s = Convert.ToInt32(textBox22.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox1.Text);
a.n = Convert.ToInt32(textBox11.Text);
a.s = Convert.ToInt32(textBox21.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 2:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox3.Text);
a.n = Convert.ToInt32(textBox13.Text);
a.s = Convert.ToInt32(textBox23.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 3:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox4.Text);
a.n = Convert.ToInt32(textBox14.Text);
a.s = Convert.ToInt32(textBox24.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 4:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox5.Text);
a.n = Convert.ToInt32(textBox15.Text);
a.s = Convert.ToInt32(textBox25.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'С':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox6.Text);
a.n = Convert.ToInt32(textBox16.Text);
a.s = Convert.ToInt32(textBox26.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 5:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox7.Text);
a.n = Convert.ToInt32(textBox17.Text);
a.s = Convert.ToInt32(textBox27.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 6:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'Т':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox8.Text);
a.n = Convert.ToInt32(textBox18.Text);
a.s = Convert.ToInt32(textBox28.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
case 'Л':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox9.Text);
a.n = Convert.ToInt32(textBox19.Text);
a.s = Convert.ToInt32(textBox29.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
case 7:
{
switch (grammatik[i].B[j].nameBL[0])
{
case 'О':
{
El a = new El();
a = grammatik[i].B[j];
a.t = Convert.ToInt32(textBox10.Text);
a.n = Convert.ToInt32(textBox20.Text);
a.s = Convert.ToInt32(textBox30.Text);
grammatik[i].B.RemoveAt(j);
grammatik[i].B.Insert(j, a);
break;
}
default:
{
MessageBox.Show("Что то пошло не так в заполнении");
return;
}
}
break;
}
}
}
}
}
// PrintGrammatikResurs();
Variant X = new Variant();
X.var = new List<El>();
richTextBox2.Text = "";
rekObchod(X);
for (int i = 0; i < varianty.Count; i++)
{
Znach A = new Znach();
A.n = 0;
A.s = 0;
A.t = 0;
for (int j = 0; j < varianty[i].var.Count; j++)
{
A.t += varianty[i].var[j].t;
A.n += varianty[i].var[j].n;
A.s += varianty[i].var[j].s * A.n;
}
znach.Add(A);
}
if (maxN == -1)
maxN = 99999999;
if (maxT == -1)
maxT = 99999999;
if (maxS == -1)
maxS = 99999999;
PrintVar(maxT,maxN,maxS);
}
void PrintVar(int t, int n, int s)
{
richTextBox2.Text = "Варианты которые вам подходят:\n";
for (int i = 0; i < varianty.Count; i++)
{
if (znach[i].t < t && znach[i].n < n && znach[i].s < s)
{
richTextBox2.Text += "No -> ";
for (int j = 0; j < varianty[i].var.Count; j++)
{
richTextBox2.Text += varianty[i].var[j].numBP + "{" + varianty[i].var[j].nameBL[0] + "} -> ";
}
richTextBox2.Text += " Nф: " + "t = " + znach[i].t + "; n = " + znach[i].n + "; s = " + znach[i].s + "\n";
}
}
}
void rekObchod(Variant a)
{
if (a.var.Count <= 0)
{
for (int i = 0; i < grammatik[0].B.Count; i++)
{
a.var.Add(grammatik[0].B[i]);
rekObchod(a);
a.var.RemoveAt(0);
}
}
else
{
for (int i = 0; i < grammatik.Count; i++)
{
if (grammatik[i].A.nameBL == a.var[a.var.Count - 1].nameBL && grammatik[i].A.numBP == a.var[a.var.Count - 1].numBP)
{
for (int j = 0; j < grammatik[i].B.Count; j++)
{
a.var.Add(grammatik[i].B[j]);
if (a.var[a.var.Count - 1].fl == false)
{
a.var.RemoveAt(a.var.Count - 1);
Variant b = new Variant();
b.var = new List<El>();
for (int k = 0; k < a.var.Count; k++)
b.var.Add(a.var[k]);
varianty.Add(b);
return;
}
else
if (a.var[a.var.Count - 1].numBP != grammatik[i].A.numBP + 1)
{
a.var.RemoveAt(a.var.Count - 1);
continue;
}
else
{
rekObchod(a);
a.var.RemoveAt(a.var.Count - 1);
}
}
}
}
}
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Диплом
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}