Разработка программного продукта "Inventory Management"

Анализ проблемы управления запасами; понятие зависимого и независимого спроса. Математическая и алгоритмическая модели динамического программирования для задачи управления запасами. Программный продукт Inventory Managment в среде Visual Studio 2010.

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

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

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

// e--;

// }

// else

// {

// mass[k, j] = proba[j] * (c_z + h * e + loss);

// e--;

// }

// }

// if (e < 0)

// e = 0;

// naSklade--;

//}

while (naSklade >= 0)

{

for (int i = 0; i < version.Length; i++)

{

if (version[i] > naSklade)

{

mass[naSklade, i] = proba[i] * (c_z + h * e);

}

else

{

mass[naSklade, i] = proba[i] * (c_z + h * e + loss);

}

e--;

}

naSklade--;

}

for (int i = 0; i < mass.GetLength(0); i++)

{

for (int j = 0; j < mass.GetLength(1); j++)

{

if (mass[i, j] < 0)

{

mass[i, j] = mass[i, j] * -1;

}

}

}

}

/// <summary>

/// Метод нахождения минимальных расходов при каждом спросе

/// </summary>

/// <param name="massiw"></param>

/// <returns></returns>

public double[] Min(double[,] massiw)

{

f_res = new double[massiw.GetLength(1)];

k = new int[massiw.GetLength(0)];

double[] min = new double[massiw.GetLength(1)];

int j = 0;

while (j != massiw.GetLength(1))

{

for (int i = 0; i < massiw.GetLength(0); i++)

{

min[i] = massiw[j, i];

}

f_res[j] = min.Min();

j++;

}

for (int i = 0; i < massiw.GetLength(0); i++)

{

for (int c = 0; c < massiw.GetLength(1); c++)

{

if (f_res[i] == massiw[i, c])

{

k[i] = c;

}

}

}

return f_res;

}

/// <summary>

/// Метод возвращающий сумму минимальных расходов умноженых на вероятность

/// </summary>

/// <param name="proba"></param>

/// <param name="arr"></param>

/// <returns></returns>

public double SumMin(double[] proba, double[,] arr)

{

double[] ff_res = new double[f_res.Length];

for (int i = 0; i < Min(arr).Length; i++)

{

ff_res[i] = Min(arr)[i] * proba[i];

}

return ff_res.Sum();

}

/// <summary>

/// Метод который генерирует следующий этап

/// </summary>

/// <param name="value"></param>

/// <param name="mass"></param>

/// <returns></returns>

public double[,] NextEtap(double value, double[,] mass)

{

double[,] arr = new double[mass.GetLength(0), mass.GetLength(1)];

for (int i = 0; i < arr.GetLength(0); i++)

{

for (int j = 0; j < arr.GetLength(1); j++)

{

arr[i, j] = mass[i, j] + value;

}

}

return arr;

}

/// <summary>

/// Метод возвращающий окончательный результат (матрицу расходов)

/// </summary>

/// <param name="n"></param>

/// <returns></returns>

public double[,] GenerationNextEtap(int n, double c_z, double h, double loss)

{

double[,] a_res = NextEtap(SumMin(Probability(n, c_z, h, loss), mass), mass);

int i = 0;

do

{

a_res = NextEtap(SumMin(Probability(n, c_z, h, loss), a_res), a_res);

i++;

}

while (i == n);

return a_res;

}

/// <summary>

/// Метод определяющий оптимальную стратегию

/// </summary>

/// <param name="n"></param>

/// <returns></returns>

public string[] Strategy(int n, double c_z, double h, double loss)

{

Min(GenerationNextEtap(n, c_z, h, loss));

string[] str = new string[mass.GetLength(0)];

for (int j = 0; j < k.Length; j++)

{

str[j] = "Заказать " + k[j] + " продукции";

}

return str;

}

/// <summary>

/// Это метод который генерирует распределение вероятностей относительно спроса

/// </summary>

/// <param name="n"></param>

/// <returns></returns>

public double[] Probability(int n, double c_z, double h, double loss)

