FormLeven.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 FormLeven : Form
  14. {
  15. public FormLeven()
  16. {
  17. InitializeComponent();
  18. }
  19. /// <summary>
  20. /// Расстояние Левенштейна
  21. /// </summary>
  22. /// <param name="txt1">Первая строка</param>
  23. /// <param name="txt2">Вторая строка</param>
  24. /// <returns>Расстояние Левенштейна между двумя строками</returns>
  25. static int Levenshtein(string txt1, string txt2)
  26. {
  27. string t1 = txt1.ToLower().Trim();
  28. string t2 = txt2.ToLower().Trim();
  29. int CntLev = Math.Abs(t1.Length - t2.Length);
  30. // перебор до последнего символа более короткой строки
  31. for (int i = 0; i <= Math.Min(t1.Length, t2.Length) - 1; i++)
  32. {
  33. if (t1[i] != t2[i])
  34. CntLev++;
  35. }
  36. return CntLev;
  37. }
  38. List<string> LstTkani = new List<string>();
  39. /// <summary>
  40. /// Отобразить весь список тканей
  41. /// </summary>
  42. private void BtnShowAll_Click(object sender, EventArgs e)
  43. {
  44. DgvTkani.Rows.Clear();
  45. foreach (string Tkan in LstTkani)
  46. DgvTkani.Rows.Add(Tkan);
  47. }
  48. /// <summary>
  49. /// На момент открытия формы сформировать список с названиями тканей
  50. /// и заполнить DataGridView
  51. /// </summary>
  52. private void FormLeven_Load(object sender, EventArgs e)
  53. {
  54. SqlConnection con = new SqlConnection("Data Source=213.155.192.79,3002;Initial Catalog=СlothesFactoryLG;Persist Security Info=True;User ID=u21lebed;Password=hgm8");
  55. con.Open();
  56. string TxtQuery = "select Title from Tkan";
  57. SqlCommand query1 = new SqlCommand(TxtQuery, con);
  58. // выполнить запрос
  59. SqlDataReader res = query1.ExecuteReader();
  60. while (res.Read())
  61. LstTkani.Add(res["Title"].ToString());
  62. con.Close();
  63. BtnShowAll_Click(sender, e);
  64. }
  65. /// <summary>
  66. /// Поиск с учетом расстояния Левенштейна
  67. /// </summary>
  68. private void BtnFind_Click(object sender, EventArgs e)
  69. {
  70. DgvTkani.Rows.Clear();
  71. foreach (string Tkan in LstTkani)
  72. if (Levenshtein(Tkan, TbxFind.Text) <= 3)
  73. DgvTkani.Rows.Add(Tkan);
  74. }
  75. }
  76. }