Разработка программного продукта "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
Подобные документы
Управление запасами: содержание, ключевые параметры. Моделирование системы управления запасами. Разработка проектной документации на создание информационной системы управления запасами склада, алгоритмическое обеспечение, детальное проектирование.
дипломная работа [1,1 M], добавлен 14.11.2017Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Характеристика торгового предприятия. Анализ существующего программного обеспечения. Современные подходы к управлению запасами. Матрица АВС-XYZ и ее использование при принятии решений при управлении запасами. Разработка необходимого программного продукта.
курсовая работа [1,2 M], добавлен 20.03.2012Анализ организационной структуры управления и бизнес-процессов компании. Разработка логистической информационной системы, включающей в себя подсистемы управления продажами, запасами и грузоперевозками. Подбор ее программного и технического обеспечения.
дипломная работа [3,2 M], добавлен 18.05.2014Разработка программного продукта, предназначенного для тестирования знаний пользователя по теме "Тепловые двигатели" нa языкe C++ в среде Micrоsоft Visual Studio с использовaниeм библиотeки MFC. Функциональное назначение созданного Windows-приложения.
курсовая работа [954,4 K], добавлен 25.06.2011Анализ состояния информационных систем управления запасами на предприятии. Описание рабочего места оператора складского учета. Предметная область предприятия. Разработка практических предложений по автоматизации управления запасами на предприятии.
курсовая работа [606,5 K], добавлен 20.04.2015Обзор существующего программного обеспечения. Структура и отличительные особенности формата MP3. Сокеты TCP/IP, клиент-сервер. Язык программирования Visual Basic.net в среде разработки Visual Studio 2008. Разработка приложения "MP3_Catalogizator".
дипломная работа [2,1 M], добавлен 09.02.2015Требования к MS Office 2007. Набор средств разработки Visual Studio Tools for Office как альтернатива VBA. Разработка СУБД на базе MS Access. Разработка надстройки "Электронные компоненты" для PowerPoint на языке C# в среде MS Visual Studio 2010.
дипломная работа [5,2 M], добавлен 03.05.2013Разработка программного продукта, предназначенного для поиска туров, транспорта, мест проживания и расчета стоимости тура, а так же для работ с клиентской базой туристической фирмы. Тестирование программного продукта в среде Borland Developer Studio 2006.
курсовая работа [2,5 M], добавлен 08.11.2012Разработка на языке программирования C# в среде Microsoft Visual Studio 2010 на базе Microsoft NET Framework 4 (4.5) программного средства, реализующего компилятор модельного языка программирования. Лексический, синтаксический и семантический анализатор.
курсовая работа [1,3 M], добавлен 24.06.2013