{

double[] proba = new double[n + 1];

double[] condition = new double[n + 1];

int mul = 1;

double lambda = rnd.Next(1,10);

//double res;

double a = n;

for (int j = 0; j < condition.Length; j++)

{

condition[j] = c_z * + h * a;

a = a - 1 / 2;

}

//for (int i = 0; i < n + 1; i++)

//{

// if (i == 0)

// {

// mul = 1;

// }

// else

// {

// mul *= i;

// }

// proba[i] = Math.Pow(lambda, i) * Math.Pow(Math.E, -lambda) / mul;

// //a--;

// //rnd = new Random();

//}

for (int i = 0; i < condition.Length; i++)

{

proba[i] = condition[i] / condition.Sum();

}

//do

//{

// for (int i = 0; i < proba.Length; i++)

// {

// // res = proba.Length;

// res = rnd.Next(1, proba.Length);

// //double r = rnd.Next(0, 1);

// //res = proba.Length;

// proba[i] = 1 / res;

// if (proba[i] == 1)

// {

// res = rnd.Next(1, proba.Length);

// proba[i] = 1 / res;

// if (proba[i] == 0.5)

// {

// res = rnd.Next(1, proba.Length);

// proba[i] = 0.5 / res;

// }

// a = proba.Sum();

// if (a != 1.0)

// {

// res = rnd.Next(1, proba.Length);

// proba[i] = 1 / res;

// }

// }

// }

// a = proba.Sum();

//} while (a == 1.0);

// proba = new double[3] { 0.2, 0.5, 0.3 };

return proba;

}

/// <summary>

/// Generation FutureProbability

/// </summary>

/// <param name="condition"></param>

/// <returns></returns>

public double[] FutureProbability(double[,] condition)

{

double[] futureProba = new double[condition.GetLength(0)];

double[] proba = new double[condition.GetLength(0)];

double[] help = new double[condition.GetLength(0)];

double Sum = 0;

for (int i = 0; i < condition.GetLength(0); i++)

{

for (int j = 0; j < condition.GetLength(1); j++)

{

proba[j]= condition[i,j];

}

help[i] = proba.Sum();

}

for (int j = 0; j < futureProba.Length; j++)

{

futureProba[j] = help[j] / help.Sum();

}

//int count = 0;

//while(count < futureProba.GetLength(0))

//{

// for(int i = 0; i < futureProba.GetLength(1); i++)

// {

// proba[i] = futureProba[count, i];

// }

// proba[count] = proba.Sum();

// count++;

//}

return futureProba;

}

}

}

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 Diplom

