Advertisement
romkos

Prodmag a14

May 29th, 2025
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Runtime.Serialization.Formatters.Binary;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using System.Text.RegularExpressions;
  13. using Microsoft.VisualBasic.Devices;
  14.  
  15. namespace WindowsFormsApplication11
  16. {
  17.     public partial class MainForm : Form
  18.     {
  19.         public static volatile int elements = 0;
  20.         public static volatile int changes = 0;
  21.         public static string[] formDelegate = new string[3];
  22.         public string group = "";
  23.         public static volatile bool state = false;
  24.         public static int currentIndex = 0;
  25.         DataGridView MainTable = new DataGridView();
  26.  
  27.         public MainForm()
  28.         {
  29.             InitializeComponent();
  30.         }
  31.  
  32.         private void MainTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
  33.         {
  34.             currentIndex = e.RowIndex;
  35.         }
  36.         private void MainTable_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
  37.         {
  38.             int size = MainTable.Rows.Count;
  39.             for (int i = 0; i < size; i++)
  40.                 MainTable.Rows[i].HeaderCell.Value = (i + 1).ToString();
  41.         }
  42.         private void MainTable_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
  43.         {
  44.             int size = MainTable.Rows.Count;
  45.             for (int i = 0; i < size; i++)
  46.                 MainTable.Rows[i].HeaderCell.Value = (i + 1).ToString();
  47.         }
  48.         private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
  49.         {
  50.             EndWork();
  51.         }
  52.         private void MainTable_Sorted(object sender, EventArgs e)
  53.         {
  54.             int size = MainTable.Rows.Count;
  55.             for (int i = 0; i < size; i++)
  56.                 MainTable.Rows[i].HeaderCell.Value = (i + 1).ToString();
  57.             changes++;
  58.         }
  59.  
  60.         private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
  61.         {
  62.             OpenDB(false);
  63.         }
  64.         private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
  65.         {
  66.             SaveDB(true);
  67.         }
  68.         private void создатьToolStripMenuItem_Click(object sender, EventArgs e)
  69.         {
  70.             CreateDB();
  71.             SaveDB(false);
  72.         }
  73.  
  74.         #region DataBase
  75.         private void OpenDB(bool OpenMode)
  76.         {
  77.             string path = Directory.GetCurrentDirectory() + "\\" + "DataBase";
  78.             OpenFileDialog OpenFD = new OpenFileDialog()
  79.             {
  80.                 AddExtension = true,
  81.                 DefaultExt = "db",
  82.                 Filter = "Элементы (*.db)|*.db",
  83.                 FilterIndex = 0,
  84.                 RestoreDirectory = false,
  85.                 InitialDirectory = path
  86.             };
  87.  
  88.             if (OpenFD.ShowDialog() != DialogResult.OK)
  89.             {
  90.                 if (!state) OpenDB(false);
  91.                 return;
  92.             }
  93.             string[,] dataBase = null;
  94.             FileStream fs = new FileStream(OpenFD.FileName, FileMode.Open);
  95.             try
  96.             {
  97.                 BinaryFormatter bf = new BinaryFormatter();
  98.                 dataBase = (string[,])bf.Deserialize(fs);
  99.             }
  100.             catch (Exception)
  101.             {
  102.                 MessageBox.Show("Выбранный файл имеет неподходящий формат");
  103.                 if (OpenMode)
  104.                     OpenDB(OpenMode);
  105.                 return;
  106.             }
  107.             finally
  108.             {
  109.                 fs.Close();
  110.             }
  111.             elements = dataBase.GetLength(0);
  112.             if (elements == 0)
  113.             {
  114.                 MessageBox.Show("Вы пытаетесь открыть пустой файл");
  115.                 if (OpenMode)
  116.                     OpenDB(OpenMode);
  117.             }
  118.             else
  119.             {
  120.                 MainTable.Rows.Clear();
  121.                 MainTable.Rows.Add(elements);
  122.                 for (int i = 0; i < elements; i++)
  123.                 {
  124.                     MainTable.Rows[i].Cells[0].Value = dataBase[i, 0].ToString();
  125.                     MainTable.Rows[i].Cells[1].Value = dataBase[i, 1].ToString();
  126.                     MainTable.Rows[i].Cells[2].Value = dataBase[i, 2].ToString();
  127.                 }
  128.                 group = Path.GetFileNameWithoutExtension(OpenFD.FileName).Replace("!", "");
  129.                 GroupInfoBox.Text = group;
  130.                 changes = 0;
  131.                 state = true;
  132.             }
  133.         }
  134.         private void SaveDB(bool saveMode)
  135.         {
  136.             elements = MainTable.Rows.Count;
  137.             if (elements == 0 && saveMode)
  138.                 MessageBox.Show("Вы пытаетесь сохранить пустой файл");
  139.             else
  140.             {
  141.                 string[,] dataBase = new string[elements, 3];
  142.                 for (int i = 0; i < elements; i++)
  143.                 {
  144.                     dataBase[i, 0] = MainTable.Rows[i].Cells[0].Value.ToString();
  145.                     dataBase[i, 1] = MainTable.Rows[i].Cells[1].Value.ToString();
  146.                     dataBase[i, 2] = MainTable.Rows[i].Cells[2].Value.ToString();
  147.                 }
  148.                 string path = Directory.GetCurrentDirectory() + "\\" + "DataBase" + "\\" + group + ".db";
  149.                 FileStream fs = new FileStream(path, FileMode.Create);
  150.                 BinaryFormatter bf = new BinaryFormatter();
  151.                 bf.Serialize(fs, dataBase);
  152.                 fs.Close();
  153.                 if (saveMode) MessageBox.Show("Файл сохранен");
  154.                 changes = 0;
  155.                 state = true;
  156.             }
  157.         }
  158.         private void CreateDB()
  159.         {
  160.             FileStream fs = null;
  161.             //FileCreateDialog f1 = new FileCreateDialog();
  162.             SaveFileDialog f1 = new SaveFileDialog();
  163.             DialogResult res = f1.ShowDialog();
  164.             //f1.Close();
  165.             if (res == DialogResult.Cancel)
  166.                 return;
  167.             MainTable.Rows.Clear();
  168.             group = f1.FileName.Trim().Replace("!", "");
  169.             string path = Directory.GetCurrentDirectory() + "\\" + "DataBase" + "\\" + group + ".db";
  170.             try
  171.             {
  172.                 fs = new FileStream(path, FileMode.CreateNew);
  173.                 fs.Close();
  174.             }
  175.             catch (IOException)
  176.             {
  177.                 SaveFileDialog f = new SaveFileDialog();
  178.                 res = f.ShowDialog();
  179.                 //f.Close();
  180.  
  181.                 if (res == DialogResult.OK)
  182.                 {
  183.                     try
  184.                     {
  185.                         fs = new FileStream(path, FileMode.Create);
  186.                         fs.Close();
  187.                     }
  188.                     catch (Exception)
  189.                     {
  190.                         MessageBox.Show("Неверный формат имени файла! Попробуйте еще раз");
  191.                         CreateDB();
  192.                     }
  193.                 }
  194.                 else
  195.                     CreateDB();
  196.             }
  197.             catch (Exception)
  198.             {
  199.                 MessageBox.Show("Неверный формат имени файла! Попробуйте еще раз");
  200.                 CreateDB();
  201.             }
  202.             GroupInfoBox.Text = group;
  203.         }
  204.         private void EndWork()
  205.         {
  206.             if (state)
  207.             {
  208.                 string[,] dataBase = null;
  209.                 string path = Directory.GetCurrentDirectory() + "\\" + "DataBase" + "\\" + group + ".db";
  210.                 bool ok = true;
  211.                 FileStream fs = null;
  212.                 try
  213.                 {
  214.                     fs = new FileStream(path, FileMode.Open);
  215.                 }
  216.                 catch (IOException)
  217.                 {
  218.                     ok = false;
  219.                 }
  220.                 if (ok)
  221.                 {
  222.                     try
  223.                     {
  224.                         BinaryFormatter bf = new BinaryFormatter();
  225.                         dataBase = (string[,])bf.Deserialize(fs);
  226.                         ok = dataBase.GetLength(0) != 0;
  227.                     }
  228.                     catch (Exception)
  229.                     {
  230.                         ok = false;
  231.                     }
  232.                     finally
  233.                     {
  234.                         fs.Close();
  235.                     }
  236.                     if (!ok)
  237.                         File.Delete(path);
  238.                 }
  239.                 elements = MainTable.Rows.Count;
  240.                 if (elements == 0)
  241.                     return;
  242.                 else
  243.                 {
  244.                     if (changes == 0)
  245.                     {
  246.                         return;
  247.                     }
  248.                     else
  249.                     {
  250.                         //EndWork end = new EndWork();
  251.                         DialogResult res = MessageBox.Show("Save database?", "", MessageBoxButtons.YesNo);
  252.                         if (res == DialogResult.Yes)
  253.                             SaveDB(false);
  254.                         else
  255.                             return;
  256.                     }
  257.                 }
  258.                 state = true;
  259.             }
  260.         }
  261.         #endregion
  262.  
  263.         #region AddElement
  264.         private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)
  265.         {
  266.             if (group == "")
  267.             {
  268.                 CreateDB();
  269.                 return;
  270.             }
  271.             MainForm.elements = MainTable.Rows.Count;
  272.             AddForm f = new AddForm();
  273.  
  274.             DialogResult res = f.ShowDialog();
  275.  
  276.             if (res == DialogResult.OK || res == DialogResult.Cancel)
  277.                 AddElement(f.FName, f.SName, f.TName, f.THName, f.AddMode, f.Number);
  278.         }
  279.         private void AddElement(string NameOne, string NumberOne, string TimeOne, string NumberLast, int AddMode, int Number)
  280.         {
  281.             Regex pattern1 = new Regex("");
  282.             Regex pattern2 = new Regex("");
  283.             if (!(pattern1.IsMatch(NameOne.Trim()) || pattern2.IsMatch(NameOne.Trim())))
  284.             {
  285.                 MessageBox.Show("Неверный формат введенных данных!\n");
  286.                 return;
  287.             }
  288.             pattern1 = new Regex("");
  289.             if (!pattern1.IsMatch(NumberOne.Trim()))
  290.             {
  291.                 MessageBox.Show("Неверный формат введенных данных!\n");
  292.                 return;
  293.             }
  294.             pattern1 = new Regex("");
  295.             pattern2 = new Regex("");
  296.             Regex pattern3 = new Regex(@"^$");
  297.             if (!(pattern1.IsMatch(TimeOne.Trim()) || pattern2.IsMatch(TimeOne.Trim()) || pattern3.IsMatch(TimeOne.Trim())))
  298.             {
  299.                 MessageBox.Show("Неверный формат введенных данных!\n");
  300.                 return;
  301.             }
  302.             pattern1 = new Regex("");
  303.             pattern2 = new Regex("");
  304.             if (!(pattern1.IsMatch(NumberLast.Trim()) || pattern2.IsMatch(NumberLast.Trim()) || pattern3.IsMatch(NumberLast.Trim())))
  305.             {
  306.                 MessageBox.Show("Неверный формат введенных данных!\n");
  307.                 return;
  308.             }
  309.             int index = 0;
  310.             switch (AddMode)
  311.             {
  312.                 case 0:
  313.                     {
  314.                         MainTable.Rows.Insert(0, 1);
  315.                         break;
  316.                     }
  317.                 case 1:
  318.                     {
  319.                         index = MainTable.Rows.Add();
  320.                         break;
  321.                     }
  322.                 case 2:
  323.                     {
  324.                         try
  325.                         {
  326.                             MainTable.Rows.Insert(Number - 1, 1);
  327.                             index = Number - 1;
  328.                         }
  329.                         catch (Exception)
  330.                         {
  331.                             MessageBox.Show("Неверный формат!\nВведите целое число больше нуля и меньше " + (elements + 2));
  332.                         }
  333.                         break;
  334.                     }
  335.             }
  336.             MainTable.Rows[index].SetValues(NameOne, NumberOne, TimeOne, NumberLast, group);
  337.             MainTable.Rows[index].Selected = true;
  338.             currentIndex = index;
  339.             changes++;
  340.             int size = MainTable.Rows.Count;
  341.             if (changes > size / 2 && size != 0) SaveDB(false);
  342.         }
  343.  
  344.         #endregion
  345.  
  346.         private void вывестиИспорченныеПродуктыToolStripMenuItem_Click(object sender, EventArgs e)
  347.         {
  348.             elements = MainTable.Rows.Count;
  349.             if (elements == 0)
  350.                 MessageBox.Show("Записи отсутствуют\nСначала сформируйте базу данных");
  351.             else
  352.             {
  353.                 SearchForm f = new SearchForm();
  354.                 DialogResult res = f.ShowDialog();
  355.                 if (res == DialogResult.OK || res == DialogResult.Cancel)
  356.                     SearchElements(f.ToSearch, f.SearchMode);
  357.             }
  358.         }
  359.         private void SearchElements(string ToSearch, int SearchMode)
  360.         {
  361.             if (SearchMode == 0)
  362.             {
  363.                 try
  364.                 {
  365.                     MainTable.Rows[Convert.ToInt32(ToSearch) - 1].Selected = true;
  366.                 }
  367.                 catch (Exception)
  368.                 {
  369.                     MessageBox.Show("Неверный формат введенных данных");
  370.                 }
  371.             }
  372.             else
  373.             {
  374.                 elements = MainTable.Rows.Count;
  375.                 bool found = false;
  376.                 int i = 0;
  377.                 for (; i < elements; i++)
  378.                 {
  379.                     if (MainTable.Rows[i].Cells[SearchMode - 1].Value.ToString().Contains(ToSearch))
  380.                     {
  381.                         found = true;
  382.                         break;
  383.                     }
  384.                 }
  385.                 if (!found)
  386.                     MessageBox.Show("Запись не найдена");
  387.                 else
  388.                     MainTable.Rows[i].Selected = true;
  389.             }
  390.         }
  391.     }
  392. }
  393.  
  394.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement