FormLevenshtein.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace СУБД_Швейная_фабрика
  12. {
  13. public partial class FormLevenshtein : Form
  14. {
  15. public FormLevenshtein()
  16. {
  17. InitializeComponent();
  18. }
  19. /// <summary>
  20. /// Расстояние Левенштейна
  21. /// </summary>
  22. /// <param name="t1">Первая строка</param>
  23. /// <param name="t2">Вторая строка</param>
  24. /// <returns>Расстояние Левенштейна между двумя строками</returns>
  25. static int Levenshtein(string t1, string t2)
  26. {
  27. int CntLev = Math.Abs(t1.Length - t2.Length);
  28. // перебор до последнего символа более короткой строки
  29. for (int i = 0; i <= Math.Min(t1.Length, t2.Length) - 1; i++)
  30. {
  31. if (t1[i] != t2[i])
  32. CntLev++;
  33. }
  34. return CntLev;
  35. }
  36. List<string> LstTkani = new List<string>();
  37. /// <summary>
  38. /// На момент открытия формы сформировать список с названиями тканей
  39. /// и заполнить DataGridView
  40. /// </summary>
  41. private void FormLevenshtein_Load(object sender, EventArgs e)
  42. {
  43. SqlConnection con = new SqlConnection(Properties.Settings.Default.fab2021ConnectionString);
  44. con.Open();
  45. string TxtQuery = "select nametkan from Tkani";
  46. SqlCommand query1 = new SqlCommand(TxtQuery, con);
  47. // выполнить запрос
  48. SqlDataReader res = query1.ExecuteReader();
  49. while (res.Read())
  50. LstTkani.Add(res["nametkan"].ToString());
  51. con.Close();
  52. BtnShowAll_Click(sender, e);
  53. }
  54. /// <summary>
  55. /// Отобразить весь список тканей
  56. /// </summary>
  57. private void BtnShowAll_Click(object sender, EventArgs e)
  58. {
  59. DgvTkani.Rows.Clear();
  60. foreach (string Tkan in LstTkani)
  61. DgvTkani.Rows.Add(Tkan);
  62. }
  63. /// <summary>
  64. /// Поиск с учетом расстояния Левенштейна
  65. /// </summary>
  66. private void BtnFind_Click(object sender, EventArgs e)
  67. {
  68. DgvTkani.Rows.Clear();
  69. foreach (string Tkan in LstTkani)
  70. if (Levenshtein(Tkan, TbxFind.Text) <= 3)
  71. DgvTkani.Rows.Add(Tkan);
  72. }
  73. }
  74. }