{

public partial class Form1 : Form

{

public double p, c_z, h, loss;

public int z;

ConechEtap cet = new ConechEtap();

FormZakaz frm_z = new FormZakaz();

FormAbout about = new FormAbout();

double[] proba;

public Form1()

{

InitializeComponent();

frm_z.Hide();

tabControl1.Hide();

about.Dispose();

frm_z.Dispose();

}

/// <summary>

///

/// </summary>

/// <param name="n"></param>

/// <returns></returns>

string[] Out(int n)

{

string[] str = new string[n + 1];

int e = n;

for(int i = 0; i < n + 1; i++)

{

str[i] = "Если на складе " + e + " продукции";

e--;

}

return str;

}

/// <summary>

/// Enter to DataGridview version 2

/// </summary>

/// <param name="lst1"></param>

/// <param name="lst2"></param>

/// <param name="lst3"></param>

void Zanesenie_v_DataGrid1(double[] lst1, double[] lst2, string[] lst3, double[] lst4, string[] lst5)

{

dataGridView2.BackgroundColor = Color.LightGray;

dataGridView2.ColumnCount = lst1.Length;

for (int i = 0; i < lst1.Length; i++)

{

dataGridView2.RowCount = lst1.Length;

}

for (int i = 0; i < lst1.Length; i++)

{

dataGridView2.Rows[i].Cells[0].Value = Convert.ToString(lst1[i]);

dataGridView2.Rows[i].Cells[1].Value = Convert.ToString(lst2[i]);

dataGridView2.Rows[i].Cells[3].Value = Convert.ToString(lst3[i]);

dataGridView2.Rows[i].Cells[4].Value = Convert.ToString(lst4[i]);

dataGridView2.Rows[i].Cells[2].Value = Convert.ToString(lst5[i]);

}

}

/// <summary>

///

/// </summary>

/// <param name="lst1"></param>

//void Zanesenie_Probability_v_DataGrid1(double[] lst1)

//{

// dataGridView2.BackgroundColor = Color.LightGray;

// dataGridView2.ColumnCount = lst1.Length;

// for (int i = 0; i < lst1.Length; i++)

// {

// dataGridView2.RowCount = lst1.Length;

// }

// for (int i = 0; i < lst1.Length; i++)

// {

// dataGridView4.Rows[i].Cells[0].Value = Convert.ToString(lst1[i]);

// }

//}

/// <summary>

/// Enter to DataGridview version 1

/// </summary>

/// <param name="lst"></param>

/// <param name="datagridview"></param>

void Zanesenie_v_DataGrid(double[,] lst, DataGridView datagridview)

{

datagridview.BackgroundColor = Color.LightGray;

datagridview.ColumnCount = lst.GetLength(0);

for (int i = 0; i < lst.GetLength(0); i++)

{

datagridview.RowCount = lst.GetLength(1);

}

for (int i = 0; i < lst.GetLength(0); i++)

{

for (int j = 0; j < lst.GetLength(1); j++)

{

// datagridview.Rows[0].DefaultCellStyle.BackColor = Color.Teal;

// datagridview.Rows[0].Cells[j].Value = .ToString();

datagridview.Rows[i].Cells[j].Value = Convert.ToString(lst[i, j]);

}

}

}

/// <summary>

/// Button_click

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button1_Click(object sender, EventArgs e)

{

c_z = frm_z.c_z;

z = frm_z.z;

h = c_z / 20;

loss = frm_z.loss;

if (p == 0 && c_z == 0 && h == 0 && z == 0)

{

MessageBox.Show("В полях нули. Введите пожалуйста в эти поля число более нуля.");

}

proba = cet.Probability(z, c_z, h, loss);

cet.functionFirstEtap(z,c_z,h,loss, proba);

cet.Min(cet.mass);

Zanesenie_v_DataGrid(cet.mass, dataGridView1);

Zanesenie_v_DataGrid1(cet.Probability(z, c_z, h, loss), cet.Min(cet.mass), cet.Strategy(z, c_z, h, loss), cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)), Out(z));

progressBar1.Minimum = 1;

progressBar1.Maximum = z;

progressBar1.Value = 1;

progressBar1.Step = 1;

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

{

progressBar1.PerformStep();

}

//MessageBox.Show(cet.F_res().ToString());

// cet.GenerationNextEtap(z, c_z, h, loss, progressBar1);

Zanesenie_v_DataGrid(cet.GenerationNextEtap(z, c_z, h, loss), dataGridView3);

// Zanesenie_Probability_v_DataGrid1(cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)));

//Zanesenie_v_DataGrid(cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)), dataGridView4);

}

/// <summary>

/// Open FommChild

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void подготовитсяКРасчетуToolStripMenuItem_Click(object sender, EventArgs e)

{

frm_z = new FormZakaz();

frm_z.Show();

}

/// <summary>

/// Raschet

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void провестиРасчетToolStripMenuItem_Click(object sender, EventArgs e)

{

tabControl1.Show();

c_z = frm_z.c_z;

z = frm_z.z;

h = c_z / 20;

loss = frm_z.loss;

if (p == 0 && c_z == 0 && h == 0 && z == 0)

{

MessageBox.Show("В полях нули. Введите пожалуйста в эти поля число более нуля.");

}

proba = cet.Probability(z, c_z, h, loss);

cet.functionFirstEtap(z, c_z, h, loss, proba);

cet.Min(cet.mass);

Zanesenie_v_DataGrid(cet.mass, dataGridView1);

Zanesenie_v_DataGrid1(cet.Probability(z, c_z, h, loss), cet.Min(cet.mass), cet.Strategy(z, c_z, h, loss), cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)), Out(z));

