| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace СУБД_Швейная_фабрика{    public partial class FormAddZakaz : Form    {        public FormAddZakaz()        {            InitializeComponent();        }        public string IdZakazchik = "";  // код авторизовавшегося заказчика        string IdTkan = "", IdFur = "";  // код выбранной ткани и фурнитуры        public struct Tkani        {            public string IdTkan, NameTkan, ColorTkan, Width, Length, Description;            public Image PhotoTkan;        }        List<Tkani> LstTkani = new List<Tkani>();        /// <summary>        /// получить из базы данных сведения о тканях        /// </summary>        void GetTkaniFromDB()        {            SqlConnection con = new SqlConnection(Properties.Settings.Default.fab2021ConnectionString);            con.Open();            SqlCommand Query = new SqlCommand("select * from Tkani where length > 0", con);            SqlDataReader Data = Query.ExecuteReader();            while (Data.Read())            {                Tkani Tk = new Tkani();                Tk.IdTkan = Data["idtkan"].ToString();                Tk.NameTkan = Data["nametkan"].ToString();                Tk.ColorTkan = Data["color"].ToString();                Tk.Width = Data["width"].ToString();                Tk.Length = Data["length"].ToString();                Tk.Description = Data["description"].ToString();                try                {                    // загрузить из таблицы БД байты фотографии в массив                    byte[] PhotoByte = (byte[])Data["phototkan"];                    ImageConverter ImConverter = new ImageConverter();                    // сконвертировать массив байт в изображение                    Tk.PhotoTkan = (Bitmap)ImConverter.ConvertFrom(PhotoByte);                }                catch                {                    // в случае ошибки загрузить пустое изображение из ресурсов                    Tk.PhotoTkan = Properties.Resources.tmp;                }                LstTkani.Add(Tk);  // добавить в список новую ткань            }            con.Close();        }        /// <summary>        /// заполнение таблицы с фотографиями тканей        /// </summary>        void FillLVTkani()        {            LVTkani.Items.Clear();            ImageListTkani.Images.Clear();            foreach(Tkani Tk in LstTkani)            {                // новый элемент для ListView с названием ткани                ListViewItem LV = new ListViewItem(Tk.NameTkan);                // в ImageList добавить изображение ткани                ImageListTkani.Images.Add(Tk.PhotoTkan);                // связать последнее добавленное изображение с новым элементом ListView                LV.ImageIndex = ImageListTkani.Images.Count - 1;                LVTkani.Items.Add(LV);  // добавить новый элемент к ListView            }        }        public struct Furnitura        {            public string IdFur, NameFur, CountFur;            public Image PhotoFur;        }        List<Furnitura> LstFurnitura = new List<Furnitura>();        /// <summary>        /// получить данные о фурнитурах из базы данных        /// </summary>        void GetFurnituraFromDB()        {            SqlConnection con = new SqlConnection(Properties.Settings.Default.fab2021ConnectionString);            con.Open();            SqlCommand Query = new SqlCommand("select * from Furnitura where countfur > 0", con);            SqlDataReader Data = Query.ExecuteReader();            while (Data.Read())            {                Furnitura Fr = new Furnitura();                Fr.IdFur = Data["idfur"].ToString();                Fr.NameFur = Data["namefur"].ToString();                Fr.CountFur = Data["countfur"].ToString();                try                {                    // загрузить из таблицы БД байты фотографии в массив                    byte[] PhotoByte = (byte[])Data["photo"];                    ImageConverter ImConverter = new ImageConverter();                    // сконвертировать массив байт в изображение                    Fr.PhotoFur = (Bitmap)ImConverter.ConvertFrom(PhotoByte);                }                catch                {                    // в случае ошибки загрузить пустое изображение из ресурсов                    Fr.PhotoFur = Properties.Resources.tmp;                }                LstFurnitura.Add(Fr);  // добавить в список новую фурнитуру            }            con.Close();        }        /// <summary>        /// заполнить таблицу с фотографиями фурнитур        /// </summary>        void FillLVFurnitura()        {            LVFurnitura.Items.Clear();            ImageListFur.Images.Clear();            foreach (Furnitura Fr in LstFurnitura)            {                // новый элемент для ListView с названием фурнитуры                ListViewItem LV = new ListViewItem(Fr.NameFur);                // в ImageList добавить изображение фурнитуры                ImageListFur.Images.Add(Fr.PhotoFur);                // связать последнее добавленное изображение с новым элементом ListView                LV.ImageIndex = ImageListFur.Images.Count - 1;                LVFurnitura.Items.Add(LV);  // добавить новый элемент к ListView            }        }        /// <summary>        /// Определение длины ткани, которую нужно отрезать от рулона        /// для изготовления нужного кол-ва изделий заданного размера        /// </summary>        /// <param name="WidthTkan">ширина рулона ткани</param>        /// <param name="WidthIzd">ширина изделия</param>        /// <param name="LengthIzd">длина изделия</param>        /// <param name="CountIzd">кол-во изделий</param>        /// <returns>длина ткани, которую нужно отрезать от рулона</returns>        int CutTkan(int WidthTkan, int WidthIzd, int LengthIzd, int CountIzd)        {            // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ШИРИНЕ ИЗДЕЛИЯ            // кол-во изделий, умещающихся в один ряд на рулоне ткани            int IzdInRow1 = WidthTkan / WidthIzd;            // кол-во рядов, в каждом из которых IzdInRow1 изделий            int Row1 = CountIzd / IzdInRow1;            // если кол-во изделий в 1 ряду умноженное на кол-во рядов меньше            // кол-ва всех изделий, добавить кол-во рядов            if (IzdInRow1 * Row1 < CountIzd)                Row1++;            // длина ткани, которую нужно отрезать от рулона, если укладывать изделия            // по ширине            int CutTkan1 = LengthIzd * Row1;            // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ДЛИНЕ ИЗДЕЛИЯ            // кол-во изделий, умещающихся в один ряд на рулоне ткани            int IzdInRow2 = WidthTkan / LengthIzd;            // кол-во рядов, в каждом из которых IzdInRow2 изделий            int Row2 = CountIzd / IzdInRow2;            // если перемножить кол-во изделий в 1 ряду на кол-во рядов и полученное            // значение меньше кол-ва необходимых изделий, значит нужно использовать            // еще один ряд            if (IzdInRow2 * Row2 < CountIzd)                Row2++;            // длина ткани, которую нужно отрезать от рулона, если укладывать изделия            // по длине            int CutTkan2 = WidthIzd * Row2;            // вернуть наименьшую длину            return Math.Min(CutTkan1, CutTkan2);        }        private void FormAddZakaz_Load(object sender, EventArgs e)        {            // TODO: This line of code loads data into the 'fab2021DataSet1.Tkani' table. You can move, or remove it, as needed.            this.tkaniTableAdapter.Fill(this.fab2021DataSet1.Tkani);            // TODO: This line of code loads data into the 'fab2021DataSet1.Izdeliya' table. You can move, or remove it, as needed.            this.izdeliyaTableAdapter.Fill(this.fab2021DataSet1.Izdeliya);            GetTkaniFromDB();            FillLVTkani();            GetFurnituraFromDB();            FillLVFurnitura();        }        private void LVTkani_SelectedIndexChanged(object sender, EventArgs e)        {            if (LVTkani.SelectedItems.Count > 0)  // есть выделенные элементы            {                int num = LVTkani.SelectedIndices[0];  // номер выделенного элемента                NametkanTextBox.Text = LstTkani[num].NameTkan;                ColorTextBox.Text = LstTkani[num].ColorTkan;                WidthTextBox.Text = LstTkani[num].Width;                LengthTextBox.Text = LstTkani[num].Length;                DescriptionTextBox.Text = LstTkani[num].Description;                IdTkan = LstTkani[num].IdTkan;            }            else  // нет выделенных элементов            {                NametkanTextBox.Text = "";                ColorTextBox.Text = "";                WidthTextBox.Text = "";                LengthTextBox.Text = "";                DescriptionTextBox.Text = "";                IdTkan = "";            }        }        private void LVFurnitura_SelectedIndexChanged(object sender, EventArgs e)        {            if (LVFurnitura.SelectedItems.Count > 0)  // есть выделенные элементы            {                int num = LVFurnitura.SelectedIndices[0];  // номер выделенного элемента                TbxNameFur.Text = LstFurnitura[num].NameFur;                TbxCountFurSklad.Text = LstFurnitura[num].CountFur;                IdFur = LstFurnitura[num].IdFur;            }            else  // нет выделенных элементов            {                TbxNameFur.Text = "";                TbxCountFurSklad.Text = "";                IdFur = "";            }        }        private void BtnOK_Click(object sender, EventArgs e)        {            //int a = CutTkan(430, 150, 200, 4);            //this.Text = a.ToString();            //return;            // кол-во фурнитур, которое нужно сохранить в БД            int NewCountFur = int.Parse(TbxCountFurSklad.Text) -                int.Parse(TbxCountFur.Text) * int.Parse(TbxCountIzd.Text);            SqlConnection con = new SqlConnection(Properties.Settings.Default.fab2021ConnectionString);            con.Open();            string t1 = string.Format(@"update Furnituraset countfur = {0}where idfur = {1}", NewCountFur, IdFur);            SqlCommand query = new SqlCommand(t1, con);            // выполнить запрос            query.ExecuteNonQuery();            con.Close();            int WidthTkan = int.Parse(WidthTextBox.Text); // ширина ткани            // ширина изделия            int WidthIzd = int.Parse(DgvIzd.CurrentRow.Cells[2].Value.ToString());            // длина изделия            int LengthIzd = int.Parse(DgvIzd.CurrentRow.Cells[1].Value.ToString());            int CountIzd = int.Parse(TbxCountIzd.Text); // кол-во изделий            // отрезать от рулона ткани кусок нужной длины            int NewLengthTkan = int.Parse(LengthTextBox.Text) -                CutTkan(WidthTkan, WidthIzd, LengthIzd, CountIzd);            // обновить таблицу Ткани (для выделенной ткани сохранить новую длину NewLengthTkan)            // код менеджера для обработки нового заказа            // нужно заменить на код наименее загруженного менеджера            int IdManager = 2;            try            {                con.Open();                // SQL-запрос для добавления нового заказа                string t = String.Format("insert into Zakaz (idizd, idzakazchik, idman, idtkan, idfur, countfur, countizd) " +                    "values ({0}, {1}, {2}, {3}, {4}, {5}, {6})",                    LblIdIzd.Text, IdZakazchik, IdManager, IdTkan, IdFur, TbxCountFur.Text, TbxCountIzd.Text);                SqlCommand query1 = new SqlCommand(t, con);                // выполнить запрос                query1.ExecuteNonQuery();                con.Close();                MessageBox.Show("Заказ сформирован.", "Внимание!",                    MessageBoxButtons.OK, MessageBoxIcon.Information);                this.Close();  // закрыть форму            }            catch            {                MessageBox.Show("Ошибка добавления нового заказа.", "Внимание!",                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);            }        }    }}
 |