progressBar1.Minimum = 1;

progressBar1.Maximum = z;

progressBar1.Value = 1;

progressBar1.Step = 1;

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

{

progressBar1.PerformStep();

}

//MessageBox.Show(cet.F_res().ToString());

// cet.GenerationNextEtap(z, c_z, h, loss, progressBar1);

Zanesenie_v_DataGrid(cet.GenerationNextEtap(z, c_z, h, loss), dataGridView3);

// Zanesenie_Probability_v_DataGrid1(cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)));

}

/// <summary>

/// Control key

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Form1_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.Enter)

{

tabControl1.Show();

c_z = frm_z.c_z;

z = frm_z.z;

h = c_z / 20;

loss = frm_z.loss;

if (p == 0 && c_z == 0 && h == 0 && z == 0)

{

MessageBox.Show("В полях нули. Введите пожалуйста в эти поля число более нуля.");

}

proba = cet.Probability(z, c_z, h, loss);

cet.functionFirstEtap(z, c_z, h, loss, proba);

cet.Min(cet.mass);

Zanesenie_v_DataGrid(cet.mass, dataGridView1);

Zanesenie_v_DataGrid1(cet.Probability(z, c_z, h, loss), cet.Min(cet.mass), cet.Strategy(z, c_z, h, loss), cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)), Out(z));

progressBar1.Minimum = 1;

progressBar1.Maximum = z;

progressBar1.Value = 1;

progressBar1.Step = 1;

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

{

progressBar1.PerformStep();

}

//MessageBox.Show(cet.F_res().ToString());

// cet.GenerationNextEtap(z, c_z, h, loss, progressBar1);

Zanesenie_v_DataGrid(cet.GenerationNextEtap(z, c_z, h, loss), dataGridView3);

// Zanesenie_Probability_v_DataGrid1(cet.FutureProbability(cet.GenerationNextEtap(z, c_z, h, loss)));

}

if(e.KeyCode == Keys.Space)

{

подготовитсяКРасчетуToolStripMenuItem_Click(sender, new EventArgs());

}

}

/// <summary>

/// Form Close

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

}

/// <summary>

/// Open Form About

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{

about = new FormAbout();

about.Show();

}

}

}

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 Diplom

{

public partial class FormZakaz : Form

{

public double c_z;

public int z;

public double loss;

/// <summary>

/// Constructor Form

/// </summary>

public FormZakaz()

{

InitializeComponent();

if (text_b_razm.Text == "" && textBoxCountProd.Text == "" && textBox_Loss.Text == "")

{

textBoxCountProd.Text = text_b_razm.Text = textBox_Loss.Text = "0";

}

}

/// <summary>

/// Operation of Event button1_click

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button1_Click(object sender, EventArgs e)

{

if (text_b_razm.Text == "0" && textBoxCountProd.Text == "0")

{

MessageBox.Show("В полях нули. Введите пожалуйста в эти поля число более нуля.");

}

else

{

c_z = Convert.ToDouble(text_b_razm.Text);

z = Convert.ToInt32(textBoxCountProd.Text);

loss = Convert.ToDouble(textBox_Loss.Text);

this.Dispose();

MessageBox.Show("Стоимость Размещения = " + c_z + "\n" + "Количество продукции = " + z + "\n" + "Затраты на хранение единицы = " + c_z / 20);

}

}

/// <summary>

/// Operation of Event FormZakaz_KeyDown

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void FormZakaz_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.Y)

{

button1_Click(sender, new EventArgs());

}

}

/// <summary>

/// Operation of Event button2_click

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button2_Click(object sender, EventArgs e)

{

this.Hide();

}

/// <summary>

/// Operation at Event FormClosing

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void FormZakaz_FormClosing(object sender, FormClosingEventArgs e)

{

if (this.Disposing)

{

}

}

}

}

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


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

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